@prenta/core 5.9.0 → 6.0.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.
- package/CHANGELOG.md +21 -0
- package/dist/actions.d.ts +5 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +40 -18
- package/dist/actions.js.map +1 -1
- package/dist/ai/brand-voice-alignment.d.ts.map +1 -1
- package/dist/ai/brand-voice-alignment.js +2 -0
- package/dist/ai/brand-voice-alignment.js.map +1 -1
- package/dist/ai/brand-voice-analyze.d.ts.map +1 -1
- package/dist/ai/brand-voice-analyze.js +1 -0
- package/dist/ai/brand-voice-analyze.js.map +1 -1
- package/dist/ai/content-writing-generate.d.ts.map +1 -1
- package/dist/ai/content-writing-generate.js +2 -5
- package/dist/ai/content-writing-generate.js.map +1 -1
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +1 -1
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/plugin-import.d.ts +12 -0
- package/dist/ai/plugin-import.d.ts.map +1 -0
- package/dist/ai/plugin-import.js +16 -0
- package/dist/ai/plugin-import.js.map +1 -0
- package/dist/ai/runtime.d.ts +40 -2
- package/dist/ai/runtime.d.ts.map +1 -1
- package/dist/ai/runtime.js +60 -0
- package/dist/ai/runtime.js.map +1 -1
- package/dist/api/route-helpers.d.ts +9 -14
- package/dist/api/route-helpers.d.ts.map +1 -1
- package/dist/api/route-helpers.js +20 -43
- package/dist/api/route-helpers.js.map +1 -1
- package/dist/api/routes/seo.d.ts.map +1 -1
- package/dist/api/routes/seo.js +59 -42
- package/dist/api/routes/seo.js.map +1 -1
- package/dist/config/collection-lookup.d.ts +21 -0
- package/dist/config/collection-lookup.d.ts.map +1 -0
- package/dist/config/collection-lookup.js +44 -0
- package/dist/config/collection-lookup.js.map +1 -0
- package/dist/content/index.d.ts +0 -2
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +0 -1
- package/dist/content/index.js.map +1 -1
- package/dist/db/model-types.d.ts +0 -1
- package/dist/db/model-types.d.ts.map +1 -1
- package/dist/generated/internal/class.js +4 -4
- package/dist/generated/internal/prismaNamespace.d.ts +0 -1
- package/dist/generated/internal/prismaNamespace.js +0 -1
- package/dist/generated/internal/prismaNamespaceBrowser.d.ts +0 -1
- package/dist/generated/internal/prismaNamespaceBrowser.js +0 -1
- package/dist/generated/models/Document.d.ts +1 -58
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/security/access.d.ts.map +1 -1
- package/dist/security/access.js +0 -2
- package/dist/security/access.js.map +1 -1
- package/dist/security/internal-keys.d.ts +5 -7
- package/dist/security/internal-keys.d.ts.map +1 -1
- package/dist/security/internal-keys.js +8 -10
- package/dist/security/internal-keys.js.map +1 -1
- package/dist/seo/audit-engine.d.ts +5 -0
- package/dist/seo/audit-engine.d.ts.map +1 -1
- package/dist/seo/audit-engine.js +63 -0
- package/dist/seo/audit-engine.js.map +1 -1
- package/dist/seo/audit-runner.d.ts.map +1 -1
- package/dist/seo/audit-runner.js +23 -1
- package/dist/seo/audit-runner.js.map +1 -1
- package/dist/seo/autopilot-gate.d.ts.map +1 -1
- package/dist/seo/autopilot-gate.js +30 -2
- package/dist/seo/autopilot-gate.js.map +1 -1
- package/dist/seo/autopilot-policy.d.ts +2 -2
- package/dist/seo/autopilot-policy.d.ts.map +1 -1
- package/dist/seo/autopilot-policy.js +1 -0
- package/dist/seo/autopilot-policy.js.map +1 -1
- package/dist/seo/autopilot-revert.d.ts.map +1 -1
- package/dist/seo/autopilot-revert.js +5 -2
- package/dist/seo/autopilot-revert.js.map +1 -1
- package/dist/seo/autopilot.d.ts.map +1 -1
- package/dist/seo/autopilot.js +18 -11
- package/dist/seo/autopilot.js.map +1 -1
- package/dist/seo/faq-eligibility.d.ts +32 -0
- package/dist/seo/faq-eligibility.d.ts.map +1 -0
- package/dist/seo/faq-eligibility.js +61 -0
- package/dist/seo/faq-eligibility.js.map +1 -0
- package/dist/seo/faq-schema.d.ts +13 -0
- package/dist/seo/faq-schema.d.ts.map +1 -0
- package/dist/seo/faq-schema.js +41 -0
- package/dist/seo/faq-schema.js.map +1 -0
- package/dist/seo/faq-signals.d.ts +54 -0
- package/dist/seo/faq-signals.d.ts.map +1 -0
- package/dist/seo/faq-signals.js +176 -0
- package/dist/seo/faq-signals.js.map +1 -0
- package/dist/seo/index.d.ts +1 -1
- package/dist/seo/index.d.ts.map +1 -1
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/issue-fix-ai.d.ts +34 -5
- package/dist/seo/issue-fix-ai.d.ts.map +1 -1
- package/dist/seo/issue-fix-ai.js +59 -23
- package/dist/seo/issue-fix-ai.js.map +1 -1
- package/dist/seo/issue-fix-apply.d.ts +32 -2
- package/dist/seo/issue-fix-apply.d.ts.map +1 -1
- package/dist/seo/issue-fix-apply.js +231 -3
- package/dist/seo/issue-fix-apply.js.map +1 -1
- package/dist/seo/issue-fix-faq.d.ts +131 -0
- package/dist/seo/issue-fix-faq.d.ts.map +1 -0
- package/dist/seo/issue-fix-faq.js +455 -0
- package/dist/seo/issue-fix-faq.js.map +1 -0
- package/dist/seo/issue-fix-verify.d.ts +9 -0
- package/dist/seo/issue-fix-verify.d.ts.map +1 -1
- package/dist/seo/issue-fix-verify.js +61 -0
- package/dist/seo/issue-fix-verify.js.map +1 -1
- package/dist/seo/issue-fix.d.ts +5 -2
- package/dist/seo/issue-fix.d.ts.map +1 -1
- package/dist/seo/issue-fix.js +35 -0
- package/dist/seo/issue-fix.js.map +1 -1
- package/dist/seo/link-suggest.d.ts.map +1 -1
- package/dist/seo/link-suggest.js +1 -4
- package/dist/seo/link-suggest.js.map +1 -1
- package/dist/seo/page-meta.d.ts +8 -0
- package/dist/seo/page-meta.d.ts.map +1 -1
- package/dist/seo/page-meta.js +85 -12
- package/dist/seo/page-meta.js.map +1 -1
- package/dist/seo/proposals-bulk-apply.d.ts +6 -3
- package/dist/seo/proposals-bulk-apply.d.ts.map +1 -1
- package/dist/seo/proposals-bulk-apply.js +1 -0
- package/dist/seo/proposals-bulk-apply.js.map +1 -1
- package/dist/seo/proposals.d.ts +24 -0
- package/dist/seo/proposals.d.ts.map +1 -1
- package/dist/seo/proposals.js +35 -4
- package/dist/seo/proposals.js.map +1 -1
- package/dist/seo/seo-field-values.d.ts +18 -0
- package/dist/seo/seo-field-values.d.ts.map +1 -0
- package/dist/seo/seo-field-values.js +25 -0
- package/dist/seo/seo-field-values.js.map +1 -0
- package/package.json +1 -1
- package/prisma/migrations/0019_drop_content_graph/migration.sql +4 -0
- package/prisma/schema.prisma +0 -1
- package/dist/api/auth-context.d.ts +0 -3
- package/dist/api/auth-context.d.ts.map +0 -1
- package/dist/api/auth-context.js +0 -3
- package/dist/api/auth-context.js.map +0 -1
- package/dist/api/limiters.d.ts +0 -3
- package/dist/api/limiters.d.ts.map +0 -1
- package/dist/api/limiters.js +0 -3
- package/dist/api/limiters.js.map +0 -1
- package/dist/content/content-graph.d.ts +0 -25
- package/dist/content/content-graph.d.ts.map +0 -1
- package/dist/content/content-graph.js +0 -40
- package/dist/content/content-graph.js.map +0 -1
- package/dist/db/index.d.ts +0 -9
- package/dist/db/index.d.ts.map +0 -1
- package/dist/db/index.js +0 -5
- package/dist/db/index.js.map +0 -1
- package/dist/next/preview.d.ts +0 -10
- package/dist/next/preview.d.ts.map +0 -1
- package/dist/next/preview.js +0 -17
- package/dist/next/preview.js.map +0 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazily load the optional `@prenta/plugin-ai` peer.
|
|
3
|
+
*
|
|
4
|
+
* The specifier is assembled at runtime so bundlers (webpack / turbopack /
|
|
5
|
+
* vite) do not try to resolve a package the host may not have installed.
|
|
6
|
+
* Callers assert the shape they need at the call site; the module is typed
|
|
7
|
+
* `any` because it is an optional peer whose exports Spec B is retiring.
|
|
8
|
+
*
|
|
9
|
+
* One definition: `api/route-helpers.ts` re-exports this for the route files.
|
|
10
|
+
*/
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- optional peer, shape asserted by callers
|
|
12
|
+
export async function importAIPlugin() {
|
|
13
|
+
const mod = '@prenta/' + 'plugin-ai';
|
|
14
|
+
return import(/* webpackIgnore: true */ /* turbopackIgnore: true */ /* @vite-ignore */ mod);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=plugin-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-import.js","sourceRoot":"","sources":["../../src/ai/plugin-import.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,0GAA0G;AAC1G,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,GAAG,GAAG,UAAU,GAAG,WAAW,CAAA;IACpC,OAAO,MAAM,CAAC,yBAAyB,CAAC,2BAA2B,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;AAC7F,CAAC"}
|
package/dist/ai/runtime.d.ts
CHANGED
|
@@ -14,9 +14,17 @@
|
|
|
14
14
|
* (`./providers/*`) speak HTTP, this module decides *whether* and *with what*
|
|
15
15
|
* to call them.
|
|
16
16
|
*/
|
|
17
|
+
import type { ZodType } from 'zod';
|
|
18
|
+
import { stripJsonFences } from './brand-voice-analyze.js';
|
|
17
19
|
import type { AIProviderKey } from './types.js';
|
|
18
|
-
/**
|
|
19
|
-
export
|
|
20
|
+
/** Re-exported so JSON callers get the fence stripper from the same module as the helper. */
|
|
21
|
+
export { stripJsonFences };
|
|
22
|
+
/**
|
|
23
|
+
* Why a feature could not run. Distinct codes let callers map to HTTP status.
|
|
24
|
+
* `invalid_output` is specific to {@link generateJsonForFeature}: the model
|
|
25
|
+
* answered, but the reply never matched the requested schema.
|
|
26
|
+
*/
|
|
27
|
+
export type RuntimeErrorCode = 'feature_disabled' | 'no_provider' | 'no_model' | 'no_key' | 'budget_exceeded' | 'rate_limited' | 'provider_error' | 'invalid_output';
|
|
20
28
|
export interface RuntimeError {
|
|
21
29
|
ok: false;
|
|
22
30
|
code: RuntimeErrorCode;
|
|
@@ -85,6 +93,36 @@ export interface GenerateForFeatureSuccess {
|
|
|
85
93
|
* `provider_error` RuntimeError too, so callers have a single shape to handle.
|
|
86
94
|
*/
|
|
87
95
|
export declare function generateTextForFeature(db: unknown, featureKey: string, input: GenerateForFeatureInput): Promise<GenerateForFeatureSuccess | RuntimeError>;
|
|
96
|
+
export interface GenerateJsonForFeatureInput<T> extends GenerateForFeatureInput {
|
|
97
|
+
/** Shape the parsed reply must satisfy; `value` is the parsed output. */
|
|
98
|
+
schema: ZodType<T>;
|
|
99
|
+
/** Total attempts including the first (default 2 = one retry). */
|
|
100
|
+
maxAttempts?: number;
|
|
101
|
+
/** Seam for tests; defaults to {@link generateTextForFeature}. */
|
|
102
|
+
generate?: (db: unknown, featureKey: string, input: GenerateForFeatureInput) => Promise<GenerateForFeatureSuccess | RuntimeError>;
|
|
103
|
+
}
|
|
104
|
+
export interface GenerateJsonForFeatureSuccess<T> {
|
|
105
|
+
ok: true;
|
|
106
|
+
value: T;
|
|
107
|
+
/** Fence-stripped raw text that parsed successfully. */
|
|
108
|
+
text: string;
|
|
109
|
+
/** How many model calls it took (1 = first try). */
|
|
110
|
+
attempts: number;
|
|
111
|
+
usage: GenerateForFeatureSuccess['usage'];
|
|
112
|
+
modelId: string;
|
|
113
|
+
providerModelId: string;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Generate text, parse it as JSON, and validate it against a Zod schema.
|
|
117
|
+
* Retries with the validation error appended to the prompt until
|
|
118
|
+
* `maxAttempts` is exhausted (default: one retry); the final failure returns
|
|
119
|
+
* `invalid_output`. Runtime errors (disabled, budget, provider…) pass through
|
|
120
|
+
* untouched and are never retried.
|
|
121
|
+
*
|
|
122
|
+
* Cost: each validation retry is a second fully governed call — it counts
|
|
123
|
+
* against `maxRequestsPerDay` and records usage a second time.
|
|
124
|
+
*/
|
|
125
|
+
export declare function generateJsonForFeature<T>(db: unknown, featureKey: string, input: GenerateJsonForFeatureInput<T>): Promise<GenerateJsonForFeatureSuccess<T> | RuntimeError>;
|
|
88
126
|
export interface EmbedForFeatureInput {
|
|
89
127
|
/** Recorded on the usage audit entry so spend is attributable. */
|
|
90
128
|
userId?: string;
|
package/dist/ai/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/runtime.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* to call them.
|
|
16
16
|
*/
|
|
17
17
|
import { applyBrandVoice } from './brand-voice.js';
|
|
18
|
+
import { stripJsonFences } from './brand-voice-analyze.js';
|
|
18
19
|
import { resolveWireModelId } from './catalog.js';
|
|
19
20
|
import { getAIConfig, resolveProviderKey } from './config-store.js';
|
|
20
21
|
import { getModels } from './models.js';
|
|
@@ -23,6 +24,8 @@ import { AdapterHttpError } from './providers/http.js';
|
|
|
23
24
|
import { resolveFeatureModel } from './resolve.js';
|
|
24
25
|
import { modelDisallowsSampling, samplingParamProviderMessage } from './sampling.js';
|
|
25
26
|
import { countFeatureRunsToday, getUsageSummary } from './usage.js';
|
|
27
|
+
/** Re-exported so JSON callers get the fence stripper from the same module as the helper. */
|
|
28
|
+
export { stripJsonFences };
|
|
26
29
|
function err(code, message) {
|
|
27
30
|
return { ok: false, code, message };
|
|
28
31
|
}
|
|
@@ -159,6 +162,63 @@ export async function generateTextForFeature(db, featureKey, input) {
|
|
|
159
162
|
return err('provider_error', message);
|
|
160
163
|
}
|
|
161
164
|
}
|
|
165
|
+
const DEFAULT_JSON_ATTEMPTS = 2;
|
|
166
|
+
const VALIDATION_ERROR_MAX_CHARS = 600;
|
|
167
|
+
function retryPrompt(basePrompt, lastError) {
|
|
168
|
+
return `${basePrompt}\n\nYour previous reply was not valid: ${lastError}. Reply with ONLY the JSON object.`;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Generate text, parse it as JSON, and validate it against a Zod schema.
|
|
172
|
+
* Retries with the validation error appended to the prompt until
|
|
173
|
+
* `maxAttempts` is exhausted (default: one retry); the final failure returns
|
|
174
|
+
* `invalid_output`. Runtime errors (disabled, budget, provider…) pass through
|
|
175
|
+
* untouched and are never retried.
|
|
176
|
+
*
|
|
177
|
+
* Cost: each validation retry is a second fully governed call — it counts
|
|
178
|
+
* against `maxRequestsPerDay` and records usage a second time.
|
|
179
|
+
*/
|
|
180
|
+
export async function generateJsonForFeature(db, featureKey, input) {
|
|
181
|
+
const { schema, maxAttempts = DEFAULT_JSON_ATTEMPTS, generate = generateTextForFeature, ...base } = input;
|
|
182
|
+
const attempts = Math.max(1, Math.floor(maxAttempts));
|
|
183
|
+
let prompt = base.prompt;
|
|
184
|
+
let lastError = '';
|
|
185
|
+
for (let attempt = 1; attempt <= attempts; attempt++) {
|
|
186
|
+
const r = await generate(db, featureKey, { ...base, prompt });
|
|
187
|
+
if (!r.ok)
|
|
188
|
+
return r;
|
|
189
|
+
const text = stripJsonFences(r.text);
|
|
190
|
+
let parsed;
|
|
191
|
+
try {
|
|
192
|
+
parsed = JSON.parse(text);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// Static text on purpose: V8's SyntaxError message echoes a slice of the
|
|
196
|
+
// raw (untrusted) model output, which must not flow into the retry prompt
|
|
197
|
+
// or the surfaced error message.
|
|
198
|
+
lastError = 'Not valid JSON';
|
|
199
|
+
prompt = retryPrompt(base.prompt, lastError);
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const result = schema.safeParse(parsed);
|
|
203
|
+
if (result.success) {
|
|
204
|
+
return {
|
|
205
|
+
ok: true,
|
|
206
|
+
value: result.data,
|
|
207
|
+
text,
|
|
208
|
+
attempts: attempt,
|
|
209
|
+
usage: r.usage,
|
|
210
|
+
modelId: r.modelId,
|
|
211
|
+
providerModelId: r.providerModelId,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
lastError = result.error.issues
|
|
215
|
+
.map((i) => `${i.path.join('.') || '<root>'}: ${i.message}`)
|
|
216
|
+
.join('; ')
|
|
217
|
+
.slice(0, VALIDATION_ERROR_MAX_CHARS);
|
|
218
|
+
prompt = retryPrompt(base.prompt, lastError);
|
|
219
|
+
}
|
|
220
|
+
return err('invalid_output', `AI returned output that did not match the expected shape (${lastError}).`);
|
|
221
|
+
}
|
|
162
222
|
/**
|
|
163
223
|
* Default embedding model per provider. Providers absent from this map have no
|
|
164
224
|
* embeddings API — `embedForFeature` returns a typed `no_model` error for them
|
package/dist/ai/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/ai/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import type { ActionContext } from '../actions.js';
|
|
2
2
|
import { type TeamOptions } from '../auth/team.js';
|
|
3
|
-
import type { CollectionDefinition } from '../config/types.js';
|
|
4
3
|
import type { FetchFormEntriesParams, FetchFormsParams, FormDefinition } from '../forms/types.js';
|
|
5
4
|
import { type IncomingFile } from '../forms/files.js';
|
|
6
5
|
import { type ApiKeyScope } from '../security/api-key-enhanced.js';
|
|
7
6
|
import type { PrentaDB } from '../db/client-types.js';
|
|
8
7
|
export declare function importBlobStorage(): Promise<any>;
|
|
9
|
-
export
|
|
8
|
+
export { importAIPlugin } from '../ai/plugin-import.js';
|
|
10
9
|
/**
|
|
11
10
|
* Build the system/user prompt for an inline co-author action. Kept
|
|
12
11
|
* deterministic and small so the governed runtime can route it to any
|
|
@@ -280,6 +279,13 @@ export declare function requireAuth(request: Request): Promise<{
|
|
|
280
279
|
session?: never;
|
|
281
280
|
error: Response;
|
|
282
281
|
}>;
|
|
282
|
+
/**
|
|
283
|
+
* API-key collection-scope check as a plain denial reason (`null` = allowed).
|
|
284
|
+
* JWT sessions are never denied here — role checks are the route's job. Use
|
|
285
|
+
* this where the collection is only known deep inside a service (e.g. an SEO
|
|
286
|
+
* fix that writes a document) and a `Response` cannot be returned directly.
|
|
287
|
+
*/
|
|
288
|
+
export declare function apiKeyCollectionScopeDenial(session: AuthSession, collection: string, action: 'read' | 'create' | 'update' | 'delete'): string | null;
|
|
283
289
|
/**
|
|
284
290
|
* Check that the request's auth context permits `action` on `collection`.
|
|
285
291
|
* - Session-authenticated requests fall through to `requireRole` semantics:
|
|
@@ -360,18 +366,7 @@ export declare function enforceSessionLimitsForUser(d: any, userId: string): Pro
|
|
|
360
366
|
/** Revoke every live API key for a user. Called with session revocation. */
|
|
361
367
|
export declare function revokeUserApiKeys(d: any, userId: string): Promise<number>;
|
|
362
368
|
export declare function getAdminPath(): string;
|
|
363
|
-
|
|
364
|
-
* Resolve a collection definition from the runtime config, tolerating both
|
|
365
|
-
* the array and the record (keyed-by-slug) shapes consumers use.
|
|
366
|
-
*/
|
|
367
|
-
export declare function findCollectionDef(slug: string): CollectionDefinition | undefined;
|
|
368
|
-
/**
|
|
369
|
-
* True when `collection` declares a `sections` JSON field — the storage
|
|
370
|
-
* contract the flat Page Editor + section endpoints rely on. Guards against
|
|
371
|
-
* silently dropping section writes on a collection that never declared the
|
|
372
|
-
* field (the field-access layer strips undeclared keys).
|
|
373
|
-
*/
|
|
374
|
-
export declare function collectionSupportsSections(slug: string): boolean;
|
|
369
|
+
export { findCollectionDef, collectionSupportsSections } from '../config/collection-lookup.js';
|
|
375
370
|
/**
|
|
376
371
|
* Gate a per-document read for endpoints (e.g. SEO analysis) that fetch a
|
|
377
372
|
* document directly rather than through the collection CRUD routes. Enforces
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-helpers.d.ts","sourceRoot":"","sources":["../../src/api/route-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAKlD,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"route-helpers.d.ts","sourceRoot":"","sources":["../../src/api/route-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,10 +31,7 @@ export async function importBlobStorage() {
|
|
|
31
31
|
const mod = '@vercel/' + 'blob';
|
|
32
32
|
return import(/* webpackIgnore: true */ /* turbopackIgnore: true */ /* @vite-ignore */ mod);
|
|
33
33
|
}
|
|
34
|
-
export
|
|
35
|
-
const mod = '@prenta/' + 'plugin-ai';
|
|
36
|
-
return import(/* webpackIgnore: true */ /* turbopackIgnore: true */ /* @vite-ignore */ mod);
|
|
37
|
-
}
|
|
34
|
+
export { importAIPlugin } from '../ai/plugin-import.js';
|
|
38
35
|
/**
|
|
39
36
|
* Build the system/user prompt for an inline co-author action. Kept
|
|
40
37
|
* deterministic and small so the governed runtime can route it to any
|
|
@@ -1295,6 +1292,19 @@ export async function requireAuth(request) {
|
|
|
1295
1292
|
}
|
|
1296
1293
|
return { session };
|
|
1297
1294
|
}
|
|
1295
|
+
/**
|
|
1296
|
+
* API-key collection-scope check as a plain denial reason (`null` = allowed).
|
|
1297
|
+
* JWT sessions are never denied here — role checks are the route's job. Use
|
|
1298
|
+
* this where the collection is only known deep inside a service (e.g. an SEO
|
|
1299
|
+
* fix that writes a document) and a `Response` cannot be returned directly.
|
|
1300
|
+
*/
|
|
1301
|
+
export function apiKeyCollectionScopeDenial(session, collection, action) {
|
|
1302
|
+
if (!session.apiKey)
|
|
1303
|
+
return null;
|
|
1304
|
+
return validateApiKeyScope(session.apiKey.scopes, collection, action)
|
|
1305
|
+
? null
|
|
1306
|
+
: `API key does not have permission to ${action} on collection "${collection}"`;
|
|
1307
|
+
}
|
|
1298
1308
|
/**
|
|
1299
1309
|
* Check that the request's auth context permits `action` on `collection`.
|
|
1300
1310
|
* - Session-authenticated requests fall through to `requireRole` semantics:
|
|
@@ -1303,10 +1313,8 @@ export async function requireAuth(request) {
|
|
|
1303
1313
|
*/
|
|
1304
1314
|
export function requireCollectionScope(session, collection, action) {
|
|
1305
1315
|
if (session.apiKey) {
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
}
|
|
1309
|
-
return null;
|
|
1316
|
+
const denial = apiKeyCollectionScopeDenial(session, collection, action);
|
|
1317
|
+
return denial ? errorResponse(denial, 403) : null;
|
|
1310
1318
|
}
|
|
1311
1319
|
if (action === 'read')
|
|
1312
1320
|
return null;
|
|
@@ -1572,41 +1580,10 @@ export async function revokeUserApiKeys(d, userId) {
|
|
|
1572
1580
|
export function getAdminPath() {
|
|
1573
1581
|
return process.env.PRENTA_ADMIN_PATH ?? getPrentaConfig()?.admin?.path ?? '/admin';
|
|
1574
1582
|
}
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
export function findCollectionDef(slug) {
|
|
1580
|
-
const collections = getPrentaConfig()?.collections;
|
|
1581
|
-
if (Array.isArray(collections)) {
|
|
1582
|
-
return collections.find((c) => c?.slug === slug);
|
|
1583
|
-
}
|
|
1584
|
-
if (collections && typeof collections === 'object') {
|
|
1585
|
-
const rec = collections;
|
|
1586
|
-
return rec[slug] ?? Object.values(rec).find((c) => c?.slug === slug);
|
|
1587
|
-
}
|
|
1588
|
-
return undefined;
|
|
1589
|
-
}
|
|
1590
|
-
/**
|
|
1591
|
-
* True when `collection` declares a `sections` JSON field — the storage
|
|
1592
|
-
* contract the flat Page Editor + section endpoints rely on. Guards against
|
|
1593
|
-
* silently dropping section writes on a collection that never declared the
|
|
1594
|
-
* field (the field-access layer strips undeclared keys).
|
|
1595
|
-
*/
|
|
1596
|
-
export function collectionSupportsSections(slug) {
|
|
1597
|
-
const def = findCollectionDef(slug);
|
|
1598
|
-
if (!def)
|
|
1599
|
-
return false;
|
|
1600
|
-
const fields = def.fields;
|
|
1601
|
-
if (Array.isArray(fields)) {
|
|
1602
|
-
return fields.some((f) => f?.name === 'sections' && f?.type === 'json');
|
|
1603
|
-
}
|
|
1604
|
-
if (fields && typeof fields === 'object') {
|
|
1605
|
-
const f = fields.sections;
|
|
1606
|
-
return f?.type === 'json';
|
|
1607
|
-
}
|
|
1608
|
-
return false;
|
|
1609
|
-
}
|
|
1583
|
+
// Collection lookups live in the config layer so pure domain modules (SEO
|
|
1584
|
+
// scanner, section helpers) can use them without depending on `api/`.
|
|
1585
|
+
// Re-exported here for existing route callers.
|
|
1586
|
+
export { findCollectionDef, collectionSupportsSections } from '../config/collection-lookup.js';
|
|
1610
1587
|
/**
|
|
1611
1588
|
* Gate a per-document read for endpoints (e.g. SEO analysis) that fetch a
|
|
1612
1589
|
* document directly rather than through the collection CRUD routes. Enforces
|