@revealui/core 0.6.0 → 0.7.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/README.md +1 -1
- package/dist/api/rate-limit.d.ts.map +1 -1
- package/dist/api/rate-limit.js +8 -14
- package/dist/client/admin/utils/apiClient.d.ts.map +1 -1
- package/dist/client/admin/utils/apiClient.js +16 -1
- package/dist/client/richtext/index.d.ts.map +1 -1
- package/dist/client/richtext/index.js +0 -1
- package/dist/collections/operations/create.d.ts.map +1 -1
- package/dist/collections/operations/create.js +23 -5
- package/dist/database/universal-postgres.d.ts +14 -0
- package/dist/database/universal-postgres.d.ts.map +1 -1
- package/dist/database/universal-postgres.js +97 -0
- package/dist/fieldTraversal.d.ts +1 -1
- package/dist/fieldTraversal.d.ts.map +1 -1
- package/dist/instance/methods/create.d.ts.map +1 -1
- package/dist/instance/methods/create.js +3 -2
- package/dist/license.d.ts +40 -5
- package/dist/license.d.ts.map +1 -1
- package/dist/license.js +88 -22
- package/dist/observability/metrics.d.ts +25 -0
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/metrics.js +26 -0
- package/dist/revforge-license.d.ts +60 -0
- package/dist/revforge-license.d.ts.map +1 -0
- package/dist/revforge-license.js +74 -0
- package/dist/richtext/exports/server/rsc.js +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/{legacy.d.ts → internal.d.ts} +1 -1
- package/dist/types/internal.d.ts.map +1 -0
- package/dist/types/runtime.d.ts +12 -0
- package/dist/types/runtime.d.ts.map +1 -1
- package/dist/utils/api-wrapper.d.ts.map +1 -1
- package/dist/utils/api-wrapper.js +2 -1
- package/package.json +30 -22
- package/dist/types/legacy.d.ts.map +0 -1
- /package/dist/types/{legacy.js → internal.js} +0 -0
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Part of the [RevealUI monorepo](https://github.com/RevealUIStudio/revealui) -
|
|
|
17
17
|
- **GDPR Compliance** - Consent management, data export, deletion, anonymization, breach reporting
|
|
18
18
|
- **Observability** - Structured logging, process health monitoring, alert system, graceful shutdown
|
|
19
19
|
- **Plugins** - Extensible plugin system (form builder, nested docs, redirects)
|
|
20
|
-
- **Feature Gating** - Tier-based licensing (free, pro, max, enterprise
|
|
20
|
+
- **Feature Gating** - Tier-based licensing (free, pro, max, enterprise) with JWT license keys
|
|
21
21
|
- **Database** - PostgreSQL adapters (NeonDB + PGlite for testing), connection pooling, SSL/TLS
|
|
22
22
|
- **Storage** - Pluggable storage interface (Vercel Blob adapter included)
|
|
23
23
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/api/rate-limit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/api/rate-limit.ts"],"names":[],"mappings":"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"}
|
package/dist/api/rate-limit.js
CHANGED
|
@@ -3,28 +3,22 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Implements rate limiting to prevent API abuse
|
|
5
5
|
*/
|
|
6
|
+
import { getClientIp } from '@revealui/security';
|
|
6
7
|
import { logger } from '../observability/logger.js';
|
|
7
8
|
// WARNING: In-memory store - resets on every serverless cold start or process restart.
|
|
8
|
-
// This module is NOT used by any app in production (API uses apps/
|
|
9
|
+
// This module is NOT used by any app in production (API uses apps/server/src/middleware/rate-limit.ts,
|
|
9
10
|
// admin uses @revealui/auth/server which is DB-backed). Exported for framework consumers only.
|
|
10
11
|
// Replace with a database-backed store before using in production.
|
|
11
12
|
const rateLimitStore = new Map();
|
|
12
13
|
/**
|
|
13
|
-
* Default key generator (by IP address)
|
|
14
|
+
* Default key generator (by IP address).
|
|
15
|
+
*
|
|
16
|
+
* Delegates to `@revealui/security`'s trusted-proxy-aware
|
|
17
|
+
* `getClientIp` so the IP cannot be spoofed via X-Forwarded-For
|
|
18
|
+
* on deployments that configure their proxy trust correctly.
|
|
14
19
|
*/
|
|
15
20
|
function defaultKeyGenerator(request) {
|
|
16
|
-
|
|
17
|
-
const forwarded = request.headers.get('x-forwarded-for');
|
|
18
|
-
const realIp = request.headers.get('x-real-ip');
|
|
19
|
-
if (forwarded) {
|
|
20
|
-
const parts = forwarded.split(',');
|
|
21
|
-
return parts[0]?.trim() || 'unknown';
|
|
22
|
-
}
|
|
23
|
-
if (realIp) {
|
|
24
|
-
return realIp;
|
|
25
|
-
}
|
|
26
|
-
// Fallback to unknown (Request doesn't have ip property)
|
|
27
|
-
return 'unknown';
|
|
21
|
+
return getClientIp(request);
|
|
28
22
|
}
|
|
29
23
|
/**
|
|
30
24
|
* Check if rate limit exceeded
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClient.d.ts","sourceRoot":"","sources":["../../../../src/client/admin/utils/apiClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,cAAc;IAC7C,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACX,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,QAAQ,cAAc;IACtB,MAAM,WAAW;CAClB;AAED,qBAAa,QAAS,SAAQ,KAAK;IAExB,IAAI,EAAE,YAAY;IAElB,MAAM,CAAC,EAAE,MAAM;IACf,KAAK,CAAC,EAAE,MAAM;gBAHd,IAAI,EAAE,YAAY,EACzB,OAAO,EAAE,MAAM,EACR,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,KAAK,CAAC,EAAE,MAAM,YAAA;CAKxB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA+BD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,gBAAqB;IAW1C;;OAEG;YACW,OAAO;
|
|
1
|
+
{"version":3,"file":"apiClient.d.ts","sourceRoot":"","sources":["../../../../src/client/admin/utils/apiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,8 +63,23 @@ export class APIClient {
|
|
|
63
63
|
* Make an authenticated API request
|
|
64
64
|
*/
|
|
65
65
|
async request(endpoint, options = {}) {
|
|
66
|
+
const Unsafe = new Set(['POST', 'PUT', 'PATCH', 'DELETE']);
|
|
67
|
+
const method = (options.method ?? 'GET').toUpperCase();
|
|
68
|
+
let csrfToken;
|
|
69
|
+
if (Unsafe.has(method) && typeof document !== 'undefined') {
|
|
70
|
+
for (const part of document.cookie.split(';')) {
|
|
71
|
+
const eqIdx = part.indexOf('=');
|
|
72
|
+
if (eqIdx === -1)
|
|
73
|
+
continue;
|
|
74
|
+
if (part.slice(0, eqIdx).trim() === 'revealui-csrf') {
|
|
75
|
+
csrfToken = part.slice(eqIdx + 1).trim() || undefined;
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
66
80
|
const headers = {
|
|
67
81
|
'Content-Type': 'application/json',
|
|
82
|
+
...(csrfToken ? { 'X-CSRF-Token': csrfToken } : {}),
|
|
68
83
|
...options.headers,
|
|
69
84
|
};
|
|
70
85
|
const url = `${this.baseURL}${endpoint}`;
|
|
@@ -72,7 +87,7 @@ export class APIClient {
|
|
|
72
87
|
const response = await fetch(url, {
|
|
73
88
|
...options,
|
|
74
89
|
headers,
|
|
75
|
-
credentials: 'include',
|
|
90
|
+
credentials: 'include',
|
|
76
91
|
});
|
|
77
92
|
// Handle authentication errors
|
|
78
93
|
if (response.status === 401) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/richtext/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/richtext/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,6 @@ export { ImagePlugin } from './plugins/ImagePlugin.js';
|
|
|
34
34
|
export { PastePlugin } from './plugins/PastePlugin.js';
|
|
35
35
|
// Toolbar plugins
|
|
36
36
|
export { ToolbarPlugin } from './plugins/ToolbarPlugin.js';
|
|
37
|
-
// Main editor component - production ready
|
|
38
37
|
export { RichTextEditor, richTextEditorStyles } from './RichTextEditor.js';
|
|
39
38
|
// Feature client components (implementations coming in Phase 2)
|
|
40
39
|
// These now return a minimal React component for tree-shaking
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAwC9B,wBAAsB,MAAM,CAC1B,MAAM,EAAE,sBAAsB,EAC9B,EAAE,EAAE,wBAAwB,GAAG,IAAI,EACnC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EAGf,MAAM,sBAAsB,CAAC;AAwC9B,wBAAsB,MAAM,CAC1B,MAAM,EAAE,sBAAsB,EAC9B,EAAE,EAAE,wBAAwB,GAAG,IAAI,EACnC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,CA+IzB"}
|
|
@@ -111,12 +111,30 @@ export async function create(config, db, options) {
|
|
|
111
111
|
return serializeValueForDatabase(data[key]);
|
|
112
112
|
});
|
|
113
113
|
const query = insertDocumentQuery(tableName, columns);
|
|
114
|
+
// Wrap INSERT + read-back in a single transaction so both run on the same
|
|
115
|
+
// connection and snapshot. Without this, pooled pg adapters check out a
|
|
116
|
+
// fresh client per `db.query()` call, and the post-insert `findByID` can
|
|
117
|
+
// see a pre-INSERT snapshot — throwing "Document not found in database"
|
|
118
|
+
// even though the row is present (see revealui#383).
|
|
119
|
+
//
|
|
120
|
+
// Adapters without `transaction` (e.g. test mocks, in-memory stores with
|
|
121
|
+
// same-connection visibility like PGlite used directly without our wrapper)
|
|
122
|
+
// fall back to sequential queries.
|
|
123
|
+
if (db.transaction) {
|
|
124
|
+
return await db.transaction(async (tx) => {
|
|
125
|
+
await tx.query(query, [id, ...values]);
|
|
126
|
+
// The create operation has already passed access control above.
|
|
127
|
+
// The read-back must use overrideAccess to avoid a second access
|
|
128
|
+
// check that fails when there's no req context (e.g. bootstrap).
|
|
129
|
+
const createdDoc = await findByID(config, tx, { id, overrideAccess: true });
|
|
130
|
+
if (!createdDoc) {
|
|
131
|
+
throw new Error(`Failed to retrieve created document with id ${id}. Document not found in database.`);
|
|
132
|
+
}
|
|
133
|
+
return createdDoc;
|
|
134
|
+
});
|
|
135
|
+
}
|
|
114
136
|
await db.query(query, [id, ...values]);
|
|
115
|
-
|
|
116
|
-
// Return the created document by fetching it from the database
|
|
117
|
-
// This ensures we return what was actually stored (with proper JSON deserialization)
|
|
118
|
-
// ID is already a string, so use it directly
|
|
119
|
-
const createdDoc = await findByID(config, db, { id });
|
|
137
|
+
const createdDoc = await findByID(config, db, { id, overrideAccess: true });
|
|
120
138
|
if (!createdDoc) {
|
|
121
139
|
throw new Error(`Failed to retrieve created document with id ${id}. Document not found in database.`);
|
|
122
140
|
}
|
|
@@ -30,6 +30,20 @@ export interface UniversalPostgresAdapterConfig {
|
|
|
30
30
|
* Force a specific provider (optional, auto-detected if not provided)
|
|
31
31
|
*/
|
|
32
32
|
provider?: 'neon' | 'supabase' | 'electric';
|
|
33
|
+
/**
|
|
34
|
+
* Shared pg Pool instance. When provided, the adapter uses this pool
|
|
35
|
+
* instead of creating its own. This eliminates dual-pool issues where
|
|
36
|
+
* the CMS adapter and the Drizzle ORM client create separate connections
|
|
37
|
+
* to the same database. Pass the same pool to both systems.
|
|
38
|
+
*/
|
|
39
|
+
pool?: import('pg').Pool;
|
|
40
|
+
/**
|
|
41
|
+
* Async factory that returns a shared pg Pool. Called once during
|
|
42
|
+
* initializeConnection. Use this instead of `pool` when the pool
|
|
43
|
+
* source can't be imported at the top level (e.g., Turbopack async
|
|
44
|
+
* module init issues in Next.js).
|
|
45
|
+
*/
|
|
46
|
+
poolFactory?: () => Promise<import('pg').Pool | null>;
|
|
33
47
|
}
|
|
34
48
|
/**
|
|
35
49
|
* Creates a universal PostgreSQL adapter that works with Neon, Supabase, and Electric Postgres
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"universal-postgres.d.ts","sourceRoot":"","sources":["../../src/database/universal-postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"universal-postgres.d.ts","sourceRoot":"","sources":["../../src/database/universal-postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,eAAe,EAA4C,MAAM,mBAAmB,CAAC;AAInG,MAAM,WAAW,8BAA8B;IAC7C;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;IAC5C;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,IAAI,EAAE,IAAI,CAAC;IACzB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;CACvD;AAmGD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,GAAE,8BAAmC,GAC1C,eAAe,CAsjBjB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,UAAQ,GAAG,IAAI,CAa/D;AAGD,eAAe,wBAAwB,CAAC"}
|
|
@@ -97,8 +97,64 @@ function detectProvider(connectionString) {
|
|
|
97
97
|
*/
|
|
98
98
|
export function universalPostgresAdapter(config = {}) {
|
|
99
99
|
let queryFn;
|
|
100
|
+
let transactionFn;
|
|
100
101
|
let provider = 'generic';
|
|
102
|
+
const buildPgTransactionFn = (pool, providerLabel) => {
|
|
103
|
+
return async (fn) => {
|
|
104
|
+
const client = await pool.connect();
|
|
105
|
+
try {
|
|
106
|
+
await client.query('BEGIN');
|
|
107
|
+
const tx = {
|
|
108
|
+
query: async (queryString, values = []) => {
|
|
109
|
+
const result = await client.query(queryString, values);
|
|
110
|
+
return {
|
|
111
|
+
rows: safeParseRevealDocuments(result.rows),
|
|
112
|
+
rowCount: result.rowCount || 0,
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
const result = await fn(tx);
|
|
117
|
+
await client.query('COMMIT');
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
try {
|
|
122
|
+
await client.query('ROLLBACK');
|
|
123
|
+
}
|
|
124
|
+
catch (rollbackErr) {
|
|
125
|
+
defaultLogger.error(`${providerLabel} transaction rollback failed after error:`, rollbackErr);
|
|
126
|
+
}
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
client.release();
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
};
|
|
101
134
|
const initializeConnection = async () => {
|
|
135
|
+
// Fast path: shared pool provided — skip all pool creation and provider detection.
|
|
136
|
+
// The caller (typically revealui.config.ts) passes the same pg.Pool that the
|
|
137
|
+
// Drizzle ORM client uses, eliminating the dual-connection-pool architecture.
|
|
138
|
+
// Resolve shared pool from either direct `pool` or async `poolFactory`
|
|
139
|
+
const sharedPool = config.pool ?? (config.poolFactory ? await config.poolFactory() : null);
|
|
140
|
+
if (sharedPool) {
|
|
141
|
+
provider = 'generic';
|
|
142
|
+
queryFn = async (queryString, values = []) => {
|
|
143
|
+
const client = await sharedPool.connect();
|
|
144
|
+
try {
|
|
145
|
+
const result = await client.query(queryString, values);
|
|
146
|
+
return {
|
|
147
|
+
rows: safeParseRevealDocuments(result.rows),
|
|
148
|
+
rowCount: result.rowCount || 0,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
client.release();
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
transactionFn = buildPgTransactionFn(sharedPool, 'shared-pool');
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
102
158
|
// Allow explicit electric provider without a connection string (PGlite local)
|
|
103
159
|
let connectionString;
|
|
104
160
|
if (config.provider === 'electric') {
|
|
@@ -151,6 +207,7 @@ export function universalPostgresAdapter(config = {}) {
|
|
|
151
207
|
throw error;
|
|
152
208
|
}
|
|
153
209
|
};
|
|
210
|
+
transactionFn = buildPgTransactionFn(neonPool, 'Neon');
|
|
154
211
|
break;
|
|
155
212
|
}
|
|
156
213
|
case 'supabase': {
|
|
@@ -181,6 +238,7 @@ export function universalPostgresAdapter(config = {}) {
|
|
|
181
238
|
client.release();
|
|
182
239
|
}
|
|
183
240
|
};
|
|
241
|
+
transactionFn = buildPgTransactionFn(pool, 'Supabase (txn-pool)');
|
|
184
242
|
}
|
|
185
243
|
else {
|
|
186
244
|
// Use pg library for session pooling or direct connections (port 5432)
|
|
@@ -208,6 +266,7 @@ export function universalPostgresAdapter(config = {}) {
|
|
|
208
266
|
throw error;
|
|
209
267
|
}
|
|
210
268
|
};
|
|
269
|
+
transactionFn = buildPgTransactionFn(pool, 'Supabase');
|
|
211
270
|
}
|
|
212
271
|
break;
|
|
213
272
|
}
|
|
@@ -227,6 +286,23 @@ export function universalPostgresAdapter(config = {}) {
|
|
|
227
286
|
rowCount: result.rowCount || 0,
|
|
228
287
|
};
|
|
229
288
|
};
|
|
289
|
+
// PGlite ships a native transaction(fn) with its own tx.query — wrap it
|
|
290
|
+
// so the callback sees a QueryableDatabaseAdapter.
|
|
291
|
+
transactionFn = async (fn) => {
|
|
292
|
+
// biome-ignore lint/style/noNonNullAssertion: db is set above in the electric branch
|
|
293
|
+
return await db.transaction(async (pgliteTx) => {
|
|
294
|
+
const tx = {
|
|
295
|
+
query: async (queryString, values = []) => {
|
|
296
|
+
const result = await pgliteTx.query(queryString, values);
|
|
297
|
+
return {
|
|
298
|
+
rows: safeParseRevealDocuments(result.rows),
|
|
299
|
+
rowCount: result.rowCount || 0,
|
|
300
|
+
};
|
|
301
|
+
},
|
|
302
|
+
};
|
|
303
|
+
return await fn(tx);
|
|
304
|
+
});
|
|
305
|
+
};
|
|
230
306
|
break;
|
|
231
307
|
}
|
|
232
308
|
default: {
|
|
@@ -257,6 +333,7 @@ export function universalPostgresAdapter(config = {}) {
|
|
|
257
333
|
throw error;
|
|
258
334
|
}
|
|
259
335
|
};
|
|
336
|
+
transactionFn = buildPgTransactionFn(pool, 'PostgreSQL');
|
|
260
337
|
break;
|
|
261
338
|
}
|
|
262
339
|
}
|
|
@@ -333,6 +410,26 @@ export function universalPostgresAdapter(config = {}) {
|
|
|
333
410
|
}
|
|
334
411
|
return queryFn(queryString, values);
|
|
335
412
|
},
|
|
413
|
+
async transaction(fn) {
|
|
414
|
+
if (!initialized) {
|
|
415
|
+
await initializeConnection();
|
|
416
|
+
initialized = true;
|
|
417
|
+
}
|
|
418
|
+
// Flush pending table creations before opening a transaction so the
|
|
419
|
+
// schema is in place on the same connection we're about to hold.
|
|
420
|
+
const pendingCreations = getWorkerPendingTableCreations();
|
|
421
|
+
if (pendingCreations.length > 0) {
|
|
422
|
+
try {
|
|
423
|
+
await Promise.all(pendingCreations);
|
|
424
|
+
pendingCreations.length = 0;
|
|
425
|
+
}
|
|
426
|
+
catch (error) {
|
|
427
|
+
defaultLogger.error('Failed to create tables before transaction:', error);
|
|
428
|
+
throw error;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
return transactionFn(fn);
|
|
432
|
+
},
|
|
336
433
|
// Create table schema for PGlite provider
|
|
337
434
|
// For other providers, tables should be created via migrations
|
|
338
435
|
createTable: config.provider === 'electric' ||
|
package/dist/fieldTraversal.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module @revealui/core/fieldTraversal
|
|
8
8
|
*/
|
|
9
|
-
import type { RevealUITraverseFieldsArgs, RevealUITraverseFieldsResult } from './types/
|
|
9
|
+
import type { RevealUITraverseFieldsArgs, RevealUITraverseFieldsResult } from './types/internal.js';
|
|
10
10
|
/**
|
|
11
11
|
* Traversal mode determines how fields are processed
|
|
12
12
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldTraversal.d.ts","sourceRoot":"","sources":["../src/fieldTraversal.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"fieldTraversal.d.ts","sourceRoot":"","sources":["../src/fieldTraversal.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAEpG;;GAEG;AACH,KAAK,aAAa,GAAG,aAAa,GAAG,WAAW,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAErF;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,0BAA0B,EAChC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,4BAA4B,CAAC,CA4DvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGlG,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,gBAAgB,EAC1B,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACtC,OAAO,EAAE,mBAAmB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/instance/methods/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGlG,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,gBAAgB,EAC1B,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACtC,OAAO,EAAE,mBAAmB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,cAAc,CAAC,CA0CzB"}
|
|
@@ -11,8 +11,9 @@ export async function create(instance, ensureDbConnected, options) {
|
|
|
11
11
|
throw new Error(`Collection '${collection}' not found`);
|
|
12
12
|
}
|
|
13
13
|
const collectionConfig = instance.config.collections?.find((c) => c.slug === collection);
|
|
14
|
-
// Enforce collection-level access control
|
|
15
|
-
|
|
14
|
+
// Enforce collection-level access control (skip when overrideAccess is set,
|
|
15
|
+
// matching the low-level create() guard in collections/operations/create.ts)
|
|
16
|
+
if (collectionConfig?.access?.create && options.req && !options.overrideAccess) {
|
|
16
17
|
const canCreate = await collectionConfig.access.create({
|
|
17
18
|
req: options.req,
|
|
18
19
|
data: options.data,
|
package/dist/license.d.ts
CHANGED
|
@@ -55,11 +55,12 @@ export declare function configureGracePeriods(overrides: Partial<GracePeriodConf
|
|
|
55
55
|
/** Decoded license payload schema */
|
|
56
56
|
declare const licensePayloadSchema: z.ZodObject<{
|
|
57
57
|
tier: z.ZodEnum<{
|
|
58
|
-
pro: "pro";
|
|
59
58
|
max: "max";
|
|
59
|
+
pro: "pro";
|
|
60
60
|
enterprise: "enterprise";
|
|
61
61
|
}>;
|
|
62
62
|
customerId: z.ZodString;
|
|
63
|
+
jti: z.ZodString;
|
|
63
64
|
domains: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
64
65
|
maxSites: z.ZodOptional<z.ZodNumber>;
|
|
65
66
|
maxUsers: z.ZodOptional<z.ZodNumber>;
|
|
@@ -73,6 +74,27 @@ export interface LicenseCacheConfig {
|
|
|
73
74
|
/** Cache TTL in milliseconds (default: 15 seconds) */
|
|
74
75
|
ttlMs: number;
|
|
75
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Hard cap on cache TTL. Any env override exceeding this is clamped + warned.
|
|
79
|
+
* Revoked licenses must not stay cached longer than this, regardless of
|
|
80
|
+
* operator misconfiguration. 15 minutes balances revocation responsiveness
|
|
81
|
+
* against DB load for high-traffic deployments.
|
|
82
|
+
*
|
|
83
|
+
* Tracked by MASTER_PLAN §CR-8 CR8-P1-05.
|
|
84
|
+
*/
|
|
85
|
+
export declare const MAX_LICENSE_CACHE_TTL_MS: number;
|
|
86
|
+
/**
|
|
87
|
+
* Parse and validate the `LICENSE_CACHE_TTL_MS` env value.
|
|
88
|
+
*
|
|
89
|
+
* Rules:
|
|
90
|
+
* - Unset / non-numeric / non-positive → `DEFAULT_TTL_MS` (15s)
|
|
91
|
+
* - Above `MAX_LICENSE_CACHE_TTL_MS` → clamped to cap, warning emitted
|
|
92
|
+
* - Otherwise → parsed value
|
|
93
|
+
*
|
|
94
|
+
* Exported for unit testing. Production code uses the module-load-time
|
|
95
|
+
* evaluation in `DEFAULT_CACHE_CONFIG` below.
|
|
96
|
+
*/
|
|
97
|
+
export declare function parseLicenseCacheTtlEnv(envValue: string | undefined): number;
|
|
76
98
|
/**
|
|
77
99
|
* Configure the license cache TTL.
|
|
78
100
|
* Useful for tests (short TTL) or deployments needing faster revocation detection.
|
|
@@ -88,8 +110,19 @@ export declare function computeKeyId(publicKeyPem: string): Promise<string>;
|
|
|
88
110
|
/**
|
|
89
111
|
* Validates a license key JWT and returns the decoded payload.
|
|
90
112
|
* Returns null if the key is invalid, expired, or missing.
|
|
113
|
+
*
|
|
114
|
+
* Phase 1 audit B-2: when `expectedCustomerId` is supplied, the JWT's
|
|
115
|
+
* `customerId` claim must match exactly — otherwise the token is rejected
|
|
116
|
+
* even when the signature + iss + aud + exp are all valid. This binds a
|
|
117
|
+
* license to its purchaser. Forge mode uses this against the env-configured
|
|
118
|
+
* `REVEALUI_LICENSED_CUSTOMER_ID`. Hosted mode (where the deployment IS the
|
|
119
|
+
* customer) leaves it undefined.
|
|
120
|
+
*
|
|
121
|
+
* Note: `nbf` and `exp` are enforced automatically by jose.jwtVerify against
|
|
122
|
+
* `currentDate` (defaults to now). `iss` and `aud` are enforced via the
|
|
123
|
+
* options below. Signature is enforced via the public key.
|
|
91
124
|
*/
|
|
92
|
-
export declare function validateLicenseKey(licenseKey: string, publicKey: string): Promise<LicensePayload | null>;
|
|
125
|
+
export declare function validateLicenseKey(licenseKey: string, publicKey: string, expectedCustomerId?: string): Promise<LicensePayload | null>;
|
|
93
126
|
/**
|
|
94
127
|
* Initialize the license system. Call once at application startup.
|
|
95
128
|
* Reads REVEALUI_LICENSE_KEY and REVEALUI_LICENSE_PUBLIC_KEY from environment.
|
|
@@ -146,14 +179,16 @@ export declare function getMaxAgentTasks(): number;
|
|
|
146
179
|
* `jose.importPKCS8` and `SignJWT` both run on Web Crypto.
|
|
147
180
|
*
|
|
148
181
|
* @param payload - License payload (tier, customerId, limits, perpetual flag)
|
|
149
|
-
* @param privateKey -
|
|
182
|
+
* @param privateKey - Ed25519 private key (PEM format)
|
|
150
183
|
* @param expiresInSeconds - JWT expiration in seconds. Pass null for perpetual
|
|
151
184
|
* licenses (no exp claim). Defaults to 1 year for subscription licenses.
|
|
152
|
-
* @param publicKey -
|
|
185
|
+
* @param publicKey - Ed25519 public key (PEM format). When provided, a `kid`
|
|
153
186
|
* claim is added to the JWT header for forward-compatible key rotation.
|
|
154
187
|
* @returns Signed JWT string
|
|
155
188
|
*/
|
|
156
|
-
export declare function generateLicenseKey(payload: Omit<LicensePayload, 'iat' | 'exp'
|
|
189
|
+
export declare function generateLicenseKey(payload: Omit<LicensePayload, 'iat' | 'exp' | 'jti'> & {
|
|
190
|
+
jti?: string;
|
|
191
|
+
}, privateKey: string, expiresInSeconds?: number | null, publicKey?: string): Promise<string>;
|
|
157
192
|
/**
|
|
158
193
|
* Reset license state. Primarily for testing.
|
|
159
194
|
*/
|
package/dist/license.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"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"}
|
package/dist/license.js
CHANGED
|
@@ -9,10 +9,16 @@
|
|
|
9
9
|
* - jose - JWT signing/verification (Web Crypto API)
|
|
10
10
|
* - zod - Schema validation for license payloads
|
|
11
11
|
*/
|
|
12
|
-
|
|
12
|
+
// jose is imported lazily inside async functions to avoid Turbopack's
|
|
13
|
+
// async module initialization ordering issue (see #399). Top-level
|
|
14
|
+
// import of jose triggers an asyncModule wrapper that can race with
|
|
15
|
+
// other modules in the auth route bundle during page data collection.
|
|
13
16
|
import { z } from 'zod';
|
|
14
17
|
import { decryptLicenseKey } from './license-encryption.js';
|
|
15
18
|
import { logger } from './utils/logger.js';
|
|
19
|
+
async function getJose() {
|
|
20
|
+
return await import('jose');
|
|
21
|
+
}
|
|
16
22
|
/** JWT issuer and audience for license tokens — prevents cross-environment replay */
|
|
17
23
|
const LICENSE_ISSUER = process.env.REVEALUI_LICENSE_ISSUER ?? 'https://revealui.com';
|
|
18
24
|
const LICENSE_AUDIENCE = process.env.REVEALUI_LICENSE_AUDIENCE ?? 'revealui-license';
|
|
@@ -41,8 +47,10 @@ export function configureGracePeriods(overrides) {
|
|
|
41
47
|
const licensePayloadSchema = z.object({
|
|
42
48
|
/** License tier */
|
|
43
49
|
tier: z.enum(['pro', 'max', 'enterprise']),
|
|
44
|
-
/** Organization or customer ID */
|
|
45
|
-
customerId: z.string(),
|
|
50
|
+
/** Organization or customer ID — must be non-empty; used to bind the token to a specific customer */
|
|
51
|
+
customerId: z.string().min(1),
|
|
52
|
+
/** JWT ID — used for per-token revocation; every issued token must carry one */
|
|
53
|
+
jti: z.string().min(1),
|
|
46
54
|
/** Licensed domain(s) */
|
|
47
55
|
domains: z.array(z.string()).optional(),
|
|
48
56
|
/** Maximum number of sites allowed */
|
|
@@ -61,16 +69,40 @@ const licensePayloadSchema = z.object({
|
|
|
61
69
|
exp: z.number().optional(),
|
|
62
70
|
});
|
|
63
71
|
const DEFAULT_TTL_MS = 15_000; // 15 seconds - revoked licenses lose access quickly
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
+
/**
|
|
73
|
+
* Hard cap on cache TTL. Any env override exceeding this is clamped + warned.
|
|
74
|
+
* Revoked licenses must not stay cached longer than this, regardless of
|
|
75
|
+
* operator misconfiguration. 15 minutes balances revocation responsiveness
|
|
76
|
+
* against DB load for high-traffic deployments.
|
|
77
|
+
*
|
|
78
|
+
* Tracked by MASTER_PLAN §CR-8 CR8-P1-05.
|
|
79
|
+
*/
|
|
80
|
+
export const MAX_LICENSE_CACHE_TTL_MS = 15 * 60 * 1000;
|
|
81
|
+
/**
|
|
82
|
+
* Parse and validate the `LICENSE_CACHE_TTL_MS` env value.
|
|
83
|
+
*
|
|
84
|
+
* Rules:
|
|
85
|
+
* - Unset / non-numeric / non-positive → `DEFAULT_TTL_MS` (15s)
|
|
86
|
+
* - Above `MAX_LICENSE_CACHE_TTL_MS` → clamped to cap, warning emitted
|
|
87
|
+
* - Otherwise → parsed value
|
|
88
|
+
*
|
|
89
|
+
* Exported for unit testing. Production code uses the module-load-time
|
|
90
|
+
* evaluation in `DEFAULT_CACHE_CONFIG` below.
|
|
91
|
+
*/
|
|
92
|
+
export function parseLicenseCacheTtlEnv(envValue) {
|
|
93
|
+
if (!envValue)
|
|
94
|
+
return DEFAULT_TTL_MS;
|
|
95
|
+
const parsed = Number.parseInt(envValue, 10);
|
|
96
|
+
if (!Number.isFinite(parsed) || parsed <= 0)
|
|
72
97
|
return DEFAULT_TTL_MS;
|
|
73
|
-
|
|
98
|
+
if (parsed > MAX_LICENSE_CACHE_TTL_MS) {
|
|
99
|
+
logger.warn(`LICENSE_CACHE_TTL_MS=${parsed} exceeds the ${MAX_LICENSE_CACHE_TTL_MS}ms (15-minute) cap; using ${MAX_LICENSE_CACHE_TTL_MS}. Longer TTLs extend the window where revoked licenses retain access and are not permitted.`);
|
|
100
|
+
return MAX_LICENSE_CACHE_TTL_MS;
|
|
101
|
+
}
|
|
102
|
+
return parsed;
|
|
103
|
+
}
|
|
104
|
+
const DEFAULT_CACHE_CONFIG = {
|
|
105
|
+
ttlMs: parseLicenseCacheTtlEnv(process.env.LICENSE_CACHE_TTL_MS),
|
|
74
106
|
};
|
|
75
107
|
let cacheConfig = { ...DEFAULT_CACHE_CONFIG };
|
|
76
108
|
let cachedAt = 0;
|
|
@@ -126,21 +158,33 @@ export async function computeKeyId(publicKeyPem) {
|
|
|
126
158
|
/**
|
|
127
159
|
* Validates a license key JWT and returns the decoded payload.
|
|
128
160
|
* Returns null if the key is invalid, expired, or missing.
|
|
161
|
+
*
|
|
162
|
+
* Phase 1 audit B-2: when `expectedCustomerId` is supplied, the JWT's
|
|
163
|
+
* `customerId` claim must match exactly — otherwise the token is rejected
|
|
164
|
+
* even when the signature + iss + aud + exp are all valid. This binds a
|
|
165
|
+
* license to its purchaser. Forge mode uses this against the env-configured
|
|
166
|
+
* `REVEALUI_LICENSED_CUSTOMER_ID`. Hosted mode (where the deployment IS the
|
|
167
|
+
* customer) leaves it undefined.
|
|
168
|
+
*
|
|
169
|
+
* Note: `nbf` and `exp` are enforced automatically by jose.jwtVerify against
|
|
170
|
+
* `currentDate` (defaults to now). `iss` and `aud` are enforced via the
|
|
171
|
+
* options below. Signature is enforced via the public key.
|
|
129
172
|
*/
|
|
130
|
-
export async function validateLicenseKey(licenseKey, publicKey) {
|
|
173
|
+
export async function validateLicenseKey(licenseKey, publicKey, expectedCustomerId) {
|
|
131
174
|
try {
|
|
175
|
+
const jose = await getJose();
|
|
132
176
|
// Extract kid from JWT header for forward-compatible key rotation
|
|
133
|
-
const header = decodeProtectedHeader(licenseKey);
|
|
177
|
+
const header = jose.decodeProtectedHeader(licenseKey);
|
|
134
178
|
const expectedKid = await computeKeyId(publicKey);
|
|
135
179
|
if (header.kid && header.kid !== expectedKid) {
|
|
136
180
|
logger.warn(`JWT kid mismatch: token has "${header.kid}", current key is "${expectedKid}". ` +
|
|
137
181
|
'Token may have been signed with a rotated key.');
|
|
138
182
|
}
|
|
139
|
-
const key = await importSPKI(publicKey, '
|
|
183
|
+
const key = await jose.importSPKI(publicKey, 'EdDSA');
|
|
140
184
|
// Accept tokens expired within the subscription grace window so the
|
|
141
185
|
// payload is available for grace-period calculations in isLicensed().
|
|
142
|
-
const { payload } = await jwtVerify(licenseKey, key, {
|
|
143
|
-
algorithms: ['
|
|
186
|
+
const { payload } = await jose.jwtVerify(licenseKey, key, {
|
|
187
|
+
algorithms: ['EdDSA'],
|
|
144
188
|
clockTolerance: graceConfig.subscriptionDays * 86_400,
|
|
145
189
|
issuer: LICENSE_ISSUER,
|
|
146
190
|
audience: LICENSE_AUDIENCE,
|
|
@@ -149,6 +193,16 @@ export async function validateLicenseKey(licenseKey, publicKey) {
|
|
|
149
193
|
if (!result.success) {
|
|
150
194
|
return null;
|
|
151
195
|
}
|
|
196
|
+
// Phase 1 audit B-2: customerId binding. If the caller supplied an
|
|
197
|
+
// expectation, the JWT's customerId must match exactly. This prevents
|
|
198
|
+
// a leaked JWT from one customer being used to license another's
|
|
199
|
+
// deployment (Forge customer-binding) or a leaked stamping-time JWT
|
|
200
|
+
// being replayed against a deployment expecting a different customer.
|
|
201
|
+
if (expectedCustomerId !== undefined && result.data.customerId !== expectedCustomerId) {
|
|
202
|
+
logger.warn(`License customerId mismatch: token has "${result.data.customerId}", ` +
|
|
203
|
+
`deployment expects "${expectedCustomerId}". Token rejected.`);
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
152
206
|
return result.data;
|
|
153
207
|
}
|
|
154
208
|
catch {
|
|
@@ -380,23 +434,35 @@ export function getMaxAgentTasks() {
|
|
|
380
434
|
* `jose.importPKCS8` and `SignJWT` both run on Web Crypto.
|
|
381
435
|
*
|
|
382
436
|
* @param payload - License payload (tier, customerId, limits, perpetual flag)
|
|
383
|
-
* @param privateKey -
|
|
437
|
+
* @param privateKey - Ed25519 private key (PEM format)
|
|
384
438
|
* @param expiresInSeconds - JWT expiration in seconds. Pass null for perpetual
|
|
385
439
|
* licenses (no exp claim). Defaults to 1 year for subscription licenses.
|
|
386
|
-
* @param publicKey -
|
|
440
|
+
* @param publicKey - Ed25519 public key (PEM format). When provided, a `kid`
|
|
387
441
|
* claim is added to the JWT header for forward-compatible key rotation.
|
|
388
442
|
* @returns Signed JWT string
|
|
389
443
|
*/
|
|
390
444
|
export async function generateLicenseKey(payload, privateKey, expiresInSeconds = 365 * 24 * 60 * 60, publicKey) {
|
|
391
|
-
const
|
|
445
|
+
const jose = await getJose();
|
|
446
|
+
const key = await jose.importPKCS8(privateKey, 'EdDSA');
|
|
392
447
|
const kid = publicKey ? await computeKeyId(publicKey) : undefined;
|
|
393
|
-
const header = { alg: '
|
|
448
|
+
const header = { alg: 'EdDSA' };
|
|
394
449
|
if (kid) {
|
|
395
450
|
header.kid = kid;
|
|
396
451
|
}
|
|
397
|
-
|
|
452
|
+
// Phase 1 audit B-2: every issued token carries a `jti` so it can be
|
|
453
|
+
// individually revoked without rotating the vendor key. Auto-generate
|
|
454
|
+
// when caller doesn't supply one (the common case).
|
|
455
|
+
const jti = payload.jti ?? crypto.randomUUID();
|
|
456
|
+
// Strip the optional jti from the spread so jose.setJti() is the single
|
|
457
|
+
// source of the claim (avoids a duplicate field in the payload).
|
|
458
|
+
const { jti: _ignoredJti, ...rest } = payload;
|
|
459
|
+
const builder = new jose.SignJWT({ ...rest })
|
|
398
460
|
.setProtectedHeader(header)
|
|
399
461
|
.setIssuedAt()
|
|
462
|
+
// Phase 1 audit B-2: enforce nbf so tokens cannot be replayed pre-issue
|
|
463
|
+
// by a clock-skewed client.
|
|
464
|
+
.setNotBefore('0s')
|
|
465
|
+
.setJti(jti)
|
|
400
466
|
.setIssuer(LICENSE_ISSUER)
|
|
401
467
|
.setAudience(LICENSE_AUDIENCE);
|
|
402
468
|
if (expiresInSeconds !== null) {
|
|
@@ -162,6 +162,10 @@ export declare const appMetrics: {
|
|
|
162
162
|
memoryUsage: Gauge;
|
|
163
163
|
apiCallsTotal: Counter;
|
|
164
164
|
apiCallDuration: Histogram;
|
|
165
|
+
x402PaymentRequiredTotal: Counter;
|
|
166
|
+
x402PaymentVerifyTotal: Counter;
|
|
167
|
+
x402PaymentVerifyDuration: Histogram;
|
|
168
|
+
x402SafeguardRejectionTotal: Counter;
|
|
165
169
|
};
|
|
166
170
|
/**
|
|
167
171
|
* Track HTTP request
|
|
@@ -183,6 +187,27 @@ export declare function trackError(type: string, severity?: 'low' | 'medium' | '
|
|
|
183
187
|
* Update active connections
|
|
184
188
|
*/
|
|
185
189
|
export declare function updateActiveConnections(type: string, delta: number): void;
|
|
190
|
+
/**
|
|
191
|
+
* Track an x402 HTTP 402 emission at a route. Call when the route returns
|
|
192
|
+
* 402 with `X-PAYMENT-REQUIRED`. `currency` is `'usdc-rvui'` when both are
|
|
193
|
+
* advertised (RVUI_PAYMENTS_ENABLED + receiving wallet set) and `'usdc-only'`
|
|
194
|
+
* otherwise.
|
|
195
|
+
*/
|
|
196
|
+
export declare function trackX402PaymentRequired(route: string, currency: 'usdc-only' | 'usdc-rvui'): void;
|
|
197
|
+
/**
|
|
198
|
+
* Track an x402 payment verification. Increments the result counter and
|
|
199
|
+
* observes the duration histogram (latency includes Coinbase facilitator
|
|
200
|
+
* round-trip for USDC OR Solana RPC + safeguards pipeline for RVUI).
|
|
201
|
+
*/
|
|
202
|
+
export declare function trackX402PaymentVerify(route: string, scheme: 'exact' | 'solana-spl', result: 'valid' | 'invalid', durationMs: number): void;
|
|
203
|
+
/**
|
|
204
|
+
* Track an RVUI safeguards pipeline rejection. Called from
|
|
205
|
+
* `verifyRvuiPayment` when `validatePayment` returns disallowed. Reasons
|
|
206
|
+
* are mapped from the safeguard's free-text reason at the call site to
|
|
207
|
+
* keep wording coupling low.
|
|
208
|
+
*/
|
|
209
|
+
export type X402SafeguardRejectionReason = 'duplicate-tx' | 'circuit-breaker' | 'single-payment-cap' | 'wallet-rate-limit' | 'discount-cap' | 'unknown';
|
|
210
|
+
export declare function trackX402SafeguardRejection(reason: X402SafeguardRejectionReason): void;
|
|
186
211
|
/**
|
|
187
212
|
* Update memory usage
|
|
188
213
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/observability/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -355,6 +355,11 @@ export const appMetrics = {
|
|
|
355
355
|
'status',
|
|
356
356
|
]),
|
|
357
357
|
apiCallDuration: metrics.histogram('api_call_duration_seconds', 'External API call duration', [0.1, 0.5, 1, 2, 5, 10], ['service']),
|
|
358
|
+
// x402 micropayments (GAP-149 PR 5)
|
|
359
|
+
x402PaymentRequiredTotal: metrics.counter('x402_payment_required_total', 'HTTP 402 Payment Required responses emitted by route + currency advertised', ['route', 'currency']),
|
|
360
|
+
x402PaymentVerifyTotal: metrics.counter('x402_payment_verify_total', 'x402 payment verification attempts by route, scheme, and result', ['route', 'scheme', 'result']),
|
|
361
|
+
x402PaymentVerifyDuration: metrics.histogram('x402_payment_verify_duration_seconds', 'x402 payment verification latency (Coinbase facilitator round-trip for USDC; Solana RPC + safeguards for RVUI)', [0.05, 0.1, 0.5, 1, 5, 10, 30], ['scheme']),
|
|
362
|
+
x402SafeguardRejectionTotal: metrics.counter('x402_safeguard_rejection_total', 'RVUI safeguards pipeline rejections by reason (replay / cap / rate-limit / discount-cap / circuit-breaker)', ['reason']),
|
|
358
363
|
};
|
|
359
364
|
/**
|
|
360
365
|
* Track HTTP request
|
|
@@ -388,6 +393,27 @@ export function trackError(type, severity = 'medium') {
|
|
|
388
393
|
export function updateActiveConnections(type, delta) {
|
|
389
394
|
appMetrics.activeConnections.inc(delta, { type });
|
|
390
395
|
}
|
|
396
|
+
/**
|
|
397
|
+
* Track an x402 HTTP 402 emission at a route. Call when the route returns
|
|
398
|
+
* 402 with `X-PAYMENT-REQUIRED`. `currency` is `'usdc-rvui'` when both are
|
|
399
|
+
* advertised (RVUI_PAYMENTS_ENABLED + receiving wallet set) and `'usdc-only'`
|
|
400
|
+
* otherwise.
|
|
401
|
+
*/
|
|
402
|
+
export function trackX402PaymentRequired(route, currency) {
|
|
403
|
+
appMetrics.x402PaymentRequiredTotal.inc(1, { route, currency });
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Track an x402 payment verification. Increments the result counter and
|
|
407
|
+
* observes the duration histogram (latency includes Coinbase facilitator
|
|
408
|
+
* round-trip for USDC OR Solana RPC + safeguards pipeline for RVUI).
|
|
409
|
+
*/
|
|
410
|
+
export function trackX402PaymentVerify(route, scheme, result, durationMs) {
|
|
411
|
+
appMetrics.x402PaymentVerifyTotal.inc(1, { route, scheme, result });
|
|
412
|
+
appMetrics.x402PaymentVerifyDuration.observe(durationMs / 1000, { scheme });
|
|
413
|
+
}
|
|
414
|
+
export function trackX402SafeguardRejection(reason) {
|
|
415
|
+
appMetrics.x402SafeguardRejectionTotal.inc(1, { reason });
|
|
416
|
+
}
|
|
391
417
|
/**
|
|
392
418
|
* Update memory usage
|
|
393
419
|
*/
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RevForge per-customer license issuance.
|
|
3
|
+
*
|
|
4
|
+
* The Stripe webhook handler (apps/server/src/routes/webhooks.ts) issues licenses
|
|
5
|
+
* for SaaS subscribers. This module is the analogous issuer for self-hosted
|
|
6
|
+
* RevForge customers — paid direct (source-license / sales) and stamped via
|
|
7
|
+
* forge/stamp.sh.
|
|
8
|
+
*
|
|
9
|
+
* Pure function: takes options + Ed25519 keys, returns a signed JWT plus
|
|
10
|
+
* descriptive metadata. The CLI wrapper (scripts/setup/issue-revforge-license.ts)
|
|
11
|
+
* handles argv parsing and reading keys from the environment.
|
|
12
|
+
*/
|
|
13
|
+
import { type LicensePayload } from './license.js';
|
|
14
|
+
export declare const SLUG_PATTERN: RegExp;
|
|
15
|
+
export declare const VALID_REVFORGE_TIERS: readonly ["pro", "max", "enterprise"];
|
|
16
|
+
export type RevForgeTier = (typeof VALID_REVFORGE_TIERS)[number];
|
|
17
|
+
export interface IssueRevForgeLicenseOptions {
|
|
18
|
+
/** Customer slug; becomes the JWT customerId. Must match SLUG_PATTERN. */
|
|
19
|
+
slug: string;
|
|
20
|
+
/** Paid tier the license unlocks. */
|
|
21
|
+
tier: RevForgeTier;
|
|
22
|
+
/** JWT expiry in days. Omit for the 365-day default. Mutually exclusive with `perpetual`. */
|
|
23
|
+
expiresInDays?: number;
|
|
24
|
+
/** One-time purchase: omit `exp` claim entirely. Mutually exclusive with `expiresInDays`. */
|
|
25
|
+
perpetual?: boolean;
|
|
26
|
+
/** Override per-tier site cap. */
|
|
27
|
+
maxSites?: number;
|
|
28
|
+
/** Override per-tier user cap. */
|
|
29
|
+
maxUsers?: number;
|
|
30
|
+
/** Allowed deployment hostnames. */
|
|
31
|
+
domains?: string[];
|
|
32
|
+
}
|
|
33
|
+
export interface IssueRevForgeLicenseResult {
|
|
34
|
+
/** Signed EdDSA JWT — the license key the customer installs. */
|
|
35
|
+
licenseKey: string;
|
|
36
|
+
/** Customer identifier embedded in the JWT (the slug). */
|
|
37
|
+
customerId: string;
|
|
38
|
+
/** Tier embedded in the JWT. */
|
|
39
|
+
tier: RevForgeTier;
|
|
40
|
+
/** Whether this is a perpetual license (no exp claim). */
|
|
41
|
+
perpetual: boolean;
|
|
42
|
+
/** ISO-8601 timestamp of issuance. */
|
|
43
|
+
issuedAt: string;
|
|
44
|
+
/** ISO-8601 expiry, or null for perpetual licenses. */
|
|
45
|
+
expiresAt: string | null;
|
|
46
|
+
/** The payload that was signed (without iat/exp/jti; those live inside the JWT). */
|
|
47
|
+
payload: Omit<LicensePayload, 'iat' | 'exp' | 'jti'>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Issue a signed RevForge license JWT for a paying customer.
|
|
51
|
+
*
|
|
52
|
+
* @throws Error on invalid slug, invalid tier, mutually-exclusive flag combos,
|
|
53
|
+
* or non-positive numeric overrides. The error message names the offending
|
|
54
|
+
* field so callers can surface it directly to the operator.
|
|
55
|
+
*/
|
|
56
|
+
export declare function issueRevForgeLicense(opts: IssueRevForgeLicenseOptions, keys: {
|
|
57
|
+
privateKey: string;
|
|
58
|
+
publicKey: string;
|
|
59
|
+
}): Promise<IssueRevForgeLicenseResult>;
|
|
60
|
+
//# sourceMappingURL=revforge-license.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revforge-license.d.ts","sourceRoot":"","sources":["../src/revforge-license.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAEvE,eAAO,MAAM,YAAY,QAAyB,CAAC;AAEnD,eAAO,MAAM,oBAAoB,uCAAwC,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,MAAM,WAAW,2BAA2B;IAC1C,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,EAAE,YAAY,CAAC;IACnB,6FAA6F;IAC7F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,IAAI,EAAE,YAAY,CAAC;IACnB,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,oFAAoF;IACpF,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;CACtD;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,2BAA2B,EACjC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,0BAA0B,CAAC,CAoErC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RevForge per-customer license issuance.
|
|
3
|
+
*
|
|
4
|
+
* The Stripe webhook handler (apps/server/src/routes/webhooks.ts) issues licenses
|
|
5
|
+
* for SaaS subscribers. This module is the analogous issuer for self-hosted
|
|
6
|
+
* RevForge customers — paid direct (source-license / sales) and stamped via
|
|
7
|
+
* forge/stamp.sh.
|
|
8
|
+
*
|
|
9
|
+
* Pure function: takes options + Ed25519 keys, returns a signed JWT plus
|
|
10
|
+
* descriptive metadata. The CLI wrapper (scripts/setup/issue-revforge-license.ts)
|
|
11
|
+
* handles argv parsing and reading keys from the environment.
|
|
12
|
+
*/
|
|
13
|
+
import { generateLicenseKey } from './license.js';
|
|
14
|
+
export const SLUG_PATTERN = /^[a-z0-9][a-z0-9-]*$/;
|
|
15
|
+
export const VALID_REVFORGE_TIERS = ['pro', 'max', 'enterprise'];
|
|
16
|
+
/**
|
|
17
|
+
* Issue a signed RevForge license JWT for a paying customer.
|
|
18
|
+
*
|
|
19
|
+
* @throws Error on invalid slug, invalid tier, mutually-exclusive flag combos,
|
|
20
|
+
* or non-positive numeric overrides. The error message names the offending
|
|
21
|
+
* field so callers can surface it directly to the operator.
|
|
22
|
+
*/
|
|
23
|
+
export async function issueRevForgeLicense(opts, keys) {
|
|
24
|
+
if (!SLUG_PATTERN.test(opts.slug)) {
|
|
25
|
+
throw new Error(`Invalid --slug "${opts.slug}": must match ^[a-z0-9][a-z0-9-]*$ (kebab-case, start with letter or digit).`);
|
|
26
|
+
}
|
|
27
|
+
if (!VALID_REVFORGE_TIERS.includes(opts.tier)) {
|
|
28
|
+
throw new Error(`Invalid --tier "${opts.tier}": must be one of ${VALID_REVFORGE_TIERS.join(', ')}.`);
|
|
29
|
+
}
|
|
30
|
+
if (opts.perpetual && opts.expiresInDays !== undefined) {
|
|
31
|
+
throw new Error('--perpetual and --expires-in-days are mutually exclusive.');
|
|
32
|
+
}
|
|
33
|
+
if (opts.expiresInDays !== undefined) {
|
|
34
|
+
if (!Number.isInteger(opts.expiresInDays) || opts.expiresInDays <= 0) {
|
|
35
|
+
throw new Error(`Invalid --expires-in-days "${opts.expiresInDays}": must be a positive integer.`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (opts.maxSites !== undefined && (!Number.isInteger(opts.maxSites) || opts.maxSites <= 0)) {
|
|
39
|
+
throw new Error(`Invalid --max-sites "${opts.maxSites}": must be a positive integer.`);
|
|
40
|
+
}
|
|
41
|
+
if (opts.maxUsers !== undefined && (!Number.isInteger(opts.maxUsers) || opts.maxUsers <= 0)) {
|
|
42
|
+
throw new Error(`Invalid --max-users "${opts.maxUsers}": must be a positive integer.`);
|
|
43
|
+
}
|
|
44
|
+
// jti is auto-generated inside generateLicenseKey when not supplied (per
|
|
45
|
+
// Phase 1 audit B-2 — every issued token carries a unique JWT ID for
|
|
46
|
+
// forward-compatible per-token revocation).
|
|
47
|
+
const payload = {
|
|
48
|
+
tier: opts.tier,
|
|
49
|
+
customerId: opts.slug,
|
|
50
|
+
...(opts.perpetual ? { perpetual: true } : {}),
|
|
51
|
+
...(opts.maxSites !== undefined ? { maxSites: opts.maxSites } : {}),
|
|
52
|
+
...(opts.maxUsers !== undefined ? { maxUsers: opts.maxUsers } : {}),
|
|
53
|
+
...(opts.domains && opts.domains.length > 0 ? { domains: opts.domains } : {}),
|
|
54
|
+
};
|
|
55
|
+
// Perpetual: pass null to omit exp claim. Otherwise translate days → seconds.
|
|
56
|
+
// Default (neither flag): 365-day subscription, matching generateLicenseKey's default.
|
|
57
|
+
const expiresInSeconds = opts.perpetual
|
|
58
|
+
? null
|
|
59
|
+
: opts.expiresInDays !== undefined
|
|
60
|
+
? opts.expiresInDays * 24 * 60 * 60
|
|
61
|
+
: 365 * 24 * 60 * 60;
|
|
62
|
+
const issuedAtMs = Date.now();
|
|
63
|
+
const licenseKey = await generateLicenseKey(payload, keys.privateKey, expiresInSeconds, keys.publicKey);
|
|
64
|
+
const expiresAt = expiresInSeconds === null ? null : new Date(issuedAtMs + expiresInSeconds * 1000).toISOString();
|
|
65
|
+
return {
|
|
66
|
+
licenseKey,
|
|
67
|
+
customerId: opts.slug,
|
|
68
|
+
tier: opts.tier,
|
|
69
|
+
perpetual: opts.perpetual === true,
|
|
70
|
+
issuedAt: new Date(issuedAtMs).toISOString(),
|
|
71
|
+
expiresAt,
|
|
72
|
+
payload,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
@@ -8,7 +8,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
8
8
|
import { isSafeUrl, sanitizeUrl } from '@revealui/security';
|
|
9
9
|
import { Fragment } from 'react';
|
|
10
10
|
// URL sanitization is owned by @revealui/security (single source of truth
|
|
11
|
-
// for every untrusted-string sink across
|
|
11
|
+
// for every untrusted-string sink across RevFleet). Re-exported here so
|
|
12
12
|
// existing consumers keep working.
|
|
13
13
|
export { isSafeUrl, sanitizeUrl };
|
|
14
14
|
// ============================================
|
package/dist/types/index.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export type { APIResponse, EndpointHandler, EndpointHandlerArgs, REST_DELETE, RE
|
|
|
32
32
|
export type { RichTextEditor, RichTextFeature, } from './richtext.js';
|
|
33
33
|
export type { Plugin, PluginOptions, } from './plugins.js';
|
|
34
34
|
export type { CustomComponent, RevealUICollectionConfig, RevealUIComponent, RevealUIContext, RevealUIEnhancedField, RevealUIField, RevealUIFieldType, RevealUIFrameworkContext, } from './extensions.js';
|
|
35
|
-
export type { Block, BlocksField, CheckboxField, ClientCollectionConfig, ClientConfig, RevealUIBlock, RevealUIDependencyCheckArgs, RevealUIRichTextAdapter, RevealUISchemaArgs, RevealUITraverseFieldsArgs, RevealUITraverseFieldsResult, } from './
|
|
35
|
+
export type { Block, BlocksField, CheckboxField, ClientCollectionConfig, ClientConfig, RevealUIBlock, RevealUIDependencyCheckArgs, RevealUIRichTextAdapter, RevealUISchemaArgs, RevealUITraverseFieldsArgs, RevealUITraverseFieldsResult, } from './internal.js';
|
|
36
36
|
export type { JobsConfig, JobTask, JobTaskPriority, JobTaskStatus, JobWorkflow, WorkflowStep, } from './jobs.js';
|
|
37
37
|
export interface VectorDocument {
|
|
38
38
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAOH,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,gBAAgB,EAChB,KAAK,UAAU,EACf,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,KAAK,oBAAoB,EAEzB,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAE7B,KAAK,4BAA4B,EACjC,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,KAAK,mBAAmB,EACxB,yBAAyB,EACzB,KAAK,MAAM,EAKX,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,0BAA0B,EAE1B,sBAAsB,EAEtB,kBAAkB,EAClB,4BAA4B,EAE5B,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,uBAAuB,EAEvB,oBAAoB,EACpB,KAAK,KAAK,EACV,KAAK,WAAW,IAAI,iBAAiB,EACrC,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,KAAK,WAAW,EAChB,iBAAiB,EACjB,WAAW,EACX,KAAK,cAAc,EAEnB,oBAAoB,EAEpB,KAAK,SAAS,EACd,eAAe,EACf,KAAK,iBAAiB,EAGtB,yBAAyB,EACzB,qBAAqB,EAErB,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,KAAK,YAAY,EACjB,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,KAAK,YAAY,EACjB,kBAAkB,EAClB,KAAK,eAAe,EACpB,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,0BAA0B,EAC1B,KAAK,UAAU,EACf,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EAEf,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,mBAAmB,EAEnB,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,WAAW,EACX,KAAK,WAAW,EAChB,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,KAAK,wBAAwB,IAAI,8BAA8B,EAC/D,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,IAAI,0BAA0B,EACvD,KAAK,QAAQ,EACb,cAAc,EAEd,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,yBAAyB,EAC9B,+BAA+B,EAC/B,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,KAAK,WAAW,EAChB,iBAAiB,EACjB,YAAY,EACZ,KAAK,aAAa,EAClB,mBAAmB,EACnB,KAAK,SAAS,EACd,eAAe,EACf,KAAK,SAAS,EACd,eAAe,EAEf,uBAAuB,EACvB,mBAAmB,EACnB,MAAM,EACN,KAAK,YAAY,EACjB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,KAAK,GACX,MAAM,2BAA2B,CAAC;AAMnC,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,UAAU,EAEf,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC;AAMpB,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,IAAI,GACL,MAAM,WAAW,CAAC;AAMnB,YAAY,EACV,cAAc,EACd,aAAa,GACd,MAAM,cAAc,CAAC;AAMtB,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,wBAAwB,EACxB,2BAA2B,EAC3B,eAAe,EACf,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,EACrB,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AAMtB,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAMrB,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAQpB,YAAY,EACV,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAMrB,YAAY,EACV,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,EAEX,aAAa,GACd,MAAM,UAAU,CAAC;AAMlB,YAAY,EACV,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AAMvB,YAAY,EACV,MAAM,EACN,aAAa,GACd,MAAM,cAAc,CAAC;AAMtB,YAAY,EAEV,eAAe,EACf,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAMzB,YAAY,EACV,KAAK,EACL,WAAW,EACX,aAAa,EACb,sBAAsB,EAEtB,YAAY,EAEZ,aAAa,EACb,2BAA2B,EAC3B,uBAAuB,EACvB,kBAAkB,EAClB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/types/internal.ts"],"names":[],"mappings":"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"}
|
package/dist/types/runtime.d.ts
CHANGED
|
@@ -233,10 +233,22 @@ export interface CollectionStorageAdapter {
|
|
|
233
233
|
}
|
|
234
234
|
export interface QueryableDatabaseAdapter {
|
|
235
235
|
query: (query: string, values?: unknown[]) => Promise<DatabaseResult>;
|
|
236
|
+
/**
|
|
237
|
+
* Execute a callback inside a database transaction with a single connection
|
|
238
|
+
* held across all queries. The callback receives a transactional adapter
|
|
239
|
+
* whose `query` runs on the same connection; committed on success, rolled
|
|
240
|
+
* back on throw.
|
|
241
|
+
*
|
|
242
|
+
* Optional: adapters without real connection affinity (e.g. test mocks) can
|
|
243
|
+
* omit this. Operations that need read-after-write consistency must guard
|
|
244
|
+
* with `if (db.transaction)` and fall back to sequential queries.
|
|
245
|
+
*/
|
|
246
|
+
transaction?: <T>(fn: (tx: QueryableDatabaseAdapter) => Promise<T>) => Promise<T>;
|
|
236
247
|
collectionStorage?: CollectionStorageAdapter;
|
|
237
248
|
}
|
|
238
249
|
export interface DatabaseAdapter {
|
|
239
250
|
query: QueryableDatabaseAdapter['query'];
|
|
251
|
+
transaction?: QueryableDatabaseAdapter['transaction'];
|
|
240
252
|
connect: () => Promise<void>;
|
|
241
253
|
disconnect: () => Promise<void>;
|
|
242
254
|
init?: () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/types/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/types/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-wrapper.d.ts","sourceRoot":"","sources":["../../src/utils/api-wrapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"api-wrapper.d.ts","sourceRoot":"","sources":["../../src/utils/api-wrapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CAsElE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EACtE,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,GAC3C,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAkCtC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Wraps Next.js API routes to automatically set up request context,
|
|
5
5
|
* error handling, and logging.
|
|
6
6
|
*/
|
|
7
|
+
import { getClientIp } from '@revealui/security';
|
|
7
8
|
import { handleApiError } from './errors.js';
|
|
8
9
|
import { logger } from './logger.js';
|
|
9
10
|
import { createRequestContext, getRequestDuration, runInRequestContext, } from './request-context.js';
|
|
@@ -42,7 +43,7 @@ export function withRequestContext(handler) {
|
|
|
42
43
|
headers: Object.fromEntries(request.headers.entries()),
|
|
43
44
|
path: new URL(request.url).pathname,
|
|
44
45
|
method: request.method,
|
|
45
|
-
ip:
|
|
46
|
+
ip: getClientIp(request),
|
|
46
47
|
});
|
|
47
48
|
// Log incoming request
|
|
48
49
|
logger.info('Incoming request', {
|
package/package.json
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revealui/core",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.7.0",
|
|
4
|
+
"description": "RevealUI's runtime engine — admin UI, REST API, auth, rich text, plugin system, and access control. The heart of the open-source platform.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@electric-sql/pglite": "^0.4.4",
|
|
8
|
-
"@lexical/clipboard": "^0.
|
|
9
|
-
"@lexical/code": "^0.
|
|
10
|
-
"@lexical/html": "^0.
|
|
11
|
-
"@lexical/link": "^0.
|
|
12
|
-
"@lexical/list": "^0.
|
|
13
|
-
"@lexical/react": "^0.
|
|
14
|
-
"@lexical/rich-text": "^0.
|
|
15
|
-
"@lexical/selection": "^0.
|
|
16
|
-
"@lexical/table": "^0.
|
|
17
|
-
"@lexical/utils": "^0.
|
|
18
|
-
"@lexical/yjs": "^0.
|
|
8
|
+
"@lexical/clipboard": "^0.44.0",
|
|
9
|
+
"@lexical/code": "^0.44.0",
|
|
10
|
+
"@lexical/html": "^0.44.0",
|
|
11
|
+
"@lexical/link": "^0.44.0",
|
|
12
|
+
"@lexical/list": "^0.44.0",
|
|
13
|
+
"@lexical/react": "^0.44.0",
|
|
14
|
+
"@lexical/rich-text": "^0.44.0",
|
|
15
|
+
"@lexical/selection": "^0.44.0",
|
|
16
|
+
"@lexical/table": "^0.44.0",
|
|
17
|
+
"@lexical/utils": "^0.44.0",
|
|
18
|
+
"@lexical/yjs": "^0.44.0",
|
|
19
19
|
"@vercel/blob": "^2.3.3",
|
|
20
20
|
"bcryptjs": "^3.0.3",
|
|
21
21
|
"dataloader": "^2.2.3",
|
|
22
|
-
"jose": "^6.2.
|
|
23
|
-
"lexical": "^0.
|
|
22
|
+
"jose": "^6.2.3",
|
|
23
|
+
"lexical": "^0.44.0",
|
|
24
24
|
"pg": "^8.20.0",
|
|
25
25
|
"yjs": "^13.6.30",
|
|
26
|
-
"zod": "^4.3
|
|
27
|
-
"@revealui/cache": "0.1.
|
|
28
|
-
"@revealui/contracts": "
|
|
26
|
+
"zod": "^4.4.3",
|
|
27
|
+
"@revealui/cache": "0.1.5",
|
|
28
|
+
"@revealui/contracts": "0.5.0",
|
|
29
29
|
"@revealui/resilience": "0.2.4",
|
|
30
|
-
"@revealui/security": "0.3.
|
|
31
|
-
"@revealui/utils": "0.3.
|
|
30
|
+
"@revealui/security": "0.3.1",
|
|
31
|
+
"@revealui/utils": "0.3.5"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/json-schema": "^7.0.15",
|
|
35
35
|
"@types/pg": "^8.20.0",
|
|
36
36
|
"@types/react": "^19.2.14",
|
|
37
37
|
"@types/react-dom": "^19.2.3",
|
|
38
|
-
"@vitest/coverage-v8": "^4.1.
|
|
38
|
+
"@vitest/coverage-v8": "^4.1.5",
|
|
39
39
|
"expect-type": "^1.3.0",
|
|
40
40
|
"tsup": "^8.5.1",
|
|
41
|
-
"vitest": "^4.1.
|
|
41
|
+
"vitest": "^4.1.5",
|
|
42
42
|
"@revealui/dev": "0.1.0"
|
|
43
43
|
},
|
|
44
44
|
"engines": {
|
|
@@ -53,6 +53,10 @@
|
|
|
53
53
|
"types": "./dist/license.d.ts",
|
|
54
54
|
"import": "./dist/license.js"
|
|
55
55
|
},
|
|
56
|
+
"./revforge-license": {
|
|
57
|
+
"types": "./dist/revforge-license.d.ts",
|
|
58
|
+
"import": "./dist/revforge-license.js"
|
|
59
|
+
},
|
|
56
60
|
"./features": {
|
|
57
61
|
"types": "./dist/features.d.ts",
|
|
58
62
|
"import": "./dist/features.js"
|
|
@@ -245,6 +249,10 @@
|
|
|
245
249
|
"types": "./dist/observability/logger.d.ts",
|
|
246
250
|
"import": "./dist/observability/logger.js"
|
|
247
251
|
},
|
|
252
|
+
"./observability/metrics": {
|
|
253
|
+
"types": "./dist/observability/metrics.d.ts",
|
|
254
|
+
"import": "./dist/observability/metrics.js"
|
|
255
|
+
},
|
|
248
256
|
"./observability/alerts": {
|
|
249
257
|
"types": "./dist/observability/alerts.d.ts",
|
|
250
258
|
"import": "./dist/observability/alerts.js"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../src/types/legacy.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|