@plandesk/api 1.0.0-beta.8 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-keys.d.ts +26 -2
- package/dist/agent-keys.js +22 -2
- package/dist/auth-context.d.ts +17 -1
- package/dist/auth.d.ts +10 -0
- package/dist/auth.js +25 -6
- package/dist/better-auth.js +4 -3
- package/dist/identity.d.ts +34 -0
- package/dist/identity.js +190 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/invitations.d.ts +13 -2
- package/dist/invitations.js +14 -2
- package/dist/organizations.d.ts +3 -0
- package/dist/organizations.js +18 -0
- package/dist/projection.d.ts +28 -0
- package/dist/projection.js +29 -1
- package/dist/routes/auth.js +21 -5
- package/dist/routes/comments.js +3 -1
- package/dist/routes/orgs.js +139 -24
- package/dist/routes/projects.js +36 -5
- package/dist/routes/shares.js +32 -0
- package/dist/routes/tasks.js +3 -0
- package/dist/serialize.d.ts +2 -0
- package/dist/serialize.js +1 -0
- package/dist/server.js +9 -6
- package/dist/services/agent-runs.js +18 -0
- package/dist/services/artifacts.js +18 -0
- package/dist/services/canvas.js +9 -0
- package/dist/services/comments.js +63 -13
- package/dist/services/documents.js +36 -0
- package/dist/services/files.js +19 -1
- package/dist/services/folders.js +27 -0
- package/dist/services/goals.js +45 -0
- package/dist/services/index.d.ts +3 -0
- package/dist/services/index.js +1 -1
- package/dist/services/notes.js +27 -0
- package/dist/services/projects.d.ts +27 -0
- package/dist/services/projects.js +113 -4
- package/dist/services/scope.d.ts +4 -0
- package/dist/services/scope.js +22 -0
- package/dist/services/share.d.ts +25 -3
- package/dist/services/share.js +160 -9
- package/dist/services/sync.d.ts +1 -1
- package/dist/services/sync.js +52 -1
- package/dist/services/tags.js +18 -0
- package/dist/services/tasks.d.ts +1 -1
- package/dist/services/tasks.js +22 -0
- package/dist/test-helpers.d.ts +1 -0
- package/dist/test-helpers.js +14 -0
- package/dist/vercel.js +9 -1
- package/dist/worker.js +1 -1
- package/package.json +3 -3
- package/web/assets/index-BBNvafSX.js +358 -0
- package/web/assets/index-BqoMRSUH.css +2 -0
- package/web/index.html +2 -2
- package/web/assets/index-aQ0kLFAX.js +0 -358
- package/web/assets/index-nXT4L9C-.css +0 -2
package/dist/services/tasks.d.ts
CHANGED
|
@@ -109,7 +109,7 @@ export declare function createTaskService(deps: TaskServiceDeps): {
|
|
|
109
109
|
updated_at: string;
|
|
110
110
|
} | undefined>;
|
|
111
111
|
delete(id: string): Promise<boolean>;
|
|
112
|
-
claim(taskId: string, agentRef: string): Promise<ClaimTaskResult>;
|
|
112
|
+
claim(taskId: string, agentRef: string): Promise<ClaimTaskResult | undefined>;
|
|
113
113
|
nextActionable(projectId: string, filter?: {
|
|
114
114
|
goalId?: string;
|
|
115
115
|
tags?: string[];
|
package/dist/services/tasks.js
CHANGED
|
@@ -43,6 +43,15 @@ export function createTaskService(deps) {
|
|
|
43
43
|
if (!task) {
|
|
44
44
|
return undefined;
|
|
45
45
|
}
|
|
46
|
+
try {
|
|
47
|
+
await assertProjectInOrg(db, task.projectId, resolveOrgId(deps));
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (error instanceof ProjectNotInOrgError) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
46
55
|
return serializeTask(task, await listTagsForTask(db, id));
|
|
47
56
|
},
|
|
48
57
|
async listByProject(projectId, filter = {}, pagination = {}) {
|
|
@@ -166,6 +175,19 @@ export function createTaskService(deps) {
|
|
|
166
175
|
},
|
|
167
176
|
async claim(taskId, agentRef) {
|
|
168
177
|
assertPermission(deps, 'task', 'update');
|
|
178
|
+
const existing = await getTask(db, taskId);
|
|
179
|
+
if (!existing) {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
await assertProjectInOrg(db, existing.projectId, resolveOrgId(deps));
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
if (error instanceof ProjectNotInOrgError) {
|
|
187
|
+
return undefined;
|
|
188
|
+
}
|
|
189
|
+
throw error;
|
|
190
|
+
}
|
|
169
191
|
const row = await claimTask(db, taskId, resolveOrgId(deps), agentRef);
|
|
170
192
|
if (!row) {
|
|
171
193
|
return { claimed: false, reason: 'taken_or_not_actionable' };
|
package/dist/test-helpers.d.ts
CHANGED
package/dist/test-helpers.js
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { createDb, DEFAULT_ORG_ID, migrate } from '@plandesk/db';
|
|
3
3
|
import { createApp } from './server.js';
|
|
4
|
+
import { createBetterAuth, runBetterAuthMigrations } from './better-auth.js';
|
|
5
|
+
import { ensureLocalBetterAuthOrganization } from './identity.js';
|
|
6
|
+
const TEST_SECRET = 'test-secret-not-a-real-one-0123456789abcdef';
|
|
7
|
+
const TEST_BASE_URL = 'http://localhost:3000';
|
|
4
8
|
export async function createTestApp(opts) {
|
|
5
9
|
const db = await createDb(':memory:');
|
|
6
10
|
await migrate(db);
|
|
11
|
+
const auth = createBetterAuth({
|
|
12
|
+
client: db.$client,
|
|
13
|
+
secret: TEST_SECRET,
|
|
14
|
+
baseURL: TEST_BASE_URL,
|
|
15
|
+
});
|
|
16
|
+
if (auth !== undefined) {
|
|
17
|
+
await runBetterAuthMigrations(auth);
|
|
18
|
+
await ensureLocalBetterAuthOrganization(db, auth);
|
|
19
|
+
}
|
|
7
20
|
return {
|
|
8
21
|
app: createApp({
|
|
9
22
|
db,
|
|
10
23
|
authPassword: opts?.authPassword,
|
|
11
24
|
bindHost: opts?.bindHost ?? '127.0.0.1',
|
|
12
25
|
github: opts?.github,
|
|
26
|
+
betterAuth: { secret: TEST_SECRET, baseURL: TEST_BASE_URL },
|
|
13
27
|
}),
|
|
14
28
|
db,
|
|
15
29
|
orgId: DEFAULT_ORG_ID,
|
package/dist/vercel.js
CHANGED
|
@@ -9,6 +9,7 @@ import { createApp } from './server.js';
|
|
|
9
9
|
import { createServices } from './services/index.js';
|
|
10
10
|
import { githubConfigFromEnv } from './github.js';
|
|
11
11
|
import { createStorageAdapter } from './storage/index.js';
|
|
12
|
+
import { createBetterAuth } from './better-auth.js';
|
|
12
13
|
import { hostedMisconfigResponse, resolveHostedBetterAuth } from './hosted-auth.js';
|
|
13
14
|
let appPromise;
|
|
14
15
|
function vercelBaseUrlFallback() {
|
|
@@ -32,9 +33,16 @@ async function getApp() {
|
|
|
32
33
|
PLANDESK_BASE_URL: process.env.PLANDESK_BASE_URL ?? vercelBaseUrlFallback(),
|
|
33
34
|
});
|
|
34
35
|
const db = await createDb(url, process.env.PLANDESK_DB_TOKEN);
|
|
36
|
+
const auth = createBetterAuth({
|
|
37
|
+
client: db.$client,
|
|
38
|
+
db,
|
|
39
|
+
secret: betterAuth.secret,
|
|
40
|
+
baseURL: betterAuth.baseURL,
|
|
41
|
+
github: githubConfigFromEnv(process.env),
|
|
42
|
+
});
|
|
35
43
|
// Select s3 via PLANDESK_STORAGE=s3 (+ S3_* env); local remains default when unset.
|
|
36
44
|
const storage = createStorageAdapter({ db, env: process.env });
|
|
37
|
-
const services = createServices({ db, storage });
|
|
45
|
+
const services = createServices({ db, auth, storage });
|
|
38
46
|
return createApp({
|
|
39
47
|
db,
|
|
40
48
|
services,
|
package/dist/worker.js
CHANGED
|
@@ -112,7 +112,7 @@ export default {
|
|
|
112
112
|
// Storage is optional: prefer R2 binding, then S3 creds, else unavailable
|
|
113
113
|
// (file uploads/artifacts off — no crash). Mirrors `plandesk serve`.
|
|
114
114
|
const storage = resolveWorkerStorage(env, db);
|
|
115
|
-
const services = createServices({ db, ...(storage !== undefined ? { storage } : {}) });
|
|
115
|
+
const services = createServices({ db, auth: authInstance, ...(storage !== undefined ? { storage } : {}) });
|
|
116
116
|
const app = createApp({
|
|
117
117
|
db,
|
|
118
118
|
services,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plandesk/api",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"@libsql/kysely-libsql": "^0.4.1",
|
|
27
27
|
"better-auth": "1.6.23",
|
|
28
28
|
"hono": "^4.12.23",
|
|
29
|
-
"@plandesk/db": "1.0.0
|
|
29
|
+
"@plandesk/db": "1.0.0"
|
|
30
30
|
},
|
|
31
31
|
"description": "Plan Desk REST + SSE API and service layer (local-first planning workspace).",
|
|
32
32
|
"license": "MIT",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"tasks"
|
|
49
49
|
],
|
|
50
50
|
"scripts": {
|
|
51
|
-
"build": "rm -rf dist && tsc -p tsconfig.json",
|
|
51
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json",
|
|
52
52
|
"test": "vitest run",
|
|
53
53
|
"lint": "eslint src"
|
|
54
54
|
}
|