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.
- package/LICENSE +201 -0
- package/README.md +244 -0
- package/dist/_generated/optio-engine.d.ts +69 -0
- package/dist/_generated/optio-engine.d.ts.map +1 -0
- package/dist/_generated/optio-engine.js +31 -0
- package/dist/_generated/optio-engine.js.map +1 -0
- package/dist/adapters/express.d.ts +24 -0
- package/dist/adapters/express.d.ts.map +1 -0
- package/dist/adapters/express.js +186 -0
- package/dist/adapters/express.js.map +1 -0
- package/dist/adapters/fastify.d.ts +38 -0
- package/dist/adapters/fastify.d.ts.map +1 -0
- package/dist/adapters/fastify.js +473 -0
- package/dist/adapters/fastify.js.map +1 -0
- package/dist/adapters/nextjs-app.d.ts +29 -0
- package/dist/adapters/nextjs-app.d.ts.map +1 -0
- package/dist/adapters/nextjs-app.js +220 -0
- package/dist/adapters/nextjs-app.js.map +1 -0
- package/dist/adapters/nextjs-pages.d.ts +29 -0
- package/dist/adapters/nextjs-pages.d.ts.map +1 -0
- package/dist/adapters/nextjs-pages.js +189 -0
- package/dist/adapters/nextjs-pages.js.map +1 -0
- package/dist/auth.d.ts +10 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +9 -0
- package/dist/auth.js.map +1 -0
- package/dist/context.d.ts +14 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +13 -0
- package/dist/context.js.map +1 -0
- package/dist/discovery.d.ts +10 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +48 -0
- package/dist/discovery.js.map +1 -0
- package/dist/handlers.d.ts +110 -0
- package/dist/handlers.d.ts.map +1 -0
- package/dist/handlers.js +188 -0
- package/dist/handlers.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/metadata-filter-query.d.ts +13 -0
- package/dist/metadata-filter-query.d.ts.map +1 -0
- package/dist/metadata-filter-query.js +36 -0
- package/dist/metadata-filter-query.js.map +1 -0
- package/dist/optio-transports.d.ts +8 -0
- package/dist/optio-transports.d.ts.map +1 -0
- package/dist/optio-transports.js +37 -0
- package/dist/optio-transports.js.map +1 -0
- package/dist/process-id-resolver.d.ts +26 -0
- package/dist/process-id-resolver.d.ts.map +1 -0
- package/dist/process-id-resolver.js +31 -0
- package/dist/process-id-resolver.js.map +1 -0
- package/dist/resolve.d.ts +25 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/resolve.js +16 -0
- package/dist/resolve.js.map +1 -0
- package/dist/sse-options.d.ts +28 -0
- package/dist/sse-options.d.ts.map +1 -0
- package/dist/sse-options.js +82 -0
- package/dist/sse-options.js.map +1 -0
- package/dist/stream-poller.d.ts +21 -0
- package/dist/stream-poller.d.ts.map +1 -0
- package/dist/stream-poller.js +146 -0
- package/dist/stream-poller.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/widget-proxy-core.d.ts +7 -0
- package/dist/widget-proxy-core.d.ts.map +1 -0
- package/dist/widget-proxy-core.js +56 -0
- package/dist/widget-proxy-core.js.map +1 -0
- package/dist/widget-upstream-registry.d.ts +27 -0
- package/dist/widget-upstream-registry.d.ts.map +1 -0
- package/dist/widget-upstream-registry.js +28 -0
- package/dist/widget-upstream-registry.js.map +1 -0
- package/package.json +100 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { ProcessMetadataFilter } from './types.js';
|
|
2
|
+
import type { OptioContext } from './context.js';
|
|
3
|
+
import type { LaunchFailureReason as LaunchFailureReasonType, CancelFailureReason as CancelFailureReasonType, DismissFailureReason as DismissFailureReasonType } from 'optio-contracts';
|
|
4
|
+
export interface ListQuery {
|
|
5
|
+
cursor?: string;
|
|
6
|
+
limit: number;
|
|
7
|
+
rootId?: string;
|
|
8
|
+
state?: string;
|
|
9
|
+
metadataFilter?: ProcessMetadataFilter;
|
|
10
|
+
}
|
|
11
|
+
export interface ListProcessesQuery extends ListQuery {
|
|
12
|
+
database?: string;
|
|
13
|
+
prefix?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function listProcesses(ctx: OptioContext, query: ListProcessesQuery): Promise<{
|
|
16
|
+
items: {
|
|
17
|
+
_id: any;
|
|
18
|
+
parentId: any;
|
|
19
|
+
rootId: any;
|
|
20
|
+
}[];
|
|
21
|
+
nextCursor: string | null;
|
|
22
|
+
totalCount: number;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function getProcess(ctx: OptioContext, query: {
|
|
25
|
+
database?: string;
|
|
26
|
+
prefix?: string;
|
|
27
|
+
}, id: string): Promise<{
|
|
28
|
+
_id: any;
|
|
29
|
+
parentId: any;
|
|
30
|
+
rootId: any;
|
|
31
|
+
} | null>;
|
|
32
|
+
export declare function getProcessTree(ctx: OptioContext, query: {
|
|
33
|
+
database?: string;
|
|
34
|
+
prefix?: string;
|
|
35
|
+
maxDepth?: number;
|
|
36
|
+
}, id: string): Promise<any>;
|
|
37
|
+
export interface PaginationQuery {
|
|
38
|
+
cursor?: string;
|
|
39
|
+
limit: number;
|
|
40
|
+
}
|
|
41
|
+
export interface GetProcessLogQuery extends PaginationQuery {
|
|
42
|
+
database?: string;
|
|
43
|
+
prefix?: string;
|
|
44
|
+
}
|
|
45
|
+
export declare function getProcessLog(ctx: OptioContext, query: GetProcessLogQuery, id: string): Promise<{
|
|
46
|
+
items: any;
|
|
47
|
+
nextCursor: string | null;
|
|
48
|
+
totalCount: any;
|
|
49
|
+
} | null>;
|
|
50
|
+
export interface TreeLogQuery extends PaginationQuery {
|
|
51
|
+
maxDepth?: number;
|
|
52
|
+
}
|
|
53
|
+
export interface GetProcessTreeLogQuery extends TreeLogQuery {
|
|
54
|
+
database?: string;
|
|
55
|
+
prefix?: string;
|
|
56
|
+
}
|
|
57
|
+
export declare function getProcessTreeLog(ctx: OptioContext, query: GetProcessTreeLogQuery, id: string): Promise<{
|
|
58
|
+
items: any[];
|
|
59
|
+
nextCursor: string | null;
|
|
60
|
+
totalCount: number;
|
|
61
|
+
} | null>;
|
|
62
|
+
export type LaunchCommandResult = {
|
|
63
|
+
status: 200;
|
|
64
|
+
body: any;
|
|
65
|
+
} | {
|
|
66
|
+
status: 404 | 409;
|
|
67
|
+
body: {
|
|
68
|
+
reason: LaunchFailureReasonType;
|
|
69
|
+
message: string;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
export type CancelCommandResult = {
|
|
73
|
+
status: 200;
|
|
74
|
+
body: any;
|
|
75
|
+
} | {
|
|
76
|
+
status: 404 | 409;
|
|
77
|
+
body: {
|
|
78
|
+
reason: CancelFailureReasonType;
|
|
79
|
+
message: string;
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
export type DismissCommandResult = {
|
|
83
|
+
status: 200;
|
|
84
|
+
body: any;
|
|
85
|
+
} | {
|
|
86
|
+
status: 404 | 409;
|
|
87
|
+
body: {
|
|
88
|
+
reason: DismissFailureReasonType;
|
|
89
|
+
message: string;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
export declare function launchProcess(ctx: OptioContext, query: {
|
|
93
|
+
database?: string;
|
|
94
|
+
prefix?: string;
|
|
95
|
+
}, id: string, resume?: boolean): Promise<LaunchCommandResult>;
|
|
96
|
+
export declare function cancelProcess(ctx: OptioContext, query: {
|
|
97
|
+
database?: string;
|
|
98
|
+
prefix?: string;
|
|
99
|
+
}, id: string): Promise<CancelCommandResult>;
|
|
100
|
+
export declare function dismissProcess(ctx: OptioContext, query: {
|
|
101
|
+
database?: string;
|
|
102
|
+
prefix?: string;
|
|
103
|
+
}, id: string): Promise<DismissCommandResult>;
|
|
104
|
+
export declare function resyncProcesses(ctx: OptioContext, query: {
|
|
105
|
+
database?: string;
|
|
106
|
+
prefix?: string;
|
|
107
|
+
}, clean?: boolean, metadataFilter?: ProcessMetadataFilter): Promise<{
|
|
108
|
+
message: string;
|
|
109
|
+
}>;
|
|
110
|
+
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/handlers.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { ObjectId } from 'mongodb';
|
|
2
|
+
import { metadataFilterToMongo } from './metadata-filter-query.js';
|
|
3
|
+
import { findProcessByEitherId } from './process-id-resolver.js';
|
|
4
|
+
import { resolveDb, resolveOptioEngine } from './resolve.js';
|
|
5
|
+
function col(db, prefix) {
|
|
6
|
+
return db.collection(`${prefix}_processes`);
|
|
7
|
+
}
|
|
8
|
+
function stripServerSideFields(proc) {
|
|
9
|
+
const { widgetUpstream: _omit, ...rest } = proc;
|
|
10
|
+
return rest;
|
|
11
|
+
}
|
|
12
|
+
function toResponse(proc) {
|
|
13
|
+
const stripped = stripServerSideFields(proc);
|
|
14
|
+
return {
|
|
15
|
+
...stripped,
|
|
16
|
+
_id: proc._id.toString(),
|
|
17
|
+
parentId: proc.parentId?.toString(),
|
|
18
|
+
rootId: proc.rootId.toString(),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export async function listProcesses(ctx, query) {
|
|
22
|
+
const { db, prefix } = resolveDb(ctx.dbOpts, query);
|
|
23
|
+
const { cursor, limit, rootId, state, metadataFilter } = query;
|
|
24
|
+
const filter = {
|
|
25
|
+
...metadataFilterToMongo(metadataFilter),
|
|
26
|
+
};
|
|
27
|
+
if (rootId)
|
|
28
|
+
filter.rootId = new ObjectId(rootId);
|
|
29
|
+
if (state)
|
|
30
|
+
filter['status.state'] = state;
|
|
31
|
+
if (cursor)
|
|
32
|
+
filter._id = { $gt: new ObjectId(cursor) };
|
|
33
|
+
const [items, totalCount] = await Promise.all([
|
|
34
|
+
col(db, prefix).find(filter).sort({ _id: 1 }).limit(limit + 1).toArray(),
|
|
35
|
+
col(db, prefix).countDocuments(filter),
|
|
36
|
+
]);
|
|
37
|
+
const hasNext = items.length > limit;
|
|
38
|
+
if (hasNext)
|
|
39
|
+
items.pop();
|
|
40
|
+
return {
|
|
41
|
+
items: items.map(toResponse),
|
|
42
|
+
nextCursor: hasNext ? items[items.length - 1]._id.toString() : null,
|
|
43
|
+
totalCount,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export async function getProcess(ctx, query, id) {
|
|
47
|
+
const { db, prefix } = resolveDb(ctx.dbOpts, query);
|
|
48
|
+
const proc = await findProcessByEitherId(col(db, prefix), id);
|
|
49
|
+
if (!proc)
|
|
50
|
+
return null;
|
|
51
|
+
return toResponse(proc);
|
|
52
|
+
}
|
|
53
|
+
async function buildTree(db, prefix, processId, maxDepth, currentDepth = 0) {
|
|
54
|
+
const proc = await col(db, prefix).findOne({ _id: processId });
|
|
55
|
+
if (!proc)
|
|
56
|
+
return null;
|
|
57
|
+
let children = [];
|
|
58
|
+
if (maxDepth === undefined || currentDepth < maxDepth) {
|
|
59
|
+
const childDocs = await col(db, prefix)
|
|
60
|
+
.find({ parentId: processId })
|
|
61
|
+
.sort({ order: 1 })
|
|
62
|
+
.toArray();
|
|
63
|
+
children = await Promise.all(childDocs.map((c) => buildTree(db, prefix, c._id, maxDepth, currentDepth + 1)));
|
|
64
|
+
children = children.filter(Boolean);
|
|
65
|
+
}
|
|
66
|
+
const stripped = stripServerSideFields(proc);
|
|
67
|
+
return {
|
|
68
|
+
...stripped,
|
|
69
|
+
_id: proc._id.toString(),
|
|
70
|
+
parentId: proc.parentId?.toString(),
|
|
71
|
+
rootId: proc.rootId.toString(),
|
|
72
|
+
progress: proc.progress,
|
|
73
|
+
children,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export async function getProcessTree(ctx, query, id) {
|
|
77
|
+
const { db, prefix } = resolveDb(ctx.dbOpts, query);
|
|
78
|
+
// Resolve the entry-point doc first so we can accept either id form.
|
|
79
|
+
// 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);
|
|
82
|
+
if (!entry)
|
|
83
|
+
return null;
|
|
84
|
+
return buildTree(db, prefix, entry._id, query.maxDepth);
|
|
85
|
+
}
|
|
86
|
+
export async function getProcessLog(ctx, query, id) {
|
|
87
|
+
const { db, prefix } = resolveDb(ctx.dbOpts, query);
|
|
88
|
+
const proc = await findProcessByEitherId(col(db, prefix), id);
|
|
89
|
+
if (!proc)
|
|
90
|
+
return null;
|
|
91
|
+
const { cursor, limit } = query;
|
|
92
|
+
const startIdx = cursor ? parseInt(cursor, 10) : 0;
|
|
93
|
+
const logSlice = proc.log.slice(startIdx, startIdx + limit + 1);
|
|
94
|
+
const hasNext = logSlice.length > limit;
|
|
95
|
+
if (hasNext)
|
|
96
|
+
logSlice.pop();
|
|
97
|
+
return {
|
|
98
|
+
items: logSlice,
|
|
99
|
+
nextCursor: hasNext ? String(startIdx + limit) : null,
|
|
100
|
+
totalCount: proc.log.length,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export async function getProcessTreeLog(ctx, query, id) {
|
|
104
|
+
const { db, prefix } = resolveDb(ctx.dbOpts, query);
|
|
105
|
+
const proc = await findProcessByEitherId(col(db, prefix), id);
|
|
106
|
+
if (!proc)
|
|
107
|
+
return null;
|
|
108
|
+
const { maxDepth, cursor, limit } = query;
|
|
109
|
+
const filter = { rootId: proc.rootId };
|
|
110
|
+
if (maxDepth !== undefined) {
|
|
111
|
+
filter.depth = { $lte: proc.depth + maxDepth };
|
|
112
|
+
}
|
|
113
|
+
const allProcs = await col(db, prefix).find(filter).toArray();
|
|
114
|
+
const allLogs = allProcs.flatMap((p) => p.log.map((entry) => ({
|
|
115
|
+
...entry,
|
|
116
|
+
processId: p._id.toString(),
|
|
117
|
+
processLabel: p.name,
|
|
118
|
+
})));
|
|
119
|
+
allLogs.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime());
|
|
120
|
+
const startIdx = cursor ? parseInt(cursor, 10) : 0;
|
|
121
|
+
const logSlice = allLogs.slice(startIdx, startIdx + limit + 1);
|
|
122
|
+
const hasNext = logSlice.length > limit;
|
|
123
|
+
if (hasNext)
|
|
124
|
+
logSlice.pop();
|
|
125
|
+
return {
|
|
126
|
+
items: logSlice,
|
|
127
|
+
nextCursor: hasNext ? String(startIdx + limit) : null,
|
|
128
|
+
totalCount: allLogs.length,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const LAUNCH_STATUS = {
|
|
132
|
+
'not-found': 404,
|
|
133
|
+
'not-launchable': 409,
|
|
134
|
+
'no-resume-support': 409,
|
|
135
|
+
'launch-blocked': 409,
|
|
136
|
+
};
|
|
137
|
+
const CANCEL_STATUS = {
|
|
138
|
+
'not-found': 404,
|
|
139
|
+
'not-cancellable': 409,
|
|
140
|
+
};
|
|
141
|
+
const DISMISS_STATUS = {
|
|
142
|
+
'not-found': 404,
|
|
143
|
+
'not-dismissable': 409,
|
|
144
|
+
};
|
|
145
|
+
const MESSAGES = {
|
|
146
|
+
'not-found': 'Process not found',
|
|
147
|
+
'not-launchable': 'Process is not in a launchable state',
|
|
148
|
+
'no-resume-support': 'This task does not support resume',
|
|
149
|
+
'launch-blocked': 'Launches matching this filter are currently blocked',
|
|
150
|
+
'not-cancellable': 'Process is not cancellable in its current state',
|
|
151
|
+
'not-dismissable': 'Process is not in a dismissable state',
|
|
152
|
+
};
|
|
153
|
+
function launchFail(reason) {
|
|
154
|
+
return { status: LAUNCH_STATUS[reason], body: { reason, message: MESSAGES[reason] } };
|
|
155
|
+
}
|
|
156
|
+
function cancelFail(reason) {
|
|
157
|
+
return { status: CANCEL_STATUS[reason], body: { reason, message: MESSAGES[reason] } };
|
|
158
|
+
}
|
|
159
|
+
function dismissFail(reason) {
|
|
160
|
+
return { status: DISMISS_STATUS[reason], body: { reason, message: MESSAGES[reason] } };
|
|
161
|
+
}
|
|
162
|
+
export async function launchProcess(ctx, query, id, resume = false) {
|
|
163
|
+
const engine = resolveOptioEngine(ctx, query);
|
|
164
|
+
const result = await engine.launch({ processId: id, resume });
|
|
165
|
+
if (result.ok)
|
|
166
|
+
return { status: 200, body: toResponse(result.process) };
|
|
167
|
+
return launchFail(result.reason);
|
|
168
|
+
}
|
|
169
|
+
export async function cancelProcess(ctx, query, id) {
|
|
170
|
+
const engine = resolveOptioEngine(ctx, query);
|
|
171
|
+
const result = await engine.cancel({ processId: id });
|
|
172
|
+
if (result.ok)
|
|
173
|
+
return { status: 200, body: toResponse(result.process) };
|
|
174
|
+
return cancelFail(result.reason);
|
|
175
|
+
}
|
|
176
|
+
export async function dismissProcess(ctx, query, id) {
|
|
177
|
+
const engine = resolveOptioEngine(ctx, query);
|
|
178
|
+
const result = await engine.dismiss({ processId: id });
|
|
179
|
+
if (result.ok)
|
|
180
|
+
return { status: 200, body: toResponse(result.process) };
|
|
181
|
+
return dismissFail(result.reason);
|
|
182
|
+
}
|
|
183
|
+
export async function resyncProcesses(ctx, query, clean = false, metadataFilter) {
|
|
184
|
+
const engine = resolveOptioEngine(ctx, query);
|
|
185
|
+
await engine.resync({ clean, metadataFilter });
|
|
186
|
+
return { message: clean ? 'Nuke and resync requested' : 'Resync requested' };
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { listProcesses, getProcess, getProcessTree, getProcessLog, getProcessTreeLog, launchProcess, cancelProcess, dismissProcess, resyncProcesses, type ListQuery, type PaginationQuery, type TreeLogQuery, type LaunchCommandResult, type CancelCommandResult, type DismissCommandResult, } from './handlers.js';
|
|
2
|
+
export type { ProcessMetadataFilter } from './types.js';
|
|
3
|
+
export { createListPoller, createTreePoller, type StreamPollerOptions, type TreePollerOptions, type ListPollerHandle } from './stream-poller.js';
|
|
4
|
+
export { discoverInstances } from './discovery.js';
|
|
5
|
+
export { resolveDb, resolveOptioEngine, type DbOptions, type SingleDbOptions, type MultiDbOptions } from './resolve.js';
|
|
6
|
+
export { parseMetadataFilterQuery, metadataFilterToMongo, detectLegacyMetadataParams, formatLegacyMetadataMessage, type ParseResult, } from './metadata-filter-query.js';
|
|
7
|
+
export { OptioEngineClient } from './_generated/optio-engine.js';
|
|
8
|
+
export { createOptioTransports, type OptioTransports } from './optio-transports.js';
|
|
9
|
+
export { createOptioContext, type OptioContext } from './context.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGjJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAGxH,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,2BAA2B,EAC3B,KAAK,WAAW,GACjB,MAAM,4BAA4B,CAAC;AAWpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Handlers (framework-agnostic)
|
|
2
|
+
export { listProcesses, getProcess, getProcessTree, getProcessLog, getProcessTreeLog, launchProcess, cancelProcess, dismissProcess, resyncProcesses, } from './handlers.js';
|
|
3
|
+
// Stream poller (for custom adapters)
|
|
4
|
+
export { createListPoller, createTreePoller } from './stream-poller.js';
|
|
5
|
+
// Multi-db discovery
|
|
6
|
+
export { discoverInstances } from './discovery.js';
|
|
7
|
+
export { resolveDb, resolveOptioEngine } from './resolve.js';
|
|
8
|
+
// Metadata filter helpers
|
|
9
|
+
export { parseMetadataFilterQuery, metadataFilterToMongo, detectLegacyMetadataParams, formatLegacyMetadataMessage, } from './metadata-filter-query.js';
|
|
10
|
+
// Engine RPC client + transport cache.
|
|
11
|
+
//
|
|
12
|
+
// Layers (see optio-api/AGENTS.md):
|
|
13
|
+
// - Layer 1: createOptioTransports / OptioTransports — caches RpcClient
|
|
14
|
+
// per (database, prefix). Used by RPC-only consumers + adapter authors.
|
|
15
|
+
// - Layer 2: createOptioContext / OptioContext — wraps Layer 1 + Mongo Db
|
|
16
|
+
// for HTTP-handler use. Used by HTTP hosts.
|
|
17
|
+
// - Generated: OptioEngineClient — proxy for the optio-engine clamator
|
|
18
|
+
// contract; wrap any cached transport: `new OptioEngineClient(transports.get(...))`.
|
|
19
|
+
export { OptioEngineClient } from './_generated/optio-engine.js';
|
|
20
|
+
export { createOptioTransports } from './optio-transports.js';
|
|
21
|
+
export { createOptioContext } from './context.js';
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,GAOhB,MAAM,eAAe,CAAC;AAIvB,sCAAsC;AACtC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAA2E,MAAM,oBAAoB,CAAC;AAEjJ,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAA6D,MAAM,cAAc,CAAC;AAExH,0BAA0B;AAC1B,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,2BAA2B,GAE5B,MAAM,4BAA4B,CAAC;AAEpC,uCAAuC;AACvC,EAAE;AACF,oCAAoC;AACpC,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,+CAA+C;AAC/C,wEAAwE;AACxE,wFAAwF;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAwB,MAAM,uBAAuB,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAqB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ProcessMetadataFilter } from 'optio-contracts';
|
|
2
|
+
export type ParseResult = {
|
|
3
|
+
ok: true;
|
|
4
|
+
value: ProcessMetadataFilter | undefined;
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
error: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function parseMetadataFilterQuery(raw: unknown): ParseResult;
|
|
10
|
+
export declare function metadataFilterToMongo(filter: ProcessMetadataFilter | undefined): Record<string, unknown>;
|
|
11
|
+
export declare function detectLegacyMetadataParams(rawQuery: Record<string, unknown>): string[];
|
|
12
|
+
export declare function formatLegacyMetadataMessage(legacyKeys: string[]): string;
|
|
13
|
+
//# sourceMappingURL=metadata-filter-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-filter-query.d.ts","sourceRoot":"","sources":["../src/metadata-filter-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7F,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,qBAAqB,GAAG,SAAS,CAAA;CAAE,GACtD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAelE;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAAG,SAAS,GACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAItF;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAGxE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { MetadataFilterQueryParamSchema } from 'optio-contracts';
|
|
2
|
+
export function parseMetadataFilterQuery(raw) {
|
|
3
|
+
if (raw === undefined || raw === null || raw === '') {
|
|
4
|
+
return { ok: true, value: undefined };
|
|
5
|
+
}
|
|
6
|
+
if (typeof raw !== 'string') {
|
|
7
|
+
return { ok: false, error: 'metadataFilter must be a string' };
|
|
8
|
+
}
|
|
9
|
+
const result = MetadataFilterQueryParamSchema.safeParse(raw);
|
|
10
|
+
if (!result.success) {
|
|
11
|
+
return {
|
|
12
|
+
ok: false,
|
|
13
|
+
error: result.error.issues[0]?.message ?? 'Invalid metadataFilter',
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return { ok: true, value: result.data };
|
|
17
|
+
}
|
|
18
|
+
export function metadataFilterToMongo(filter) {
|
|
19
|
+
if (!filter)
|
|
20
|
+
return {};
|
|
21
|
+
const out = {};
|
|
22
|
+
for (const [k, v] of Object.entries(filter)) {
|
|
23
|
+
out[`metadata.${k}`] = v;
|
|
24
|
+
}
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
export function detectLegacyMetadataParams(rawQuery) {
|
|
28
|
+
return Object.keys(rawQuery)
|
|
29
|
+
.filter(k => k.startsWith('metadata.'))
|
|
30
|
+
.sort();
|
|
31
|
+
}
|
|
32
|
+
export function formatLegacyMetadataMessage(legacyKeys) {
|
|
33
|
+
return `Legacy 'metadata.*' query params are no longer supported. ` +
|
|
34
|
+
`Use ?metadataFilter=<URL-encoded JSON>. Offending keys: ${legacyKeys.join(', ')}`;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=metadata-filter-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-filter-query.js","sourceRoot":"","sources":["../src/metadata-filter-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAA8B,MAAM,iBAAiB,CAAC;AAM7F,MAAM,UAAU,wBAAwB,CAAC,GAAY;IACnD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACpD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;IACjE,CAAC;IACD,MAAM,MAAM,GAAG,8BAA8B,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,wBAAwB;SACnE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAyC;IAEzC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAAiC;IAC1E,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;SACtC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,UAAoB;IAC9D,OAAO,4DAA4D;QACjE,2DAA2D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Redis } from 'ioredis';
|
|
2
|
+
import type { RpcClientCore } from '@clamator/protocol';
|
|
3
|
+
export interface OptioTransports {
|
|
4
|
+
get(database: string, prefix: string): RpcClientCore;
|
|
5
|
+
closeAll(): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare function createOptioTransports(redis: Redis): OptioTransports;
|
|
8
|
+
//# sourceMappingURL=optio-transports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optio-transports.d.ts","sourceRoot":"","sources":["../src/optio-transports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;IACrD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAUD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,CA4BnE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { RedisRpcClient } from '@clamator/over-redis';
|
|
2
|
+
// Caches one RpcClientCore (concretely RedisRpcClient) per (database, prefix)
|
|
3
|
+
// pair. Each transport is bound to a unique redis namespace via
|
|
4
|
+
// keyPrefix = `${database}/${prefix}` and can be wrapped by any number of
|
|
5
|
+
// clamator contract clients (OptioEngineClient + custom consumer contracts).
|
|
6
|
+
//
|
|
7
|
+
// Cache is unbounded by design. Multi-db deployments are expected to have a
|
|
8
|
+
// small (~10) number of pairs. If the cache exceeds 100 entries in
|
|
9
|
+
// production, file an issue and revisit eviction strategy.
|
|
10
|
+
export function createOptioTransports(redis) {
|
|
11
|
+
const map = new Map();
|
|
12
|
+
return {
|
|
13
|
+
get(database, prefix) {
|
|
14
|
+
const key = `${database}/${prefix}`;
|
|
15
|
+
let rpc = map.get(key);
|
|
16
|
+
if (!rpc) {
|
|
17
|
+
rpc = new RedisRpcClient({ redis, keyPrefix: key });
|
|
18
|
+
rpc.start().catch((err) => {
|
|
19
|
+
console.error(`[optio-transports] start failed for ${key}:`, err);
|
|
20
|
+
});
|
|
21
|
+
map.set(key, rpc);
|
|
22
|
+
}
|
|
23
|
+
return rpc;
|
|
24
|
+
},
|
|
25
|
+
async closeAll() {
|
|
26
|
+
const results = await Promise.allSettled([...map.values()].map((r) => r.stop()));
|
|
27
|
+
map.clear();
|
|
28
|
+
const rejections = results
|
|
29
|
+
.filter((r) => r.status === 'rejected')
|
|
30
|
+
.map((r) => r.reason);
|
|
31
|
+
if (rejections.length > 0) {
|
|
32
|
+
throw new AggregateError(rejections, 'closeAll: some transports failed to stop');
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=optio-transports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optio-transports.js","sourceRoot":"","sources":["../src/optio-transports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQtD,8EAA8E;AAC9E,gEAAgE;AAChE,0EAA0E;AAC1E,6EAA6E;AAC7E,EAAE;AACF,4EAA4E;AAC5E,mEAAmE;AACnE,2DAA2D;AAC3D,MAAM,UAAU,qBAAqB,CAAC,KAAY;IAChD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE7C,OAAO;QACL,GAAG,CAAC,QAAQ,EAAE,MAAM;YAClB,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;YACpC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACxB,OAAO,CAAC,KAAK,CAAC,uCAAuC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;gBACpE,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACpB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,CAAC,QAAQ;YACZ,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACjF,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,MAAM,UAAU,GAAG,OAAO;iBACvB,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;iBAClE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,cAAc,CAAC,UAAU,EAAE,0CAA0C,CAAC,CAAC;YACnF,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Collection, type Document } from 'mongodb';
|
|
2
|
+
/**
|
|
3
|
+
* Look up a single process document by either form of identifier the
|
|
4
|
+
* system uses to refer to it:
|
|
5
|
+
*
|
|
6
|
+
* - The Mongo ObjectId hex string (24 hex chars), matched against `_id`.
|
|
7
|
+
* - The application-level `processId` string from `mkPid()`, matched
|
|
8
|
+
* against the `processId` field on the document.
|
|
9
|
+
*
|
|
10
|
+
* Both fields live on every process row. The `processId` form is what
|
|
11
|
+
* callers tend to know first (it's deterministic, generated client-side
|
|
12
|
+
* before the row exists), while `_id` is what mongo assigns when the
|
|
13
|
+
* row is materialized. Excavator's recipe-debug flow returns the
|
|
14
|
+
* `processId` string to the frontend at submit time, then frontend code
|
|
15
|
+
* hands it to optio-ui's `useProcessStream`, which calls into this API.
|
|
16
|
+
* Without this fallback, the inline `new ObjectId(id)` in the old handlers
|
|
17
|
+
* threw on the non-hex string and the request 500'd.
|
|
18
|
+
*
|
|
19
|
+
* Resolution order: ObjectId form first (cheap, indexed by `_id`), then
|
|
20
|
+
* `processId` form. The two are disjoint in practice — `mkPid()` output
|
|
21
|
+
* is much longer than 24 chars and contains underscores — so the order
|
|
22
|
+
* does not matter for correctness, only for which index is hit on the
|
|
23
|
+
* common path.
|
|
24
|
+
*/
|
|
25
|
+
export declare function findProcessByEitherId<T extends Document = Document>(col: Collection<T>, id: string): Promise<T | null>;
|
|
26
|
+
//# sourceMappingURL=process-id-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-id-resolver.d.ts","sourceRoot":"","sources":["../src/process-id-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EACvE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAClB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAKnB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ObjectId } from 'mongodb';
|
|
2
|
+
/**
|
|
3
|
+
* Look up a single process document by either form of identifier the
|
|
4
|
+
* system uses to refer to it:
|
|
5
|
+
*
|
|
6
|
+
* - The Mongo ObjectId hex string (24 hex chars), matched against `_id`.
|
|
7
|
+
* - The application-level `processId` string from `mkPid()`, matched
|
|
8
|
+
* against the `processId` field on the document.
|
|
9
|
+
*
|
|
10
|
+
* Both fields live on every process row. The `processId` form is what
|
|
11
|
+
* callers tend to know first (it's deterministic, generated client-side
|
|
12
|
+
* before the row exists), while `_id` is what mongo assigns when the
|
|
13
|
+
* row is materialized. Excavator's recipe-debug flow returns the
|
|
14
|
+
* `processId` string to the frontend at submit time, then frontend code
|
|
15
|
+
* hands it to optio-ui's `useProcessStream`, which calls into this API.
|
|
16
|
+
* Without this fallback, the inline `new ObjectId(id)` in the old handlers
|
|
17
|
+
* threw on the non-hex string and the request 500'd.
|
|
18
|
+
*
|
|
19
|
+
* Resolution order: ObjectId form first (cheap, indexed by `_id`), then
|
|
20
|
+
* `processId` form. The two are disjoint in practice — `mkPid()` output
|
|
21
|
+
* is much longer than 24 chars and contains underscores — so the order
|
|
22
|
+
* does not matter for correctness, only for which index is hit on the
|
|
23
|
+
* common path.
|
|
24
|
+
*/
|
|
25
|
+
export async function findProcessByEitherId(col, id) {
|
|
26
|
+
if (ObjectId.isValid(id)) {
|
|
27
|
+
return col.findOne({ _id: new ObjectId(id) });
|
|
28
|
+
}
|
|
29
|
+
return col.findOne({ processId: id });
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=process-id-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-id-resolver.js","sourceRoot":"","sources":["../src/process-id-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkC,MAAM,SAAS,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAAkB,EAClB,EAAU;IAEV,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,QAAQ,CAAC,EAAE,CAAC,EAAS,CAAsB,CAAC;IAC5E,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,EAAS,CAAsB,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Db, MongoClient } from 'mongodb';
|
|
2
|
+
import { OptioEngineClient } from './_generated/optio-engine.js';
|
|
3
|
+
import type { OptioContext } from './context.js';
|
|
4
|
+
export interface SingleDbOptions {
|
|
5
|
+
db: Db;
|
|
6
|
+
mongoClient?: never;
|
|
7
|
+
}
|
|
8
|
+
export interface MultiDbOptions {
|
|
9
|
+
mongoClient: MongoClient;
|
|
10
|
+
db?: never;
|
|
11
|
+
}
|
|
12
|
+
export type DbOptions = SingleDbOptions | MultiDbOptions;
|
|
13
|
+
export declare function resolveDb(opts: DbOptions, query: {
|
|
14
|
+
database?: string;
|
|
15
|
+
prefix?: string;
|
|
16
|
+
}): {
|
|
17
|
+
db: Db;
|
|
18
|
+
database: string;
|
|
19
|
+
prefix: string;
|
|
20
|
+
};
|
|
21
|
+
export declare function resolveOptioEngine(ctx: OptioContext, query: {
|
|
22
|
+
database?: string;
|
|
23
|
+
prefix?: string;
|
|
24
|
+
}): OptioEngineClient;
|
|
25
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,EAAE,CAAC;IACP,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,EAAE,CAAC,EAAE,KAAK,CAAC;CACZ;AAED,MAAM,MAAM,SAAS,GAAG,eAAe,GAAG,cAAc,CAAC;AAEzD,wBAAgB,SAAS,CACvB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,EAAE,EAAE,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAY9C;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,iBAAiB,CAGnB"}
|
package/dist/resolve.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { OptioEngineClient } from './_generated/optio-engine.js';
|
|
2
|
+
export function resolveDb(opts, query) {
|
|
3
|
+
const prefix = query.prefix || 'optio';
|
|
4
|
+
if ('db' in opts && opts.db) {
|
|
5
|
+
return { db: opts.db, database: opts.db.databaseName, prefix };
|
|
6
|
+
}
|
|
7
|
+
if (!query.database) {
|
|
8
|
+
throw new Error('database query parameter is required in multi-db mode');
|
|
9
|
+
}
|
|
10
|
+
return { db: opts.mongoClient.db(query.database), database: query.database, prefix };
|
|
11
|
+
}
|
|
12
|
+
export function resolveOptioEngine(ctx, query) {
|
|
13
|
+
const { database, prefix } = resolveDb(ctx.dbOpts, query);
|
|
14
|
+
return new OptioEngineClient(ctx.transports.get(database, prefix));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAejE,MAAM,UAAU,SAAS,CACvB,IAAe,EACf,KAA6C;IAE7C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC;IAEvC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QAC5B,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IACjE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,WAAY,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,GAAiB,EACjB,KAA6C;IAE7C,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1D,OAAO,IAAI,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ProcessMetadataFilter } from './types.js';
|
|
2
|
+
export declare class LegacyMetadataParamError extends Error {
|
|
3
|
+
readonly keys: string[];
|
|
4
|
+
constructor(keys: string[]);
|
|
5
|
+
}
|
|
6
|
+
export interface ParsedSseOptions {
|
|
7
|
+
database?: string;
|
|
8
|
+
prefix?: string;
|
|
9
|
+
metadataFilter?: ProcessMetadataFilter;
|
|
10
|
+
maxDepth?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Parse SSE/poller query parameters into a typed shape. Throws Error on
|
|
14
|
+
* invalid `metadataFilter` JSON or on a non-finite/negative `maxDepth`;
|
|
15
|
+
* adapters should map a thrown Error to a 400 response.
|
|
16
|
+
*
|
|
17
|
+
* Does NOT inspect legacy `metadata.*` keys — call
|
|
18
|
+
* `checkLegacyMetadataParams` separately for that, since adapters want to
|
|
19
|
+
* distinguish the two error cases.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseSseOptions(rawQuery: Record<string, unknown>): ParsedSseOptions;
|
|
22
|
+
/**
|
|
23
|
+
* Throws `LegacyMetadataParamError` if the raw query contains any legacy
|
|
24
|
+
* `metadata.*` keys (a removed pre-`metadataFilter` API). Adapters catch
|
|
25
|
+
* this and emit a 400 with the formatted migration message.
|
|
26
|
+
*/
|
|
27
|
+
export declare function checkLegacyMetadataParams(rawQuery: Record<string, unknown>): void;
|
|
28
|
+
//# sourceMappingURL=sse-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-options.d.ts","sourceRoot":"","sources":["../src/sse-options.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,SAAgB,IAAI,EAAE,MAAM,EAAE,CAAC;gBACnB,IAAI,EAAE,MAAM,EAAE;CAK3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,gBAAgB,CAkClB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAKN"}
|