optio-api 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +32 -5
  2. package/dist/_generated/optio-engine.d.ts +8 -0
  3. package/dist/_generated/optio-engine.d.ts.map +1 -1
  4. package/dist/_generated/optio-engine.js +3 -0
  5. package/dist/_generated/optio-engine.js.map +1 -1
  6. package/dist/access-scope.d.ts +53 -0
  7. package/dist/access-scope.d.ts.map +1 -0
  8. package/dist/access-scope.js +110 -0
  9. package/dist/access-scope.js.map +1 -0
  10. package/dist/adapters/express.d.ts +5 -0
  11. package/dist/adapters/express.d.ts.map +1 -1
  12. package/dist/adapters/express.js +34 -22
  13. package/dist/adapters/express.js.map +1 -1
  14. package/dist/adapters/fastify.d.ts +5 -1
  15. package/dist/adapters/fastify.d.ts.map +1 -1
  16. package/dist/adapters/fastify.js +83 -32
  17. package/dist/adapters/fastify.js.map +1 -1
  18. package/dist/adapters/nextjs-app.d.ts +5 -0
  19. package/dist/adapters/nextjs-app.d.ts.map +1 -1
  20. package/dist/adapters/nextjs-app.js +43 -14
  21. package/dist/adapters/nextjs-app.js.map +1 -1
  22. package/dist/adapters/nextjs-pages.d.ts +5 -0
  23. package/dist/adapters/nextjs-pages.d.ts.map +1 -1
  24. package/dist/adapters/nextjs-pages.js +40 -14
  25. package/dist/adapters/nextjs-pages.js.map +1 -1
  26. package/dist/auth.d.ts +48 -0
  27. package/dist/auth.d.ts.map +1 -1
  28. package/dist/auth.js +44 -0
  29. package/dist/auth.js.map +1 -1
  30. package/dist/handlers.d.ts +44 -14
  31. package/dist/handlers.d.ts.map +1 -1
  32. package/dist/handlers.js +78 -20
  33. package/dist/handlers.js.map +1 -1
  34. package/dist/index.d.ts +3 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +5 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/stream-poller.d.ts +6 -1
  39. package/dist/stream-poller.d.ts.map +1 -1
  40. package/dist/stream-poller.js +24 -4
  41. package/dist/stream-poller.js.map +1 -1
  42. package/package.json +2 -2
@@ -8,7 +8,9 @@ import * as handlers from '../handlers.js';
8
8
  import { createListPoller, createTreePoller, createMultiTreePoller } from '../stream-poller.js';
9
9
  import { discoverInstances } from '../discovery.js';
10
10
  import { resolveDb } from '../resolve.js';
11
- import { checkAuth } from '../auth.js';
11
+ import { AsyncLocalStorage } from 'node:async_hooks';
12
+ import { accessFor, checkAuth, UNRESTRICTED, } from '../auth.js';
13
+ import { gateInstances, inScope } from '../access-scope.js';
12
14
  import { isWriteMethod } from '../widget-proxy-core.js';
13
15
  import { detectLegacyMetadataParams, formatLegacyMetadataMessage, } from '../metadata-filter-query.js';
14
16
  import { parseSseOptions, checkLegacyMetadataParams, LegacyMetadataParamError, } from '../sse-options.js';
@@ -30,50 +32,66 @@ export function createOptioHandler(opts) {
30
32
  dbOpts = 'mongoClient' in opts && opts.mongoClient ? { mongoClient: opts.mongoClient } : { db: opts.db };
31
33
  ctx = createOptioContext({ dbOpts, redis });
32
34
  }
35
+ // The request's access travels to the ts-rest routes in an
36
+ // AsyncLocalStorage set around the ts-rest call (as in nextjs-app).
37
+ const hooks = { scope: opts.scope, authorize: opts.authorize };
38
+ const requestAccess = new AsyncLocalStorage();
39
+ function currentAccess() {
40
+ const access = requestAccess.getStore();
41
+ if (access)
42
+ return access;
43
+ if (!hooks.scope && !hooks.authorize)
44
+ return UNRESTRICTED;
45
+ throw new Error('optio-api: route reached without the request\'s access');
46
+ }
33
47
  const tsRestHandler = createNextRouter(apiContract.processes, {
34
48
  list: async ({ query }) => {
35
- const result = await handlers.listProcesses(ctx, query);
49
+ const result = await handlers.listProcesses(ctx, query, await currentAccess());
36
50
  return { status: 200, body: result };
37
51
  },
38
52
  get: async ({ params, query }) => {
39
- const result = await handlers.getProcess(ctx, query, params.id);
53
+ const result = await handlers.getProcess(ctx, query, params.id, await currentAccess());
40
54
  if (!result)
41
55
  return { status: 404, body: { message: 'Process not found' } };
42
56
  return { status: 200, body: result };
43
57
  },
44
58
  getTree: async ({ params, query }) => {
45
- const result = await handlers.getProcessTree(ctx, query, params.id);
59
+ const result = await handlers.getProcessTree(ctx, query, params.id, await currentAccess());
46
60
  if (!result)
47
61
  return { status: 404, body: { message: 'Process not found' } };
48
62
  return { status: 200, body: result };
49
63
  },
50
64
  getLog: async ({ params, query }) => {
51
- const result = await handlers.getProcessLog(ctx, query, params.id);
65
+ const result = await handlers.getProcessLog(ctx, query, params.id, await currentAccess());
52
66
  if (!result)
53
67
  return { status: 404, body: { message: 'Process not found' } };
54
68
  return { status: 200, body: result };
55
69
  },
56
70
  getTreeLog: async ({ params, query }) => {
57
- const result = await handlers.getProcessTreeLog(ctx, query, params.id);
71
+ const result = await handlers.getProcessTreeLog(ctx, query, params.id, await currentAccess());
58
72
  if (!result)
59
73
  return { status: 404, body: { message: 'Process not found' } };
60
74
  return { status: 200, body: result };
61
75
  },
62
76
  launch: async ({ params, query, body }) => {
63
- const result = await handlers.launchProcess(ctx, query, params.id, body?.resume === true);
77
+ const result = await handlers.launchProcess(ctx, query, params.id, body?.resume === true, null, await currentAccess());
64
78
  return result;
65
79
  },
66
80
  cancel: async ({ params, query }) => {
67
- const result = await handlers.cancelProcess(ctx, query, params.id);
81
+ const result = await handlers.cancelProcess(ctx, query, params.id, await currentAccess());
68
82
  return result;
69
83
  },
70
84
  dismiss: async ({ params, query }) => {
71
- const result = await handlers.dismissProcess(ctx, query, params.id);
85
+ const result = await handlers.dismissProcess(ctx, query, params.id, await currentAccess());
86
+ return result;
87
+ },
88
+ resurrect: async ({ params, query, body }) => {
89
+ const result = await handlers.resurrectProcess(ctx, query, params.id, body?.sessionId ?? null, await currentAccess());
72
90
  return result;
73
91
  },
74
92
  resync: async ({ query, body }) => {
75
- const result = await handlers.resyncProcesses(ctx, query, body.clean, body.metadataFilter);
76
- return { status: 202, body: result };
93
+ const result = await handlers.resyncProcesses(ctx, query, body.clean, body.metadataFilter, await currentAccess());
94
+ return result;
77
95
  },
78
96
  });
79
97
  const handler = async (req, res) => {
@@ -82,6 +100,7 @@ export function createOptioHandler(opts) {
82
100
  res.status(authResult.status).json(authResult.body);
83
101
  return;
84
102
  }
103
+ const access = await accessFor(req, hooks);
85
104
  const url = req.url ?? '';
86
105
  const method = req.method ?? '';
87
106
  // Strip query string for path comparisons — req.url includes it on Pages Router.
@@ -96,6 +115,10 @@ export function createOptioHandler(opts) {
96
115
  }
97
116
  // Discovery endpoint: /api/optio/instances
98
117
  if (url === '/api/optio/instances' && method === 'GET') {
118
+ if (!(await gateInstances(access))) {
119
+ res.status(403).json({ message: 'Forbidden' });
120
+ return;
121
+ }
99
122
  const instances = await discoverInstances(dbOpts, redis);
100
123
  res.status(200).json({ instances });
101
124
  return;
@@ -114,7 +137,8 @@ export function createOptioHandler(opts) {
114
137
  }
115
138
  const { db, prefix } = resolveDb(dbOpts, sseOpts);
116
139
  const col = db.collection(`${prefix}_processes`);
117
- const proc = await col.findOne({ _id: new ObjectId(id) });
140
+ const found = await col.findOne({ _id: new ObjectId(id) });
141
+ const proc = found && (await inScope(col, found, access.scope)) ? found : null;
118
142
  if (!proc) {
119
143
  res.status(404).json({ message: 'Process not found' });
120
144
  return;
@@ -167,7 +191,8 @@ export function createOptioHandler(opts) {
167
191
  const col = db.collection(`${prefix}_processes`);
168
192
  async function resolveOne(id) {
169
193
  try {
170
- const proc = await col.findOne({ _id: new ObjectId(id) });
194
+ const found = await col.findOne({ _id: new ObjectId(id) });
195
+ const proc = found && (await inScope(col, found, access.scope)) ? found : null;
171
196
  return { id, proc };
172
197
  }
173
198
  catch {
@@ -254,13 +279,14 @@ export function createOptioHandler(opts) {
254
279
  sendEvent,
255
280
  onError: () => res.end(),
256
281
  metadataFilter: sseOpts.metadataFilter,
282
+ scope: access.scope,
257
283
  });
258
284
  poller.start();
259
285
  req.on('close', () => poller.stop());
260
286
  return;
261
287
  }
262
288
  // Delegate to ts-rest handler for all other routes
263
- return tsRestHandler(req, res);
289
+ return requestAccess.run(access, () => tsRestHandler(req, res));
264
290
  };
265
291
  return explicit ? { handler } : { handler, ctx };
266
292
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nextjs-pages.js","sourceRoot":"","sources":["../../src/adapters/nextjs-pages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nextjs-pages.js","sourceRoot":"","sources":["../../src/adapters/nextjs-pages.ts"],"names":[],"mappings":"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"}
package/dist/auth.d.ts CHANGED
@@ -7,4 +7,52 @@ export interface AuthResult {
7
7
  };
8
8
  }
9
9
  export declare function checkAuth<TRequest>(req: TRequest, authenticate: AuthCallback<TRequest>, isWrite: boolean): Promise<AuthResult | null>;
10
+ /** A flat exact-match metadata map: the tenant boundary a request is confined to. */
11
+ export type ScopeFilter = Record<string, string | number | boolean | null>;
12
+ export type OptioAction = 'read' | 'launch' | 'cancel' | 'dismiss' | 'resurrect' | 'resync' | 'widget' | 'widget-control' | 'widget-upload' | 'instances';
13
+ /** What `authorize` sees of a process. */
14
+ export interface ProcessRef {
15
+ _id: string;
16
+ processId: string;
17
+ name: string;
18
+ parentId?: string;
19
+ rootId: string;
20
+ metadata: Record<string, unknown>;
21
+ }
22
+ export interface AuthorizeInput {
23
+ role: OptioRole;
24
+ action: OptioAction;
25
+ /** The process a single-process action targets. */
26
+ process?: ProcessRef;
27
+ /** resync: the effective (scoped) filter. */
28
+ metadataFilter?: Record<string, unknown>;
29
+ /** resync: whether process records are deleted first. */
30
+ clean?: boolean;
31
+ }
32
+ /**
33
+ * Confines a request to processes whose `metadata` equals every key of the
34
+ * returned map. `null` (or an empty map) leaves the request unscoped.
35
+ */
36
+ export type ScopeCallback<TRequest> = (req: TRequest) => ScopeFilter | null | Promise<ScopeFilter | null>;
37
+ /** Decides a mutating action (and instance discovery); `false` gives 403. */
38
+ export type AuthorizeCallback<TRequest> = (req: TRequest, input: AuthorizeInput) => boolean | Promise<boolean>;
39
+ export interface AccessHooks<TRequest> {
40
+ scope?: ScopeCallback<TRequest>;
41
+ authorize?: AuthorizeCallback<TRequest>;
42
+ }
43
+ /** Framework-agnostic access for one request; handlers take this. */
44
+ export interface Access {
45
+ /** False when the host passed neither hook: handlers skip every check. */
46
+ restricted: boolean;
47
+ scope: ScopeFilter | null;
48
+ authorize(input: Omit<AuthorizeInput, 'role'>): Promise<boolean>;
49
+ }
50
+ export declare const UNRESTRICTED: Access;
51
+ export declare function resolveAccess<TRequest>(hooks: AccessHooks<TRequest>, req: TRequest, role: OptioRole): Promise<Access>;
52
+ /**
53
+ * The access of a request that already passed `checkAuth`, resolved once per
54
+ * request. Throws (synchronously) for a request `checkAuth` never accepted:
55
+ * that is an adapter wiring bug, and failing loudly beats guessing a role.
56
+ */
57
+ export declare function accessFor<TRequest extends object>(req: TRequest, hooks: AccessHooks<TRequest>): Promise<Access>;
10
58
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE9C,MAAM,MAAM,YAAY,CAAC,QAAQ,IAC/B,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAClB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3B;AAED,wBAAsB,SAAS,CAAC,QAAQ,EACtC,GAAG,EAAE,QAAQ,EACb,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,EACpC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAK5B"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
package/dist/auth.js CHANGED
@@ -1,9 +1,53 @@
1
+ // The role each authenticated request was given, for `accessFor`. Keyed by the
2
+ // framework-native request object, so it is collected with the request.
3
+ const requestRoles = new WeakMap();
1
4
  export async function checkAuth(req, authenticate, isWrite) {
2
5
  const role = await authenticate(req);
3
6
  if (role === null)
4
7
  return { status: 401, body: { message: 'Unauthorized' } };
5
8
  if (isWrite && role === 'viewer')
6
9
  return { status: 403, body: { message: 'Forbidden' } };
10
+ if (typeof req === 'object' && req !== null)
11
+ requestRoles.set(req, role);
7
12
  return null;
8
13
  }
14
+ export const UNRESTRICTED = Object.freeze({
15
+ restricted: false,
16
+ scope: null,
17
+ authorize: async () => true,
18
+ });
19
+ export async function resolveAccess(hooks, req, role) {
20
+ if (!hooks.scope && !hooks.authorize)
21
+ return UNRESTRICTED;
22
+ const raw = hooks.scope ? await hooks.scope(req) : null;
23
+ const scope = raw && Object.keys(raw).length > 0 ? raw : null;
24
+ const authorize = hooks.authorize;
25
+ return {
26
+ restricted: true,
27
+ scope,
28
+ authorize: authorize
29
+ ? async (input) => (await authorize(req, { ...input, role })) === true
30
+ : async () => true,
31
+ };
32
+ }
33
+ const requestAccess = new WeakMap();
34
+ /**
35
+ * The access of a request that already passed `checkAuth`, resolved once per
36
+ * request. Throws (synchronously) for a request `checkAuth` never accepted:
37
+ * that is an adapter wiring bug, and failing loudly beats guessing a role.
38
+ */
39
+ export function accessFor(req, hooks) {
40
+ if (!hooks.scope && !hooks.authorize)
41
+ return Promise.resolve(UNRESTRICTED);
42
+ const cached = requestAccess.get(req);
43
+ if (cached)
44
+ return cached;
45
+ const role = requestRoles.get(req);
46
+ if (role === undefined) {
47
+ throw new Error('optio-api: accessFor called before checkAuth accepted the request');
48
+ }
49
+ const access = resolveAccess(hooks, req, role);
50
+ requestAccess.set(req, access);
51
+ return access;
52
+ }
9
53
  //# sourceMappingURL=auth.js.map
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAa,EACb,YAAoC,EACpC,OAAgB;IAEhB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC;IAC7E,IAAI,OAAO,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC;IACzF,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAUA,+EAA+E;AAC/E,wEAAwE;AACxE,MAAM,YAAY,GAAG,IAAI,OAAO,EAAqB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAa,EACb,YAAoC,EACpC,OAAgB;IAEhB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC;IAC7E,IAAI,OAAO,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC;IACzF,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC;AACd,CAAC;AA0DD,MAAM,CAAC,MAAM,YAAY,GAAW,MAAM,CAAC,MAAM,CAAC;IAChD,UAAU,EAAE,KAAK;IACjB,KAAK,EAAE,IAAI;IACX,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAA4B,EAC5B,GAAa,EACb,IAAe;IAEf,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO,YAAY,CAAC;IAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,MAAM,KAAK,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,OAAO;QACL,UAAU,EAAE,IAAI;QAChB,KAAK;QACL,SAAS,EAAE,SAAS;YAClB,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI;YACtE,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG,IAAI,OAAO,EAA2B,CAAC;AAE7D;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,GAAa,EACb,KAA4B;IAE5B,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/C,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { ProcessMetadataFilter } from './types.js';
2
2
  import type { OptioContext } from './context.js';
3
- import type { LaunchFailureReason as LaunchFailureReasonType, CancelFailureReason as CancelFailureReasonType, DismissFailureReason as DismissFailureReasonType } from 'optio-contracts';
3
+ import { type Access } from './auth.js';
4
+ import type { LaunchFailureReason as LaunchFailureReasonType, CancelFailureReason as CancelFailureReasonType, DismissFailureReason as DismissFailureReasonType, ResurrectFailureReason as ResurrectFailureReasonType } from 'optio-contracts';
4
5
  export interface ListQuery {
5
6
  cursor?: string;
6
7
  limit: number;
@@ -12,7 +13,7 @@ export interface ListProcessesQuery extends ListQuery {
12
13
  database?: string;
13
14
  prefix?: string;
14
15
  }
15
- export declare function listProcesses(ctx: OptioContext, query: ListProcessesQuery): Promise<{
16
+ export declare function listProcesses(ctx: OptioContext, query: ListProcessesQuery, access?: Access): Promise<{
16
17
  items: {
17
18
  _id: any;
18
19
  parentId: any;
@@ -24,7 +25,7 @@ export declare function listProcesses(ctx: OptioContext, query: ListProcessesQue
24
25
  export declare function getProcess(ctx: OptioContext, query: {
25
26
  database?: string;
26
27
  prefix?: string;
27
- }, id: string): Promise<{
28
+ }, id: string, access?: Access): Promise<{
28
29
  _id: any;
29
30
  parentId: any;
30
31
  rootId: any;
@@ -33,7 +34,7 @@ export declare function getProcessTree(ctx: OptioContext, query: {
33
34
  database?: string;
34
35
  prefix?: string;
35
36
  maxDepth?: number;
36
- }, id: string): Promise<any>;
37
+ }, id: string, access?: Access): Promise<any>;
37
38
  export interface PaginationQuery {
38
39
  cursor?: string;
39
40
  limit: number;
@@ -42,7 +43,7 @@ export interface GetProcessLogQuery extends PaginationQuery {
42
43
  database?: string;
43
44
  prefix?: string;
44
45
  }
45
- export declare function getProcessLog(ctx: OptioContext, query: GetProcessLogQuery, id: string): Promise<{
46
+ export declare function getProcessLog(ctx: OptioContext, query: GetProcessLogQuery, id: string, access?: Access): Promise<{
46
47
  items: any;
47
48
  nextCursor: string | null;
48
49
  totalCount: any;
@@ -54,11 +55,17 @@ export interface GetProcessTreeLogQuery extends TreeLogQuery {
54
55
  database?: string;
55
56
  prefix?: string;
56
57
  }
57
- export declare function getProcessTreeLog(ctx: OptioContext, query: GetProcessTreeLogQuery, id: string): Promise<{
58
+ export declare function getProcessTreeLog(ctx: OptioContext, query: GetProcessTreeLogQuery, id: string, access?: Access): Promise<{
58
59
  items: any[];
59
60
  nextCursor: string | null;
60
61
  totalCount: number;
61
62
  } | null>;
63
+ export type ForbiddenResult = {
64
+ status: 403;
65
+ body: {
66
+ message: string;
67
+ };
68
+ };
62
69
  export type LaunchCommandResult = {
63
70
  status: 200;
64
71
  body: any;
@@ -68,7 +75,7 @@ export type LaunchCommandResult = {
68
75
  reason: LaunchFailureReasonType;
69
76
  message: string;
70
77
  };
71
- };
78
+ } | ForbiddenResult;
72
79
  export type CancelCommandResult = {
73
80
  status: 200;
74
81
  body: any;
@@ -78,7 +85,7 @@ export type CancelCommandResult = {
78
85
  reason: CancelFailureReasonType;
79
86
  message: string;
80
87
  };
81
- };
88
+ } | ForbiddenResult;
82
89
  export type DismissCommandResult = {
83
90
  status: 200;
84
91
  body: any;
@@ -88,23 +95,46 @@ export type DismissCommandResult = {
88
95
  reason: DismissFailureReasonType;
89
96
  message: string;
90
97
  };
98
+ } | ForbiddenResult;
99
+ export type ResurrectCommandResult = {
100
+ status: 200;
101
+ body: any;
102
+ } | {
103
+ status: 404 | 409;
104
+ body: {
105
+ reason: ResurrectFailureReasonType;
106
+ message: string;
107
+ };
108
+ } | ForbiddenResult;
109
+ export type ResyncCommandResult = {
110
+ status: 202;
111
+ body: {
112
+ message: string;
113
+ };
114
+ } | {
115
+ status: 400 | 403;
116
+ body: {
117
+ message: string;
118
+ };
91
119
  };
92
120
  export declare function launchProcess(ctx: OptioContext, query: {
93
121
  database?: string;
94
122
  prefix?: string;
95
- }, id: string, resume?: boolean, sessionId?: string | null): Promise<LaunchCommandResult>;
123
+ }, id: string, resume?: boolean, sessionId?: string | null, access?: Access): Promise<LaunchCommandResult>;
96
124
  export declare function cancelProcess(ctx: OptioContext, query: {
97
125
  database?: string;
98
126
  prefix?: string;
99
- }, id: string): Promise<CancelCommandResult>;
127
+ }, id: string, access?: Access): Promise<CancelCommandResult>;
100
128
  export declare function dismissProcess(ctx: OptioContext, query: {
101
129
  database?: string;
102
130
  prefix?: string;
103
- }, id: string): Promise<DismissCommandResult>;
131
+ }, id: string, access?: Access): Promise<DismissCommandResult>;
132
+ export declare function resurrectProcess(ctx: OptioContext, query: {
133
+ database?: string;
134
+ prefix?: string;
135
+ }, id: string, sessionId?: string | null, access?: Access): Promise<ResurrectCommandResult>;
104
136
  export declare function resyncProcesses(ctx: OptioContext, query: {
105
137
  database?: string;
106
138
  prefix?: string;
107
- }, clean?: boolean, metadataFilter?: ProcessMetadataFilter): Promise<{
108
- message: string;
109
- }>;
139
+ }, clean?: boolean, metadataFilter?: ProcessMetadataFilter, access?: Access): Promise<ResyncCommandResult>;
110
140
  //# sourceMappingURL=handlers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
package/dist/handlers.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { ObjectId } from 'mongodb';
2
2
  import { metadataFilterToMongo } from './metadata-filter-query.js';
3
- import { findProcessByEitherId } from './process-id-resolver.js';
4
3
  import { resolveDb, resolveOptioEngine } from './resolve.js';
4
+ import { UNRESTRICTED } from './auth.js';
5
+ import { andScope, findScopedProcess, gateProcess, scopedResyncFilter } from './access-scope.js';
5
6
  function col(db, prefix) {
6
7
  return db.collection(`${prefix}_processes`);
7
8
  }
@@ -18,12 +19,10 @@ function toResponse(proc) {
18
19
  rootId: proc.rootId.toString(),
19
20
  };
20
21
  }
21
- export async function listProcesses(ctx, query) {
22
+ export async function listProcesses(ctx, query, access = UNRESTRICTED) {
22
23
  const { db, prefix } = resolveDb(ctx.dbOpts, query);
23
24
  const { cursor, limit, rootId, state, metadataFilter } = query;
24
- const filter = {
25
- ...metadataFilterToMongo(metadataFilter),
26
- };
25
+ const filter = andScope({ ...metadataFilterToMongo(metadataFilter) }, access.scope);
27
26
  if (rootId)
28
27
  filter.rootId = new ObjectId(rootId);
29
28
  if (state)
@@ -43,9 +42,9 @@ export async function listProcesses(ctx, query) {
43
42
  totalCount,
44
43
  };
45
44
  }
46
- export async function getProcess(ctx, query, id) {
45
+ export async function getProcess(ctx, query, id, access = UNRESTRICTED) {
47
46
  const { db, prefix } = resolveDb(ctx.dbOpts, query);
48
- const proc = await findProcessByEitherId(col(db, prefix), id);
47
+ const proc = await findScopedProcess(col(db, prefix), id, access.scope);
49
48
  if (!proc)
50
49
  return null;
51
50
  return toResponse(proc);
@@ -73,19 +72,20 @@ async function buildTree(db, prefix, processId, maxDepth, currentDepth = 0) {
73
72
  children,
74
73
  };
75
74
  }
76
- export async function getProcessTree(ctx, query, id) {
75
+ export async function getProcessTree(ctx, query, id, access = UNRESTRICTED) {
77
76
  const { db, prefix } = resolveDb(ctx.dbOpts, query);
78
77
  // Resolve the entry-point doc first so we can accept either id form.
79
78
  // Internal recursion in `buildTree` walks via `parentId` ObjectId
80
- // references and does not need the lookup helper.
81
- const entry = await findProcessByEitherId(col(db, prefix), id);
79
+ // references and does not need the lookup helper; the whole tree shares
80
+ // the entry point's tenant, so the scope is checked there only.
81
+ const entry = await findScopedProcess(col(db, prefix), id, access.scope);
82
82
  if (!entry)
83
83
  return null;
84
84
  return buildTree(db, prefix, entry._id, query.maxDepth);
85
85
  }
86
- export async function getProcessLog(ctx, query, id) {
86
+ export async function getProcessLog(ctx, query, id, access = UNRESTRICTED) {
87
87
  const { db, prefix } = resolveDb(ctx.dbOpts, query);
88
- const proc = await findProcessByEitherId(col(db, prefix), id);
88
+ const proc = await findScopedProcess(col(db, prefix), id, access.scope);
89
89
  if (!proc)
90
90
  return null;
91
91
  const { cursor, limit } = query;
@@ -100,9 +100,9 @@ export async function getProcessLog(ctx, query, id) {
100
100
  totalCount: proc.log.length,
101
101
  };
102
102
  }
103
- export async function getProcessTreeLog(ctx, query, id) {
103
+ export async function getProcessTreeLog(ctx, query, id, access = UNRESTRICTED) {
104
104
  const { db, prefix } = resolveDb(ctx.dbOpts, query);
105
- const proc = await findProcessByEitherId(col(db, prefix), id);
105
+ const proc = await findScopedProcess(col(db, prefix), id, access.scope);
106
106
  if (!proc)
107
107
  return null;
108
108
  const { maxDepth, cursor, limit } = query;
@@ -128,6 +128,7 @@ export async function getProcessTreeLog(ctx, query, id) {
128
128
  totalCount: allLogs.length,
129
129
  };
130
130
  }
131
+ const FORBIDDEN = { status: 403, body: { message: 'Forbidden' } };
131
132
  const LAUNCH_STATUS = {
132
133
  'not-found': 404,
133
134
  'not-launchable': 409,
@@ -159,30 +160,87 @@ function cancelFail(reason) {
159
160
  function dismissFail(reason) {
160
161
  return { status: DISMISS_STATUS[reason], body: { reason, message: MESSAGES[reason] } };
161
162
  }
162
- export async function launchProcess(ctx, query, id, resume = false, sessionId = null) {
163
+ export async function launchProcess(ctx, query, id, resume = false, sessionId = null, access = UNRESTRICTED) {
164
+ const { db, prefix } = resolveDb(ctx.dbOpts, query);
165
+ const gate = await gateProcess(col(db, prefix), id, access, 'launch');
166
+ if (!gate.ok)
167
+ return gate.status === 404 ? launchFail('not-found') : FORBIDDEN;
163
168
  const engine = resolveOptioEngine(ctx, query);
164
169
  const result = await engine.launch({ processId: id, resume, sessionId });
165
170
  if (result.ok)
166
171
  return { status: 200, body: toResponse(result.process) };
167
172
  return launchFail(result.reason);
168
173
  }
169
- export async function cancelProcess(ctx, query, id) {
174
+ export async function cancelProcess(ctx, query, id, access = UNRESTRICTED) {
175
+ const { db, prefix } = resolveDb(ctx.dbOpts, query);
176
+ const gate = await gateProcess(col(db, prefix), id, access, 'cancel');
177
+ if (!gate.ok)
178
+ return gate.status === 404 ? cancelFail('not-found') : FORBIDDEN;
170
179
  const engine = resolveOptioEngine(ctx, query);
171
180
  const result = await engine.cancel({ processId: id });
172
181
  if (result.ok)
173
182
  return { status: 200, body: toResponse(result.process) };
174
183
  return cancelFail(result.reason);
175
184
  }
176
- export async function dismissProcess(ctx, query, id) {
185
+ export async function dismissProcess(ctx, query, id, access = UNRESTRICTED) {
186
+ const { db, prefix } = resolveDb(ctx.dbOpts, query);
187
+ const gate = await gateProcess(col(db, prefix), id, access, 'dismiss');
188
+ if (!gate.ok)
189
+ return gate.status === 404 ? dismissFail('not-found') : FORBIDDEN;
177
190
  const engine = resolveOptioEngine(ctx, query);
178
191
  const result = await engine.dismiss({ processId: id });
179
192
  if (result.ok)
180
193
  return { status: 200, body: toResponse(result.process) };
181
194
  return dismissFail(result.reason);
182
195
  }
183
- export async function resyncProcesses(ctx, query, clean = false, metadataFilter) {
196
+ const RESURRECT_STATUS = {
197
+ 'not-found': 404,
198
+ 'not-resurrectable': 409,
199
+ 'no-resurrect-support': 409,
200
+ 'resurrect-in-progress': 409,
201
+ 'launch-blocked': 409,
202
+ 'shutting-down': 409,
203
+ };
204
+ const RESURRECT_MESSAGES = {
205
+ 'not-found': 'Process not found',
206
+ 'not-resurrectable': 'Process has no unsaved work to resurrect, or is still active',
207
+ 'no-resurrect-support': 'This task does not support resurrect',
208
+ 'resurrect-in-progress': 'A resurrect of this process is already running',
209
+ 'launch-blocked': 'Launches matching this filter are currently blocked',
210
+ 'shutting-down': 'The engine is shutting down',
211
+ };
212
+ function resurrectFail(reason) {
213
+ return { status: RESURRECT_STATUS[reason], body: { reason, message: RESURRECT_MESSAGES[reason] } };
214
+ }
215
+ export async function resurrectProcess(ctx, query, id, sessionId = null, access = UNRESTRICTED) {
216
+ const { db, prefix } = resolveDb(ctx.dbOpts, query);
217
+ const gate = await gateProcess(col(db, prefix), id, access, 'resurrect');
218
+ if (!gate.ok)
219
+ return gate.status === 404 ? resurrectFail('not-found') : FORBIDDEN;
184
220
  const engine = resolveOptioEngine(ctx, query);
185
- await engine.resync({ clean, metadataFilter });
186
- return { message: clean ? 'Nuke and resync requested' : 'Resync requested' };
221
+ const result = await engine.resurrect({ processId: id, sessionId });
222
+ if (result.ok)
223
+ return { status: 200, body: toResponse(result.process) };
224
+ return resurrectFail(result.reason);
225
+ }
226
+ export async function resyncProcesses(ctx, query, clean = false, metadataFilter, access = UNRESTRICTED) {
227
+ // Under a scope the engine regenerates (and prunes) only the scope's tasks.
228
+ const scoped = scopedResyncFilter(metadataFilter, access.scope);
229
+ if (!scoped.ok)
230
+ return { status: scoped.status, body: { message: scoped.message } };
231
+ if (access.restricted
232
+ && !(await access.authorize({
233
+ action: 'resync',
234
+ clean,
235
+ metadataFilter: scoped.filter,
236
+ }))) {
237
+ return FORBIDDEN;
238
+ }
239
+ const engine = resolveOptioEngine(ctx, query);
240
+ await engine.resync({ clean, metadataFilter: scoped.filter });
241
+ return {
242
+ status: 202,
243
+ body: { message: clean ? 'Nuke and resync requested' : 'Resync requested' },
244
+ };
187
245
  }
188
246
  //# sourceMappingURL=handlers.js.map