@selvajs/platform 0.14.2 → 0.15.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/auth.d.ts +60 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +12 -0
- package/dist/auth.js.map +1 -0
- package/dist/compute.d.ts +47 -0
- package/dist/compute.d.ts.map +1 -0
- package/dist/compute.js +11 -0
- package/dist/compute.js.map +1 -0
- package/dist/computeServer/index.d.ts +2 -0
- package/dist/computeServer/index.d.ts.map +1 -1
- package/dist/computeServer/index.js +6 -0
- package/dist/computeServer/index.js.map +1 -1
- package/dist/computeServer/interface.d.ts +10 -0
- package/dist/computeServer/interface.d.ts.map +1 -1
- package/dist/computeServer/secrets.d.ts +53 -0
- package/dist/computeServer/secrets.d.ts.map +1 -0
- package/dist/computeServer/secrets.js +67 -0
- package/dist/computeServer/secrets.js.map +1 -0
- package/dist/context.d.ts +7 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +13 -0
- package/dist/context.js.map +1 -1
- package/dist/data/interface.d.ts +33 -0
- package/dist/data/interface.d.ts.map +1 -1
- package/dist/definitions/interface.d.ts +18 -0
- package/dist/definitions/interface.d.ts.map +1 -1
- package/dist/definitions/schemas.d.ts +1 -0
- package/dist/definitions/schemas.d.ts.map +1 -1
- package/dist/definitions/schemas.js +3 -0
- package/dist/definitions/schemas.js.map +1 -1
- package/dist/definitions/service.d.ts +62 -0
- package/dist/definitions/service.d.ts.map +1 -0
- package/dist/definitions/service.js +149 -0
- package/dist/definitions/service.js.map +1 -0
- package/dist/definitions/types.d.ts +24 -1
- package/dist/definitions/types.d.ts.map +1 -1
- package/dist/definitions.d.ts +146 -0
- package/dist/definitions.d.ts.map +1 -0
- package/dist/definitions.js +23 -0
- package/dist/definitions.js.map +1 -0
- package/dist/errors/interface.d.ts +44 -0
- package/dist/errors/interface.d.ts.map +1 -0
- package/dist/errors/interface.js +9 -0
- package/dist/errors/interface.js.map +1 -0
- package/dist/events/interface.d.ts +23 -0
- package/dist/events/interface.d.ts.map +1 -1
- package/dist/events/interface.js.map +1 -1
- package/dist/index.d.ts +14 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/invites/schemas.d.ts +24 -0
- package/dist/invites/schemas.d.ts.map +1 -0
- package/dist/invites/schemas.js +17 -0
- package/dist/invites/schemas.js.map +1 -0
- package/dist/metrics/interface.d.ts +6 -0
- package/dist/metrics/interface.d.ts.map +1 -1
- package/dist/metrics/interface.js.map +1 -1
- package/dist/organizations/index.d.ts +4 -3
- package/dist/organizations/index.d.ts.map +1 -1
- package/dist/organizations/index.js +2 -1
- package/dist/organizations/index.js.map +1 -1
- package/dist/organizations/interface.d.ts +1 -1
- package/dist/organizations/interface.d.ts.map +1 -1
- package/dist/organizations/paths.d.ts +22 -0
- package/dist/organizations/paths.d.ts.map +1 -0
- package/dist/organizations/paths.js +43 -0
- package/dist/organizations/paths.js.map +1 -0
- package/dist/organizations/schemas.d.ts +10 -0
- package/dist/organizations/schemas.d.ts.map +1 -1
- package/dist/organizations/schemas.js +6 -0
- package/dist/organizations/schemas.js.map +1 -1
- package/dist/organizations/types.d.ts +10 -1
- package/dist/organizations/types.d.ts.map +1 -1
- package/dist/organizations.d.ts +93 -0
- package/dist/organizations.d.ts.map +1 -0
- package/dist/organizations.js +14 -0
- package/dist/organizations.js.map +1 -0
- package/dist/solveCache/interface.d.ts +86 -0
- package/dist/solveCache/interface.d.ts.map +1 -0
- package/dist/solveCache/interface.js +12 -0
- package/dist/solveCache/interface.js.map +1 -0
- package/dist/storage/assetClasses.d.ts +59 -0
- package/dist/storage/assetClasses.d.ts.map +1 -0
- package/dist/storage/assetClasses.js +86 -0
- package/dist/storage/assetClasses.js.map +1 -0
- package/dist/storage/cacheBust.d.ts +21 -0
- package/dist/storage/cacheBust.d.ts.map +1 -0
- package/dist/storage/cacheBust.js +29 -0
- package/dist/storage/cacheBust.js.map +1 -0
- package/dist/storage/image.d.ts +6 -1
- package/dist/storage/image.d.ts.map +1 -1
- package/dist/storage/image.js +8 -3
- package/dist/storage/image.js.map +1 -1
- package/dist/storage/index.d.ts +3 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +2 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/testing/adapterSuite.d.ts +33 -0
- package/dist/testing/adapterSuite.d.ts.map +1 -0
- package/dist/testing/adapterSuite.js +166 -0
- package/dist/testing/adapterSuite.js.map +1 -0
- package/dist/testing/suites/definitionStoreSuite.d.ts.map +1 -1
- package/dist/testing/suites/definitionStoreSuite.js +87 -0
- package/dist/testing/suites/definitionStoreSuite.js.map +1 -1
- package/dist/testing/suites/eventSinkSuite.js +1 -0
- package/dist/testing/suites/eventSinkSuite.js.map +1 -1
- package/dist/testing/suites/orgStoreSuite.d.ts.map +1 -1
- package/dist/testing/suites/orgStoreSuite.js +12 -0
- package/dist/testing/suites/orgStoreSuite.js.map +1 -1
- package/dist/testing/suites/platformPermissionStoreSuite.d.ts +9 -0
- package/dist/testing/suites/platformPermissionStoreSuite.d.ts.map +1 -1
- package/dist/testing/suites/platformPermissionStoreSuite.js +34 -1
- package/dist/testing/suites/platformPermissionStoreSuite.js.map +1 -1
- package/dist/testing/suites/runner.d.ts +21 -0
- package/dist/testing/suites/runner.d.ts.map +1 -0
- package/dist/testing/suites/runner.js +7 -0
- package/dist/testing/suites/runner.js.map +1 -0
- package/dist/testing/suites/storageProviderSuite.d.ts.map +1 -1
- package/dist/testing/suites/storageProviderSuite.js +18 -0
- package/dist/testing/suites/storageProviderSuite.js.map +1 -1
- package/package.json +9 -24
- package/src/access/index.ts +0 -23
- package/src/access/rules.ts +0 -276
- package/src/auth/index.ts +0 -8
- package/src/auth/interface.ts +0 -279
- package/src/auth/types.ts +0 -32
- package/src/bindings/index.ts +0 -2
- package/src/bindings/interface.ts +0 -61
- package/src/computeServer/index.ts +0 -17
- package/src/computeServer/interface.ts +0 -62
- package/src/computeServer/types.ts +0 -74
- package/src/computeServer/utils.ts +0 -112
- package/src/config.ts +0 -99
- package/src/context.ts +0 -66
- package/src/data/index.ts +0 -1
- package/src/data/interface.ts +0 -70
- package/src/definitions/index.ts +0 -26
- package/src/definitions/interface.ts +0 -78
- package/src/definitions/paths.ts +0 -31
- package/src/definitions/schemas.ts +0 -64
- package/src/definitions/types.ts +0 -111
- package/src/errors.ts +0 -16
- package/src/events/audit.ts +0 -67
- package/src/events/index.ts +0 -9
- package/src/events/interface.ts +0 -102
- package/src/index.ts +0 -219
- package/src/invites/index.ts +0 -2
- package/src/invites/interface.ts +0 -38
- package/src/invites/types.ts +0 -39
- package/src/metrics/interface.ts +0 -86
- package/src/organizations/index.ts +0 -14
- package/src/organizations/interface.ts +0 -68
- package/src/organizations/schemas.ts +0 -52
- package/src/organizations/types.ts +0 -31
- package/src/pagination.ts +0 -45
- package/src/permissions/index.ts +0 -3
- package/src/permissions/interface.ts +0 -60
- package/src/permissions/types.ts +0 -21
- package/src/platformProjects/index.ts +0 -3
- package/src/platformProjects/interface.ts +0 -27
- package/src/platformProjects/schemas.ts +0 -13
- package/src/platformProjects/types.ts +0 -22
- package/src/projects/index.ts +0 -4
- package/src/projects/interface.ts +0 -58
- package/src/projects/schemas.ts +0 -28
- package/src/projects/types.ts +0 -36
- package/src/shareLinks/index.ts +0 -5
- package/src/shareLinks/interface.ts +0 -35
- package/src/shareLinks/schemas.ts +0 -21
- package/src/shareLinks/types.ts +0 -34
- package/src/storage/image.ts +0 -77
- package/src/storage/index.ts +0 -9
- package/src/storage/interface.ts +0 -27
- package/src/testing/index.ts +0 -47
- package/src/testing/suites/authProviderSuite.ts +0 -207
- package/src/testing/suites/computeServerStoreSuite.ts +0 -195
- package/src/testing/suites/definitionStoreSuite.ts +0 -585
- package/src/testing/suites/emailLinkAuthSuite.ts +0 -83
- package/src/testing/suites/eventSinkSuite.ts +0 -379
- package/src/testing/suites/helpers.ts +0 -87
- package/src/testing/suites/inviteStoreSuite.ts +0 -143
- package/src/testing/suites/orgStoreSuite.ts +0 -412
- package/src/testing/suites/platformPermissionStoreSuite.ts +0 -196
- package/src/testing/suites/platformProjectGrantStoreSuite.ts +0 -166
- package/src/testing/suites/projectStoreSuite.ts +0 -381
- package/src/testing/suites/shareLinkStoreSuite.ts +0 -203
- package/src/testing/suites/solveMetricSinkSuite.ts +0 -135
- package/src/testing/suites/storageProviderSuite.ts +0 -175
- package/src/testing/suites/userProfileStoreSuite.ts +0 -134
- package/src/userProfile/index.ts +0 -3
- package/src/userProfile/interface.ts +0 -48
- package/src/userProfile/types.ts +0 -24
- package/src/utils/audit.ts +0 -46
- package/src/utils/index.ts +0 -2
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { SYSTEM_CONTEXT } from '../context.js';
|
|
2
|
+
import { ProviderError } from '../errors.js';
|
|
3
|
+
import { definitionPaths } from './paths.js';
|
|
4
|
+
/**
|
|
5
|
+
* Default age threshold after which a 'pending' record is considered stale.
|
|
6
|
+
* Conservative — covers slow uploads over weak connections.
|
|
7
|
+
*/
|
|
8
|
+
export const PENDING_GC_AGE_MS = 30 * 60 * 1000; // 30 minutes
|
|
9
|
+
/**
|
|
10
|
+
* Orchestrates writes that span IDataProvider + IStorageProvider.
|
|
11
|
+
*
|
|
12
|
+
* Ordering rules (see Phase 4 of the provider refactor):
|
|
13
|
+
*
|
|
14
|
+
* create — metadata-first:
|
|
15
|
+
* 1. Write record with status='pending'
|
|
16
|
+
* 2. Upload blob
|
|
17
|
+
* 3. Flip status to 'ready'
|
|
18
|
+
* If step 2 fails the record stays 'pending' with no blob. List queries
|
|
19
|
+
* filter 'pending' by default, so no consumer sees the half-written state.
|
|
20
|
+
* The janitor (gcStalePending) sweeps records older than PENDING_GC_AGE_MS.
|
|
21
|
+
*
|
|
22
|
+
* updateFile — best-effort with retry-safe shape:
|
|
23
|
+
* 1. Archive current file to history blob
|
|
24
|
+
* 2. Append history entry to record
|
|
25
|
+
* 3. Write new file to the active blob path
|
|
26
|
+
* 4. Prune history beyond maxHistory
|
|
27
|
+
* A failure between 2 and 3 leaves the record pointing at a missing active
|
|
28
|
+
* blob. The operation is idempotent — retrying with the same file restores
|
|
29
|
+
* a consistent state. This is an acknowledged limitation; the create path
|
|
30
|
+
* is where orphan risk is highest and is the one we fully guard.
|
|
31
|
+
*/
|
|
32
|
+
export class DefinitionService {
|
|
33
|
+
data;
|
|
34
|
+
storage;
|
|
35
|
+
constructor(data, storage) {
|
|
36
|
+
this.data = data;
|
|
37
|
+
this.storage = storage;
|
|
38
|
+
}
|
|
39
|
+
async create(ctx, input, file) {
|
|
40
|
+
const now = new Date().toISOString();
|
|
41
|
+
const record = {
|
|
42
|
+
guid: input.guid,
|
|
43
|
+
projectId: input.projectId,
|
|
44
|
+
ownerId: input.ownerId,
|
|
45
|
+
fileExt: input.fileExt,
|
|
46
|
+
meta: input.meta,
|
|
47
|
+
computeServerId: input.computeServerId,
|
|
48
|
+
history: [],
|
|
49
|
+
maxHistory: input.maxHistory ?? 10,
|
|
50
|
+
status: 'pending',
|
|
51
|
+
runCount: 0,
|
|
52
|
+
createdAt: now,
|
|
53
|
+
updatedAt: now
|
|
54
|
+
};
|
|
55
|
+
// 1. Metadata first — if this fails there's nothing to clean up.
|
|
56
|
+
await this.data.definitions.create(ctx, record);
|
|
57
|
+
// 2. Blob upload — if this fails the record stays 'pending' for the janitor.
|
|
58
|
+
await this.storage.put(definitionPaths.file(input.guid, input.fileExt), file, 'application/octet-stream');
|
|
59
|
+
// 3. Flip to draft — the record is now visible to editors.
|
|
60
|
+
await this.data.definitions.update(ctx, input.guid, { status: 'draft' });
|
|
61
|
+
return { ...record, status: 'draft' };
|
|
62
|
+
}
|
|
63
|
+
async updateFile(ctx, guid, file, ext, originalName) {
|
|
64
|
+
const existing = await this.data.definitions.get(ctx, guid);
|
|
65
|
+
if (!existing)
|
|
66
|
+
throw new ProviderError(`Definition not found: ${guid}`, 404);
|
|
67
|
+
const now = new Date().toISOString();
|
|
68
|
+
// UUID-based ref avoids collisions from identical timestamps or special chars in filenames.
|
|
69
|
+
const ref = `${crypto.randomUUID()}_${originalName.replace(/[^a-zA-Z0-9._-]/g, '_')}`;
|
|
70
|
+
// Archive the current file before overwriting
|
|
71
|
+
const currentFile = await this.storage.get(definitionPaths.file(guid, existing.fileExt));
|
|
72
|
+
if (currentFile) {
|
|
73
|
+
await this.storage.put(definitionPaths.archive(guid, ref), currentFile, 'application/octet-stream');
|
|
74
|
+
await this.data.definitions.addHistoryEntry(ctx, guid, {
|
|
75
|
+
ref,
|
|
76
|
+
originalName,
|
|
77
|
+
archivedAt: now
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
await this.storage.put(definitionPaths.file(guid, ext), file, 'application/octet-stream');
|
|
81
|
+
if (ext !== existing.fileExt) {
|
|
82
|
+
await this.storage.delete(definitionPaths.file(guid, existing.fileExt));
|
|
83
|
+
}
|
|
84
|
+
await this.data.definitions.update(ctx, guid, { fileExt: ext });
|
|
85
|
+
// Prune history if maxHistory is set
|
|
86
|
+
const updated = await this.data.definitions.get(ctx, guid);
|
|
87
|
+
if (updated && updated.maxHistory > 0 && updated.history.length > updated.maxHistory) {
|
|
88
|
+
const toRemove = updated.history.slice(updated.maxHistory);
|
|
89
|
+
for (const entry of toRemove) {
|
|
90
|
+
await this.storage.delete(definitionPaths.archive(guid, entry.ref));
|
|
91
|
+
await this.data.definitions.removeHistoryEntry(ctx, guid, entry.ref);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async updateMeta(ctx, guid, patch) {
|
|
96
|
+
const { maxHistory, projectId, computeServerId, ...metaFields } = patch;
|
|
97
|
+
const meta = Object.keys(metaFields).length > 0 ? metaFields : undefined;
|
|
98
|
+
const recordPatch = {
|
|
99
|
+
...(meta !== undefined && { meta }),
|
|
100
|
+
...(maxHistory !== undefined && { maxHistory }),
|
|
101
|
+
...(projectId !== undefined && { projectId }),
|
|
102
|
+
...(computeServerId !== undefined && { computeServerId })
|
|
103
|
+
};
|
|
104
|
+
await this.data.definitions.update(ctx, guid, recordPatch);
|
|
105
|
+
}
|
|
106
|
+
async saveCoverImage(ctx, guid, imageData) {
|
|
107
|
+
const path = definitionPaths.image(guid);
|
|
108
|
+
await this.storage.put(path, imageData, 'image/webp');
|
|
109
|
+
const url = this.storage.getPublicUrl(path);
|
|
110
|
+
await this.data.definitions.update(ctx, guid, { meta: { coverImage: url } });
|
|
111
|
+
}
|
|
112
|
+
async revertToVersion(ctx, guid, ref) {
|
|
113
|
+
const existing = await this.data.definitions.get(ctx, guid);
|
|
114
|
+
if (!existing)
|
|
115
|
+
throw new ProviderError(`Definition not found: ${guid}`, 404);
|
|
116
|
+
const entry = existing.history.find((h) => h.ref === ref);
|
|
117
|
+
if (!entry)
|
|
118
|
+
throw new ProviderError(`History entry not found: ${ref}`, 404);
|
|
119
|
+
const archived = await this.storage.get(definitionPaths.archive(guid, ref));
|
|
120
|
+
if (!archived)
|
|
121
|
+
throw new ProviderError(`Archived file not found for ref: ${ref}`, 404);
|
|
122
|
+
// Archive the current file first, then restore the old one
|
|
123
|
+
await this.updateFile(ctx, guid, archived, existing.fileExt, entry.originalName);
|
|
124
|
+
}
|
|
125
|
+
async delete(ctx, guid) {
|
|
126
|
+
// Blobs first — if this fails, record remains and retry is safe.
|
|
127
|
+
// If record delete fails after, the record points at nothing; the
|
|
128
|
+
// next get() returns null-payload semantics and the janitor cleans up.
|
|
129
|
+
await this.storage.deletePrefix(definitionPaths.prefix(guid));
|
|
130
|
+
await this.data.definitions.delete(ctx, guid);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Janitor — delete records stuck in 'pending' for longer than ageMs and
|
|
134
|
+
* any blobs they may have written. Safe to run on a schedule.
|
|
135
|
+
* Runs under SYSTEM_CONTEXT; callers don't pass one.
|
|
136
|
+
*
|
|
137
|
+
* @returns Number of records reclaimed.
|
|
138
|
+
*/
|
|
139
|
+
async gcStalePending(ageMs = PENDING_GC_AGE_MS) {
|
|
140
|
+
const cutoff = new Date(Date.now() - ageMs).toISOString();
|
|
141
|
+
const stale = await this.data.definitions.listStalePending(SYSTEM_CONTEXT, cutoff);
|
|
142
|
+
for (const record of stale) {
|
|
143
|
+
await this.storage.deletePrefix(definitionPaths.prefix(record.guid));
|
|
144
|
+
await this.data.definitions.delete(SYSTEM_CONTEXT, record.guid);
|
|
145
|
+
}
|
|
146
|
+
return stale.length;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/definitions/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,11 @@ export type DefinitionStatus = 'pending' | 'draft' | 'published' | 'archived';
|
|
|
24
24
|
export interface DefinitionVersion {
|
|
25
25
|
id: string;
|
|
26
26
|
definitionId: string;
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Monotonic integer starting at 1; NEVER reused — allocated from the parent
|
|
29
|
+
* record's `nextVersionNumber` counter, which only ever advances. Deleting the
|
|
30
|
+
* latest version does not free its number, so `fileKey`s never collide.
|
|
31
|
+
*/
|
|
28
32
|
versionNumber: number;
|
|
29
33
|
fileExt: DefinitionFileExt;
|
|
30
34
|
/** Full storage key. Opaque to callers. */
|
|
@@ -53,6 +57,13 @@ export interface DefinitionRecord {
|
|
|
53
57
|
updatedBy: string;
|
|
54
58
|
/** Falls back to the org default, then the platform default. */
|
|
55
59
|
computeServerId?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Durable L2 solve-cache quota for this definition (H1/R9). Absent = inherit
|
|
62
|
+
* the global default (`SOLVE_CACHE_DEFAULT_MAX_ENTRIES`); `0` = caching off
|
|
63
|
+
* (the non-determinism / wide-input-space escape hatch); `N` = keep at most N
|
|
64
|
+
* cached solves for this definition. One number, one settings input.
|
|
65
|
+
*/
|
|
66
|
+
solveCacheLimit?: number;
|
|
56
67
|
displayName: string;
|
|
57
68
|
description?: string;
|
|
58
69
|
category?: string;
|
|
@@ -61,6 +72,16 @@ export interface DefinitionRecord {
|
|
|
61
72
|
coverImage?: string;
|
|
62
73
|
status: DefinitionStatus;
|
|
63
74
|
solveCount: number;
|
|
75
|
+
/**
|
|
76
|
+
* Monotonic version-number allocator. The next `uploadVersion` reserves this
|
|
77
|
+
* value for the new version's `versionNumber` (and `fileKey`) then advances
|
|
78
|
+
* the counter — it is NEVER decremented, so delete-latest-then-reupload mints
|
|
79
|
+
* a FRESH number and a FRESH `fileKey` rather than reusing the deleted one.
|
|
80
|
+
* Reusing a `fileKey` would let a stale storage blob (or any layer keying on
|
|
81
|
+
* the key) serve the old version's bytes for the new content. Starts at 2
|
|
82
|
+
* after v1 is created.
|
|
83
|
+
*/
|
|
84
|
+
nextVersionNumber: number;
|
|
64
85
|
/**
|
|
65
86
|
* Both null only during the brief `pending` window between metadata create
|
|
66
87
|
* and v1 upload; otherwise both reference live `DefinitionVersion` rows.
|
|
@@ -89,6 +110,8 @@ export interface DefinitionRecordPatch {
|
|
|
89
110
|
coverImage?: string | null;
|
|
90
111
|
projectId?: string;
|
|
91
112
|
computeServerId?: string | null;
|
|
113
|
+
/** L2 cache quota (see {@link DefinitionRecord.solveCacheLimit}); `null` clears to inherit. */
|
|
114
|
+
solveCacheLimit?: number | null;
|
|
92
115
|
status?: DefinitionStatus;
|
|
93
116
|
/** Ownership transfer. */
|
|
94
117
|
ownerId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/definitions/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,KAAK,CAAC;AAE7C,eAAO,MAAM,aAAa,EAAE,MAAM,EAAoB,CAAC;AACvD,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAA+C,CAAC;AAC3F,eAAO,MAAM,yBAAyB,EAAE,MAAM,EAAkD,CAAC;AAEjG,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM5D,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;AAE9E;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/definitions/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Definition provider interfaces — independently swappable.
|
|
3
|
+
*
|
|
4
|
+
* File storage and metadata storage are deliberately split so you can mix:
|
|
5
|
+
* - Filesystem files + Supabase DB metadata
|
|
6
|
+
* - S3 files + local JSON metadata
|
|
7
|
+
* - Everything through one backend (e.g. full Supabase)
|
|
8
|
+
*/
|
|
9
|
+
export type DefinitionFileExt = 'gh' | 'ghx';
|
|
10
|
+
/** File extensions accepted for Grasshopper definitions (with dot) */
|
|
11
|
+
export declare const GH_EXTENSIONS: string[];
|
|
12
|
+
/** Image extensions accepted for cover images (with dot) */
|
|
13
|
+
export declare const COVER_IMAGE_EXTENSIONS: string[];
|
|
14
|
+
/** All accepted upload extensions */
|
|
15
|
+
export declare const ALLOWED_UPLOAD_EXTENSIONS: string[];
|
|
16
|
+
/** MIME types for image extensions */
|
|
17
|
+
export declare const COVER_IMAGE_CONTENT_TYPES: Record<string, string>;
|
|
18
|
+
export interface DefinitionMeta {
|
|
19
|
+
displayName: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
category?: string;
|
|
22
|
+
tags?: string[];
|
|
23
|
+
/** Public URL to cover image, provider-dependent (e.g. /api/definitions/{guid}/image/cover.webp or a CDN URL) */
|
|
24
|
+
coverImage?: string;
|
|
25
|
+
/** Original uploaded filename, kept for display only */
|
|
26
|
+
originalFilename?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A single entry in the file version history.
|
|
30
|
+
* Stored by the meta provider; the actual bytes are stored by the file provider.
|
|
31
|
+
*/
|
|
32
|
+
export interface HistoryEntry {
|
|
33
|
+
/**
|
|
34
|
+
* Provider-specific reference to the archived file.
|
|
35
|
+
* Filesystem: timestamped filename (e.g. "2024-01-15T10-30-45-123Z_definition.gh").
|
|
36
|
+
* S3 / Supabase: object key or storage path.
|
|
37
|
+
*/
|
|
38
|
+
ref: string;
|
|
39
|
+
/** Original uploaded filename, for display purposes */
|
|
40
|
+
originalName: string;
|
|
41
|
+
/** ISO 8601 date of when the file was archived */
|
|
42
|
+
archivedAt: string;
|
|
43
|
+
}
|
|
44
|
+
export interface DefinitionRecord {
|
|
45
|
+
/** UUID v4 primary key */
|
|
46
|
+
guid: string;
|
|
47
|
+
/** UUID of the project that owns this definition */
|
|
48
|
+
projectId: string;
|
|
49
|
+
/** UUID of the user who created this definition */
|
|
50
|
+
ownerId: string;
|
|
51
|
+
/**
|
|
52
|
+
* Optional UUID of a specific compute server to use when solving.
|
|
53
|
+
* Falls back to the org default, then the platform default.
|
|
54
|
+
*/
|
|
55
|
+
computeServerId?: string;
|
|
56
|
+
fileExt: DefinitionFileExt;
|
|
57
|
+
meta: DefinitionMeta;
|
|
58
|
+
/** File version history, newest first */
|
|
59
|
+
history: HistoryEntry[];
|
|
60
|
+
/** Maximum archived versions to keep. 0 = unlimited. */
|
|
61
|
+
maxHistory: number;
|
|
62
|
+
createdAt: string;
|
|
63
|
+
updatedAt: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* File storage provider: where .gh / .ghx binaries, archived versions, and preview images live.
|
|
67
|
+
*
|
|
68
|
+
* Implement with: local filesystem, S3, Supabase Storage, Azure Blob, etc.
|
|
69
|
+
*/
|
|
70
|
+
export interface IDefinitionFileProvider {
|
|
71
|
+
/** Load the active Grasshopper definition binary. Returns null if not found. */
|
|
72
|
+
getFile(guid: string): Promise<Uint8Array | null>;
|
|
73
|
+
/** Load the preview image bytes. Returns null if no image exists. */
|
|
74
|
+
getPreviewImage(guid: string): Promise<Uint8Array | null>;
|
|
75
|
+
/**
|
|
76
|
+
* Load an archived file by its provider-specific ref.
|
|
77
|
+
* Used when reverting to a previous version.
|
|
78
|
+
*/
|
|
79
|
+
getArchivedFile(guid: string, ref: string): Promise<Uint8Array | null>;
|
|
80
|
+
/** Store the active definition file. Overwrites any existing active file. */
|
|
81
|
+
saveFile(guid: string, data: Uint8Array, ext: DefinitionFileExt): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Archive the current active file before replacing it.
|
|
84
|
+
* Returns a HistoryEntry (with provider-specific ref) to be saved by the meta provider.
|
|
85
|
+
* Returns null if there is no current active file to archive.
|
|
86
|
+
*/
|
|
87
|
+
archiveCurrentFile(guid: string, originalName: string): Promise<HistoryEntry | null>;
|
|
88
|
+
/**
|
|
89
|
+
* Delete a specific archived version by its ref.
|
|
90
|
+
* Called when pruning history that exceeds maxHistory.
|
|
91
|
+
*/
|
|
92
|
+
deleteArchivedFile(guid: string, ref: string): Promise<void>;
|
|
93
|
+
/** Store a preview image. The provider may transcode to its preferred format. */
|
|
94
|
+
saveImage(guid: string, data: Uint8Array): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Returns the public URL for the stored cover image after a saveImage() call.
|
|
97
|
+
* Called immediately after saveImage() so the URL can be persisted in metadata.
|
|
98
|
+
* Filesystem: returns "/api/definitions/{guid}/image/cover.webp".
|
|
99
|
+
* S3/Supabase: returns the CDN or signed URL for the uploaded image.
|
|
100
|
+
*/
|
|
101
|
+
getCoverImageUrl(guid: string): string;
|
|
102
|
+
/** Delete all files associated with a GUID (active file, archives, image). */
|
|
103
|
+
deleteFiles(guid: string): Promise<void>;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Top-level fields that can be patched on an existing record.
|
|
107
|
+
* `meta` is merged shallowly; top-level fields replace the stored value.
|
|
108
|
+
*/
|
|
109
|
+
export interface DefinitionRecordPatch {
|
|
110
|
+
meta?: Partial<DefinitionMeta>;
|
|
111
|
+
fileExt?: DefinitionFileExt;
|
|
112
|
+
maxHistory?: number;
|
|
113
|
+
projectId?: string;
|
|
114
|
+
computeServerId?: string | null;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Metadata storage provider: where definition config, metadata, and file history live.
|
|
118
|
+
*
|
|
119
|
+
* Implement with: local JSON file, Supabase DB, DynamoDB, PostgreSQL, etc.
|
|
120
|
+
*/
|
|
121
|
+
export interface IDefinitionMetaProvider {
|
|
122
|
+
/** List all definition records, sorted by displayName. */
|
|
123
|
+
list(): Promise<DefinitionRecord[]>;
|
|
124
|
+
/** List all definitions belonging to a specific project. */
|
|
125
|
+
listByProject(projectId: string): Promise<DefinitionRecord[]>;
|
|
126
|
+
/** List definitions that belong to projects with public visibility. */
|
|
127
|
+
listPublic(): Promise<DefinitionRecord[]>;
|
|
128
|
+
/** Get a single record by GUID. Returns null if not found. */
|
|
129
|
+
get(guid: string): Promise<DefinitionRecord | null>;
|
|
130
|
+
/** Create a new definition record. */
|
|
131
|
+
create(record: DefinitionRecord): Promise<void>;
|
|
132
|
+
/** Merge a patch into an existing record. `meta` fields are merged shallowly. */
|
|
133
|
+
update(guid: string, patch: DefinitionRecordPatch): Promise<void>;
|
|
134
|
+
/**
|
|
135
|
+
* Prepend a new history entry and optionally prune old entries.
|
|
136
|
+
* The file provider has already archived the bytes; this just updates the metadata.
|
|
137
|
+
*/
|
|
138
|
+
addHistoryEntry(guid: string, entry: HistoryEntry): Promise<void>;
|
|
139
|
+
/**
|
|
140
|
+
* Remove a history entry by ref (after the file provider has deleted the bytes).
|
|
141
|
+
*/
|
|
142
|
+
removeHistoryEntry(guid: string, ref: string): Promise<void>;
|
|
143
|
+
/** Delete a definition record entirely. */
|
|
144
|
+
delete(guid: string): Promise<void>;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../src/definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Definition provider interfaces — independently swappable.
|
|
3
|
+
*
|
|
4
|
+
* File storage and metadata storage are deliberately split so you can mix:
|
|
5
|
+
* - Filesystem files + Supabase DB metadata
|
|
6
|
+
* - S3 files + local JSON metadata
|
|
7
|
+
* - Everything through one backend (e.g. full Supabase)
|
|
8
|
+
*/
|
|
9
|
+
/** File extensions accepted for Grasshopper definitions (with dot) */
|
|
10
|
+
export const GH_EXTENSIONS = ['.gh', '.ghx'];
|
|
11
|
+
/** Image extensions accepted for cover images (with dot) */
|
|
12
|
+
export const COVER_IMAGE_EXTENSIONS = ['.jpg', '.jpeg', '.png', '.webp', '.gif'];
|
|
13
|
+
/** All accepted upload extensions */
|
|
14
|
+
export const ALLOWED_UPLOAD_EXTENSIONS = [...GH_EXTENSIONS, ...COVER_IMAGE_EXTENSIONS];
|
|
15
|
+
/** MIME types for image extensions */
|
|
16
|
+
export const COVER_IMAGE_CONTENT_TYPES = {
|
|
17
|
+
'.jpg': 'image/jpeg',
|
|
18
|
+
'.jpeg': 'image/jpeg',
|
|
19
|
+
'.png': 'image/png',
|
|
20
|
+
'.webp': 'image/webp',
|
|
21
|
+
'.gif': 'image/gif'
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../src/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,sEAAsE;AACtE,MAAM,CAAC,MAAM,aAAa,GAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAEvD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,sBAAsB,GAAa,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAE3F,qCAAqC;AACrC,MAAM,CAAC,MAAM,yBAAyB,GAAa,CAAC,GAAG,aAAa,EAAE,GAAG,sBAAsB,CAAC,CAAC;AAEjG,sCAAsC;AACtC,MAAM,CAAC,MAAM,yBAAyB,GAA2B;IAChE,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;CACnB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured context attached to a reported error. All fields optional — a
|
|
3
|
+
* report can fire before any request context is built (e.g. an
|
|
4
|
+
* `unhandledRejection` with no active request). Deliberately NOT a
|
|
5
|
+
* `RequestContext`: reporters must never receive the opaque `authToken`, so
|
|
6
|
+
* only non-sensitive routing/identity fields are surfaced here.
|
|
7
|
+
*/
|
|
8
|
+
export interface ErrorContext {
|
|
9
|
+
/** HTTP method, when the error happened inside a request. */
|
|
10
|
+
method?: string;
|
|
11
|
+
/** Route pathname (never the query string — it can carry share tokens). */
|
|
12
|
+
route?: string;
|
|
13
|
+
/** Acting user id, when known. */
|
|
14
|
+
userId?: string;
|
|
15
|
+
/** Org the user was acting as, when known. */
|
|
16
|
+
orgId?: string;
|
|
17
|
+
/** Non-sensitive tags for grouping/search in the backend. */
|
|
18
|
+
tags?: Record<string, string>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Sink for unexpected server errors. Called from `handleError` and the
|
|
22
|
+
* process-level `unhandledRejection`/`uncaughtException` hooks.
|
|
23
|
+
*
|
|
24
|
+
* MUST NOT throw — reporting is best-effort and sits on the error path, where a
|
|
25
|
+
* second failure would mask the first. Implementations catch and log their own
|
|
26
|
+
* failures. MAY be fire-and-forget.
|
|
27
|
+
*/
|
|
28
|
+
export interface IErrorReporter {
|
|
29
|
+
/**
|
|
30
|
+
* Report an unexpected error. `error` is whatever was thrown/rejected —
|
|
31
|
+
* often an `Error`, but adapters occasionally reject with a plain object,
|
|
32
|
+
* so implementations must render defensively.
|
|
33
|
+
*/
|
|
34
|
+
capture(error: unknown, context?: ErrorContext): void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Default `IErrorReporter` — discards every report. Used when no error-tracking
|
|
38
|
+
* backend is configured (e.g. `SENTRY_DSN` unset), so call sites can report
|
|
39
|
+
* unconditionally. Swap in a real reporter to ship errors off-box.
|
|
40
|
+
*/
|
|
41
|
+
export declare class NoopErrorReporter implements IErrorReporter {
|
|
42
|
+
capture(_error: unknown, _context?: ErrorContext): void;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/errors/interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC5B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC9B;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CACtD;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IACvD,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI;CACvD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default `IErrorReporter` — discards every report. Used when no error-tracking
|
|
3
|
+
* backend is configured (e.g. `SENTRY_DSN` unset), so call sites can report
|
|
4
|
+
* unconditionally. Swap in a real reporter to ship errors off-box.
|
|
5
|
+
*/
|
|
6
|
+
export class NoopErrorReporter {
|
|
7
|
+
capture(_error, _context) { }
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/errors/interface.ts"],"names":[],"mappings":"AAqCA;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAC7B,OAAO,CAAC,MAAe,EAAE,QAAuB,IAAS,CAAC;CAC1D"}
|
|
@@ -110,6 +110,29 @@ export type DomainEvent = {
|
|
|
110
110
|
inviteId: string;
|
|
111
111
|
orgId: string;
|
|
112
112
|
actorId: string;
|
|
113
|
+
} | {
|
|
114
|
+
type: 'system.update.started';
|
|
115
|
+
channel: string;
|
|
116
|
+
fromVersion?: string;
|
|
117
|
+
actorId: string;
|
|
118
|
+
} | {
|
|
119
|
+
type: 'system.update.finished';
|
|
120
|
+
fromVersion?: string;
|
|
121
|
+
toVersion?: string;
|
|
122
|
+
detail?: string;
|
|
123
|
+
actorId: string;
|
|
124
|
+
} | {
|
|
125
|
+
type: 'system.update.rolled_back';
|
|
126
|
+
fromVersion?: string;
|
|
127
|
+
toVersion?: string;
|
|
128
|
+
detail?: string;
|
|
129
|
+
actorId: string;
|
|
130
|
+
} | {
|
|
131
|
+
type: 'system.update.failed';
|
|
132
|
+
fromVersion?: string;
|
|
133
|
+
toVersion?: string;
|
|
134
|
+
detail?: string;
|
|
135
|
+
actorId: string;
|
|
113
136
|
};
|
|
114
137
|
export type DomainEventType = DomainEvent['type'];
|
|
115
138
|
export interface IEventSink {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/events/interface.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/events/interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/events/interface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/events/interface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqGH;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,GAAyC;IAClE,OAAO,GAAG,CAAC,MAAM,IAAI,QAAQ,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IACzB,KAAK,CAAC,IAAI,CAAC,MAAmB,IAAkB,CAAC;CACjD"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,10 +6,11 @@ export type { IPlatformPermissionStore } from './permissions/interface.js';
|
|
|
6
6
|
export type { IUserProfileStore } from './userProfile/interface.js';
|
|
7
7
|
export type { UserProfile, RecentRun } from './userProfile/types.js';
|
|
8
8
|
export { emptyProfile } from './userProfile/types.js';
|
|
9
|
-
export type { Organization, OrgMember } from './organizations/types.js';
|
|
9
|
+
export type { Organization, OrgMember, OrgAssets } from './organizations/types.js';
|
|
10
10
|
export type { IOrgStore } from './organizations/interface.js';
|
|
11
|
-
export
|
|
12
|
-
export {
|
|
11
|
+
export { orgPaths } from './organizations/paths.js';
|
|
12
|
+
export type { OrgRole, OrgPermission, OrgAssetKind, CreateOrgInput, UpdateOrgInput } from './organizations/schemas.js';
|
|
13
|
+
export { OrgRoleSchema, OrgPermissionSchema, OrgAssetKindSchema, ALL_ORG_ASSET_KINDS, SlugSchema, CreateOrgSchema, UpdateOrgSchema, ALL_ORG_PERMISSIONS, DEFAULT_ORG_PERMISSIONS, OWNER_ADMIN_ONLY_PERMISSIONS, MEMBER_ASSIGNABLE_PERMISSIONS } from './organizations/schemas.js';
|
|
13
14
|
export type { Invite } from './invites/types.js';
|
|
14
15
|
export type { IInviteStore } from './invites/interface.js';
|
|
15
16
|
export type { Project, ProjectMember } from './projects/types.js';
|
|
@@ -34,10 +35,14 @@ export { CreateShareLinkInputSchema } from './shareLinks/schemas.js';
|
|
|
34
35
|
export type { IStorageProvider } from './storage/interface.js';
|
|
35
36
|
export { IMAGE_MAX_WIDTH, IMAGE_WEBP_QUALITY, isImageUpload, toWebpPath, transcodeImageIfNeeded } from './storage/image.js';
|
|
36
37
|
export type { TranscodeResult } from './storage/image.js';
|
|
37
|
-
export
|
|
38
|
+
export { ASSET_CLASSES, classifyAssetPath, isPublicAssetPath } from './storage/assetClasses.js';
|
|
39
|
+
export type { AssetVisibility, AssetScope, AssetClass, AssetMatch } from './storage/assetClasses.js';
|
|
40
|
+
export { withCacheBust } from './storage/cacheBust.js';
|
|
41
|
+
export type { IDataProvider, SchemaVersionReport } from './data/interface.js';
|
|
38
42
|
export type { ComputeServerConfig, ComputeConfig, PlatformComputeServer, OrgComputeServer } from './computeServer/types.js';
|
|
39
43
|
export { isPlatformServer, isOrgServer } from './computeServer/types.js';
|
|
40
44
|
export type { IComputeServerStore } from './computeServer/interface.js';
|
|
45
|
+
export type { SecretVerificationReport, SecretVerificationFailure, SecretVerificationFailureReason } from './computeServer/secrets.js';
|
|
41
46
|
export type { ResolveOptions } from './computeServer/utils.js';
|
|
42
47
|
export { serversVisibleTo, defaultServerIdFor, resolveServerForOrg, findServerById, platformServers, orgServersFor } from './computeServer/utils.js';
|
|
43
48
|
export type { ProjectAccessInput, DefinitionAccessInput, VisibilityChangeInput, ReclaimAccessInput, CreateProjectAccessInput, OwnerRemovalInput, OwnerRemovalCheck } from './access/rules.js';
|
|
@@ -47,12 +52,16 @@ export { actorFrom, NoopEventSink } from './events/interface.js';
|
|
|
47
52
|
export type { AuditEventRow, AuditCursor, AuditQueryFilters, AuditQueryResult, IAuditQuery } from './events/audit.js';
|
|
48
53
|
export type { ISolveMetricSink, SolveMetric, SolveFailureKind } from './metrics/interface.js';
|
|
49
54
|
export { NoopSolveMetricSink } from './metrics/interface.js';
|
|
55
|
+
export type { ISolveResultCache, SolveCacheKey, SolveCacheSetOptions } from './solveCache/interface.js';
|
|
56
|
+
export { NoopSolveResultCache } from './solveCache/interface.js';
|
|
57
|
+
export type { IErrorReporter, ErrorContext } from './errors/interface.js';
|
|
58
|
+
export { NoopErrorReporter } from './errors/interface.js';
|
|
50
59
|
export type { IBindingResolver } from './bindings/interface.js';
|
|
51
60
|
export { NoopBindingResolver } from './bindings/interface.js';
|
|
52
61
|
export type { AuditUpdate, AuditSoftDelete } from './utils/audit.js';
|
|
53
62
|
export { auditUpdate, auditSoftDelete } from './utils/audit.js';
|
|
54
63
|
export type { RequestContext } from './context.js';
|
|
55
|
-
export { SYSTEM_CONTEXT, hasPermission } from './context.js';
|
|
64
|
+
export { SYSTEM_CONTEXT, hasPermission, requireActingOrg } from './context.js';
|
|
56
65
|
export type { ListOptions, DefinitionListOptions, Page } from './pagination.js';
|
|
57
66
|
export { DEFAULT_PAGE_LIMIT, MAX_PAGE_LIMIT } from './pagination.js';
|
|
58
67
|
export type { TenancyMode, SelvaFlags, SelvaBranding, SelvaConfig, SelvaConfigFactory } from './config.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnF,YAAY,EACX,aAAa,EACb,UAAU,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,MAAM,qBAAqB,CAAC;AAK7B,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAC5F,YAAY,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAG3E,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// @selvajs/platform — published API contract. Every symbol here is breaking-change-protected.
|
|
2
2
|
export { PlatformPermissionSchema, ALL_PLATFORM_PERMISSIONS } from './permissions/types.js';
|
|
3
3
|
export { emptyProfile } from './userProfile/types.js';
|
|
4
|
-
export {
|
|
4
|
+
export { orgPaths } from './organizations/paths.js';
|
|
5
|
+
export { OrgRoleSchema, OrgPermissionSchema, OrgAssetKindSchema, ALL_ORG_ASSET_KINDS, SlugSchema, CreateOrgSchema, UpdateOrgSchema, ALL_ORG_PERMISSIONS, DEFAULT_ORG_PERMISSIONS, OWNER_ADMIN_ONLY_PERMISSIONS, MEMBER_ASSIGNABLE_PERMISSIONS } from './organizations/schemas.js';
|
|
5
6
|
export { ProjectVisibilitySchema, ProjectRoleSchema, validateProjectFlags } from './projects/schemas.js';
|
|
6
7
|
export { PlatformProjectGrantSchema, PlatformProjectGranteeTypeSchema } from './platformProjects/schemas.js';
|
|
7
8
|
export { GH_EXTENSIONS, COVER_IMAGE_EXTENSIONS, ALLOWED_UPLOAD_EXTENSIONS, COVER_IMAGE_CONTENT_TYPES } from './definitions/types.js';
|
|
@@ -10,14 +11,18 @@ export { DefinitionChannelSchema, PublishVersionInputSchema, CreateDefinitionInp
|
|
|
10
11
|
export { DEFAULT_SHARE_LINK_MAX_SOLVES } from './shareLinks/types.js';
|
|
11
12
|
export { CreateShareLinkInputSchema } from './shareLinks/schemas.js';
|
|
12
13
|
export { IMAGE_MAX_WIDTH, IMAGE_WEBP_QUALITY, isImageUpload, toWebpPath, transcodeImageIfNeeded } from './storage/image.js';
|
|
14
|
+
export { ASSET_CLASSES, classifyAssetPath, isPublicAssetPath } from './storage/assetClasses.js';
|
|
15
|
+
export { withCacheBust } from './storage/cacheBust.js';
|
|
13
16
|
export { isPlatformServer, isOrgServer } from './computeServer/types.js';
|
|
14
17
|
export { serversVisibleTo, defaultServerIdFor, resolveServerForOrg, findServerById, platformServers, orgServersFor } from './computeServer/utils.js';
|
|
15
18
|
export { canView, canSolve, canEdit, canManage, canEditProjectSettings, canChangeVisibilityToPublic, canEditDefinition, canReclaim, canCreateProject, checkOwnerRemoval, withAdminBypass } from './access/rules.js';
|
|
16
19
|
export { actorFrom, NoopEventSink } from './events/interface.js';
|
|
17
20
|
export { NoopSolveMetricSink } from './metrics/interface.js';
|
|
21
|
+
export { NoopSolveResultCache } from './solveCache/interface.js';
|
|
22
|
+
export { NoopErrorReporter } from './errors/interface.js';
|
|
18
23
|
export { NoopBindingResolver } from './bindings/interface.js';
|
|
19
24
|
export { auditUpdate, auditSoftDelete } from './utils/audit.js';
|
|
20
|
-
export { SYSTEM_CONTEXT, hasPermission } from './context.js';
|
|
25
|
+
export { SYSTEM_CONTEXT, hasPermission, requireActingOrg } from './context.js';
|
|
21
26
|
export { DEFAULT_PAGE_LIMIT, MAX_PAGE_LIMIT } from './pagination.js';
|
|
22
27
|
export { isFlagEnabled, defineConfig } from './config.js';
|
|
23
28
|
export { ProviderError } from './errors.js';
|