optio-api 0.1.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.
Files changed (79) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +244 -0
  3. package/dist/_generated/optio-engine.d.ts +69 -0
  4. package/dist/_generated/optio-engine.d.ts.map +1 -0
  5. package/dist/_generated/optio-engine.js +31 -0
  6. package/dist/_generated/optio-engine.js.map +1 -0
  7. package/dist/adapters/express.d.ts +24 -0
  8. package/dist/adapters/express.d.ts.map +1 -0
  9. package/dist/adapters/express.js +186 -0
  10. package/dist/adapters/express.js.map +1 -0
  11. package/dist/adapters/fastify.d.ts +38 -0
  12. package/dist/adapters/fastify.d.ts.map +1 -0
  13. package/dist/adapters/fastify.js +473 -0
  14. package/dist/adapters/fastify.js.map +1 -0
  15. package/dist/adapters/nextjs-app.d.ts +29 -0
  16. package/dist/adapters/nextjs-app.d.ts.map +1 -0
  17. package/dist/adapters/nextjs-app.js +220 -0
  18. package/dist/adapters/nextjs-app.js.map +1 -0
  19. package/dist/adapters/nextjs-pages.d.ts +29 -0
  20. package/dist/adapters/nextjs-pages.d.ts.map +1 -0
  21. package/dist/adapters/nextjs-pages.js +189 -0
  22. package/dist/adapters/nextjs-pages.js.map +1 -0
  23. package/dist/auth.d.ts +10 -0
  24. package/dist/auth.d.ts.map +1 -0
  25. package/dist/auth.js +9 -0
  26. package/dist/auth.js.map +1 -0
  27. package/dist/context.d.ts +14 -0
  28. package/dist/context.d.ts.map +1 -0
  29. package/dist/context.js +13 -0
  30. package/dist/context.js.map +1 -0
  31. package/dist/discovery.d.ts +10 -0
  32. package/dist/discovery.d.ts.map +1 -0
  33. package/dist/discovery.js +48 -0
  34. package/dist/discovery.js.map +1 -0
  35. package/dist/handlers.d.ts +110 -0
  36. package/dist/handlers.d.ts.map +1 -0
  37. package/dist/handlers.js +188 -0
  38. package/dist/handlers.js.map +1 -0
  39. package/dist/index.d.ts +10 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +22 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/metadata-filter-query.d.ts +13 -0
  44. package/dist/metadata-filter-query.d.ts.map +1 -0
  45. package/dist/metadata-filter-query.js +36 -0
  46. package/dist/metadata-filter-query.js.map +1 -0
  47. package/dist/optio-transports.d.ts +8 -0
  48. package/dist/optio-transports.d.ts.map +1 -0
  49. package/dist/optio-transports.js +37 -0
  50. package/dist/optio-transports.js.map +1 -0
  51. package/dist/process-id-resolver.d.ts +26 -0
  52. package/dist/process-id-resolver.d.ts.map +1 -0
  53. package/dist/process-id-resolver.js +31 -0
  54. package/dist/process-id-resolver.js.map +1 -0
  55. package/dist/resolve.d.ts +25 -0
  56. package/dist/resolve.d.ts.map +1 -0
  57. package/dist/resolve.js +16 -0
  58. package/dist/resolve.js.map +1 -0
  59. package/dist/sse-options.d.ts +28 -0
  60. package/dist/sse-options.d.ts.map +1 -0
  61. package/dist/sse-options.js +82 -0
  62. package/dist/sse-options.js.map +1 -0
  63. package/dist/stream-poller.d.ts +21 -0
  64. package/dist/stream-poller.d.ts.map +1 -0
  65. package/dist/stream-poller.js +146 -0
  66. package/dist/stream-poller.js.map +1 -0
  67. package/dist/types.d.ts +2 -0
  68. package/dist/types.d.ts.map +1 -0
  69. package/dist/types.js +2 -0
  70. package/dist/types.js.map +1 -0
  71. package/dist/widget-proxy-core.d.ts +7 -0
  72. package/dist/widget-proxy-core.d.ts.map +1 -0
  73. package/dist/widget-proxy-core.js +56 -0
  74. package/dist/widget-proxy-core.js.map +1 -0
  75. package/dist/widget-upstream-registry.d.ts +27 -0
  76. package/dist/widget-upstream-registry.d.ts.map +1 -0
  77. package/dist/widget-upstream-registry.js +28 -0
  78. package/dist/widget-upstream-registry.js.map +1 -0
  79. package/package.json +100 -0
@@ -0,0 +1,186 @@
1
+ // @ts-nocheck — type inference for ts-rest router handlers requires the full
2
+ // monorepo type resolution. The adapter is tested via API integration tests.
3
+ import { createExpressEndpoints } from '@ts-rest/express';
4
+ import { initContract } from '@ts-rest/core';
5
+ import { processesContract } from 'optio-contracts';
6
+ import * as handlers from '../handlers.js';
7
+ import { findProcessByEitherId } from '../process-id-resolver.js';
8
+ import { createListPoller, createTreePoller } from '../stream-poller.js';
9
+ import { detectLegacyMetadataParams, formatLegacyMetadataMessage } from '../metadata-filter-query.js';
10
+ import { parseSseOptions, checkLegacyMetadataParams, LegacyMetadataParamError } from '../sse-options.js';
11
+ import { discoverInstances } from '../discovery.js';
12
+ import { resolveDb } from '../resolve.js';
13
+ import { checkAuth } from '../auth.js';
14
+ import { isWriteMethod } from '../widget-proxy-core.js';
15
+ import { createOptioContext } from '../context.js';
16
+ const c = initContract();
17
+ const apiContract = c.router({ processes: processesContract }, { pathPrefix: '/api' });
18
+ export function registerOptioApi(app, opts) {
19
+ const explicit = 'ctx' in opts;
20
+ let ctx;
21
+ let redis;
22
+ let dbOpts;
23
+ if (explicit) {
24
+ ctx = opts.ctx;
25
+ dbOpts = ctx.dbOpts;
26
+ redis = ctx.redis;
27
+ }
28
+ else {
29
+ redis = opts.redis;
30
+ dbOpts = 'mongoClient' in opts && opts.mongoClient ? { mongoClient: opts.mongoClient } : { db: opts.db };
31
+ ctx = createOptioContext({ dbOpts, redis });
32
+ }
33
+ // Global auth enforcement. Runs on every /api/* request before any
34
+ // ts-rest, SSE, or discovery handler.
35
+ app.use('/api', async (req, res, next) => {
36
+ const authResult = await checkAuth(req, opts.authenticate, isWriteMethod(req.method));
37
+ if (authResult) {
38
+ res.status(authResult.status).json(authResult.body);
39
+ return;
40
+ }
41
+ next();
42
+ });
43
+ // Reject legacy metadata.* query params with an explicit migration message.
44
+ // Runs before ts-rest validation so users see the helpful error rather than
45
+ // a generic schema-validation 400.
46
+ app.get('/api/processes', (req, res, next) => {
47
+ const legacyKeys = detectLegacyMetadataParams(req.query ?? {});
48
+ if (legacyKeys.length > 0) {
49
+ res.status(400).json({ message: formatLegacyMetadataMessage(legacyKeys) });
50
+ return;
51
+ }
52
+ next();
53
+ });
54
+ // SSE list stream — registered before createExpressEndpoints so that the
55
+ // static path /api/processes/stream takes precedence over the ts-rest
56
+ // GET /api/processes/:id parameterised route.
57
+ app.get('/api/processes/stream', async (req, res) => {
58
+ const rawQuery = req.query ?? {};
59
+ try {
60
+ checkLegacyMetadataParams(rawQuery);
61
+ }
62
+ catch (e) {
63
+ if (e instanceof LegacyMetadataParamError) {
64
+ res.status(400).json({ message: e.message });
65
+ return;
66
+ }
67
+ throw e;
68
+ }
69
+ let sseOpts;
70
+ try {
71
+ sseOpts = parseSseOptions(rawQuery);
72
+ }
73
+ catch (e) {
74
+ res.status(400).json({ message: e.message });
75
+ return;
76
+ }
77
+ const { db, prefix } = resolveDb(dbOpts, sseOpts);
78
+ res.writeHead(200, {
79
+ 'Content-Type': 'text/event-stream',
80
+ 'Cache-Control': 'no-cache',
81
+ 'Connection': 'keep-alive',
82
+ });
83
+ const sendEvent = (data) => {
84
+ res.write(`data: ${JSON.stringify(data)}\n\n`);
85
+ };
86
+ const poller = createListPoller({
87
+ db,
88
+ prefix,
89
+ sendEvent,
90
+ onError: () => res.end(),
91
+ metadataFilter: sseOpts.metadataFilter,
92
+ });
93
+ poller.start();
94
+ req.on('close', () => poller.stop());
95
+ });
96
+ createExpressEndpoints(apiContract.processes, {
97
+ list: async ({ query }) => {
98
+ const result = await handlers.listProcesses(ctx, query);
99
+ return { status: 200, body: result };
100
+ },
101
+ get: async ({ params, query }) => {
102
+ const result = await handlers.getProcess(ctx, query, params.id);
103
+ if (!result)
104
+ return { status: 404, body: { message: 'Process not found' } };
105
+ return { status: 200, body: result };
106
+ },
107
+ getTree: async ({ params, query }) => {
108
+ const result = await handlers.getProcessTree(ctx, query, params.id);
109
+ if (!result)
110
+ return { status: 404, body: { message: 'Process not found' } };
111
+ return { status: 200, body: result };
112
+ },
113
+ getLog: async ({ params, query }) => {
114
+ const result = await handlers.getProcessLog(ctx, query, params.id);
115
+ if (!result)
116
+ return { status: 404, body: { message: 'Process not found' } };
117
+ return { status: 200, body: result };
118
+ },
119
+ getTreeLog: async ({ params, query }) => {
120
+ const result = await handlers.getProcessTreeLog(ctx, query, params.id);
121
+ if (!result)
122
+ return { status: 404, body: { message: 'Process not found' } };
123
+ return { status: 200, body: result };
124
+ },
125
+ launch: async ({ params, query, body }) => {
126
+ const result = await handlers.launchProcess(ctx, query, params.id, body?.resume === true);
127
+ return result;
128
+ },
129
+ cancel: async ({ params, query }) => {
130
+ const result = await handlers.cancelProcess(ctx, query, params.id);
131
+ return result;
132
+ },
133
+ dismiss: async ({ params, query }) => {
134
+ const result = await handlers.dismissProcess(ctx, query, params.id);
135
+ return result;
136
+ },
137
+ resync: async ({ query, body }) => {
138
+ const result = await handlers.resyncProcesses(ctx, query, body.clean, body.metadataFilter);
139
+ return { status: 202, body: result };
140
+ },
141
+ }, app);
142
+ app.get('/api/optio/instances', async (req, res) => {
143
+ const instances = await discoverInstances(dbOpts, redis);
144
+ res.json({ instances });
145
+ });
146
+ // SSE tree stream
147
+ app.get('/api/processes/:id/tree/stream', async (req, res) => {
148
+ const { id } = req.params;
149
+ let sseOpts;
150
+ try {
151
+ sseOpts = parseSseOptions(req.query ?? {});
152
+ }
153
+ catch (e) {
154
+ res.status(400).json({ message: e.message });
155
+ return;
156
+ }
157
+ const { db, prefix } = resolveDb(dbOpts, sseOpts);
158
+ const col = db.collection(`${prefix}_processes`);
159
+ const proc = await findProcessByEitherId(col, id);
160
+ if (!proc) {
161
+ res.status(404).json({ message: 'Process not found' });
162
+ return;
163
+ }
164
+ res.writeHead(200, {
165
+ 'Content-Type': 'text/event-stream',
166
+ 'Cache-Control': 'no-cache',
167
+ 'Connection': 'keep-alive',
168
+ });
169
+ const sendEvent = (data) => {
170
+ res.write(`data: ${JSON.stringify(data)}\n\n`);
171
+ };
172
+ const poller = createTreePoller({
173
+ db,
174
+ prefix,
175
+ sendEvent,
176
+ onError: () => res.end(),
177
+ rootId: proc.rootId.toString(),
178
+ baseDepth: proc.depth,
179
+ maxDepth: sseOpts.maxDepth,
180
+ });
181
+ poller.start();
182
+ req.on('close', () => poller.stop());
183
+ });
184
+ return explicit ? undefined : ctx;
185
+ }
186
+ //# sourceMappingURL=express.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/adapters/express.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { FastifyInstance } from 'fastify';
2
+ import type { Db } from 'mongodb';
3
+ import type { MongoClient } from 'mongodb';
4
+ import type { Redis } from 'ioredis';
5
+ import type { AuthCallback } from '../auth.js';
6
+ import { type OptioContext } from '../context.js';
7
+ /**
8
+ * `verbose`: when true, the widget reverse-proxy's per-request upstream-call
9
+ * logs (`fetching from remote server`, `response received` at INFO) are
10
+ * emitted. Defaults to false (quiet). Errors are logged regardless.
11
+ *
12
+ * Two-form options:
13
+ * - Sugar form (typical hosts): supply `{ db | mongoClient, redis, ... }`.
14
+ * registerOptioApi constructs an `OptioContext` internally, returns it,
15
+ * and wires fastify's onClose hook to `ctx.closeAll()`.
16
+ * - Explicit form (power users / shared-ctx hosts): supply `{ ctx, ... }`.
17
+ * Caller owns ctx lifecycle; the adapter does NOT call closeAll on it.
18
+ * registerOptioApi returns void in this form.
19
+ */
20
+ export type OptioApiOptions = (BaseOptioApiOptions & {
21
+ ctx: OptioContext;
22
+ }) | (BaseOptioApiOptions & {
23
+ redis: Redis;
24
+ } & ({
25
+ db: Db;
26
+ mongoClient?: never;
27
+ } | {
28
+ mongoClient: MongoClient;
29
+ db?: never;
30
+ }));
31
+ interface BaseOptioApiOptions {
32
+ prefix?: string;
33
+ authenticate: AuthCallback<import('fastify').FastifyRequest>;
34
+ verbose?: boolean;
35
+ }
36
+ export declare function registerOptioApi(app: FastifyInstance, opts: OptioApiOptions): OptioContext | void;
37
+ export {};
38
+ //# sourceMappingURL=fastify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../../src/adapters/fastify.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAQrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAkB/C,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AA6StE;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,eAAe,GACvB,CAAC,mBAAmB,GAAG;IAAE,GAAG,EAAE,YAAY,CAAA;CAAE,CAAC,GAC7C,CAAC,mBAAmB,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,CACtC;IAAE,EAAE,EAAE,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,KAAK,CAAA;CAAE,GAC/B;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,EAAE,CAAC,EAAE,KAAK,CAAA;CAAE,CAC3C,CAAC,CAAC;AAEP,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC,OAAO,SAAS,EAAE,cAAc,CAAC,CAAC;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAKD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CAyLjG"}