@agent-deck/backend 1.10.1 → 1.10.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/.tsbuildinfo +1 -1
- package/dist/execution-authority/bearer.d.ts +15 -0
- package/dist/execution-authority/bearer.d.ts.map +1 -0
- package/dist/execution-authority/bearer.js +35 -0
- package/dist/execution-authority/bearer.js.map +1 -0
- package/dist/execution-authority/index.d.ts +6 -0
- package/dist/execution-authority/index.d.ts.map +1 -0
- package/dist/execution-authority/index.js +8 -0
- package/dist/execution-authority/index.js.map +1 -0
- package/dist/execution-authority/ledger.d.ts +85 -0
- package/dist/execution-authority/ledger.d.ts.map +1 -0
- package/dist/execution-authority/ledger.js +507 -0
- package/dist/execution-authority/ledger.js.map +1 -0
- package/dist/execution-authority/store.d.ts +55 -0
- package/dist/execution-authority/store.d.ts.map +1 -0
- package/dist/execution-authority/store.js +256 -0
- package/dist/execution-authority/store.js.map +1 -0
- package/dist/execution-authority/types.d.ts +119 -0
- package/dist/execution-authority/types.d.ts.map +1 -0
- package/dist/execution-authority/types.js +9 -0
- package/dist/execution-authority/types.js.map +1 -0
- package/dist/lib/execution-authority-http.d.ts +23 -0
- package/dist/lib/execution-authority-http.d.ts.map +1 -0
- package/dist/lib/execution-authority-http.js +101 -0
- package/dist/lib/execution-authority-http.js.map +1 -0
- package/dist/mcp-server.d.ts +4 -3
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +30 -13
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp-session-binding.d.ts +4 -0
- package/dist/mcp-session-binding.d.ts.map +1 -1
- package/dist/mcp-session-binding.js +14 -0
- package/dist/mcp-session-binding.js.map +1 -1
- package/dist/mcp-stdio.d.ts +2 -0
- package/dist/mcp-stdio.d.ts.map +1 -0
- package/dist/mcp-stdio.js.map +1 -0
- package/dist/mcp-tools/register.d.ts +3 -0
- package/dist/mcp-tools/register.d.ts.map +1 -1
- package/dist/mcp-tools/register.js +20 -0
- package/dist/mcp-tools/register.js.map +1 -1
- package/dist/mcp-unassigned.d.ts +14 -0
- package/dist/mcp-unassigned.d.ts.map +1 -0
- package/dist/mcp-unassigned.js +23 -0
- package/dist/mcp-unassigned.js.map +1 -0
- package/dist/playbooks/playbook-parser.d.ts +8 -0
- package/dist/playbooks/playbook-parser.d.ts.map +1 -0
- package/dist/playbooks/playbook-parser.js +76 -0
- package/dist/playbooks/playbook-parser.js.map +1 -0
- package/dist/playbooks/playbook-service.d.ts +9 -0
- package/dist/playbooks/playbook-service.d.ts.map +1 -0
- package/dist/playbooks/playbook-service.js +107 -0
- package/dist/playbooks/playbook-service.js.map +1 -0
- package/dist/routes/execution-authority.d.ts +8 -0
- package/dist/routes/execution-authority.d.ts.map +1 -0
- package/dist/routes/execution-authority.js +498 -0
- package/dist/routes/execution-authority.js.map +1 -0
- package/dist/scope/bindings-sidecar.d.ts +9 -0
- package/dist/scope/bindings-sidecar.d.ts.map +1 -0
- package/dist/scope/bindings-sidecar.js +57 -0
- package/dist/scope/bindings-sidecar.js.map +1 -0
- package/dist/scope/repo-deck.d.ts +10 -0
- package/dist/scope/repo-deck.d.ts.map +1 -0
- package/dist/scope/repo-deck.js +63 -0
- package/dist/scope/repo-deck.js.map +1 -0
- package/dist/test-local-mcp-e2e.d.ts +3 -0
- package/dist/test-local-mcp-e2e.d.ts.map +1 -0
- package/dist/test-local-mcp-e2e.js +104 -0
- package/dist/test-local-mcp-e2e.js.map +1 -0
- package/package.json +2 -2
- package/static-ui/favicon.png +0 -0
- package/dist/config/mcp-endpoint.d.ts +0 -6
- package/dist/config/mcp-endpoint.d.ts.map +0 -1
- package/dist/config/mcp-endpoint.js +0 -19
- package/dist/config/mcp-endpoint.js.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NOT-50: MCP connections with no launch deck header become an unassigned
|
|
3
|
+
* session instead of HTTP 401 (which Cursor misreads as OAuth / mcp_auth).
|
|
4
|
+
*/
|
|
5
|
+
export declare const UNASSIGNED_DECK_MESSAGE = "No deck assigned to this folder. Run `agent-deck use <deck>` in the project folder, then reload MCP.";
|
|
6
|
+
export type UnassignedDeckBinding = {
|
|
7
|
+
deck: null;
|
|
8
|
+
error_code: 'GRANT_REQUIRED';
|
|
9
|
+
message: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function unassignedDeckBinding(): UnassignedDeckBinding;
|
|
12
|
+
/** Unit-test escape hatch: allow full tools without a deck header. */
|
|
13
|
+
export declare function skipDeckHeaderAuth(): boolean;
|
|
14
|
+
//# sourceMappingURL=mcp-unassigned.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-unassigned.d.ts","sourceRoot":"","sources":["../src/mcp-unassigned.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,uBAAuB,yGACoE,CAAC;AAEzG,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,gBAAgB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,qBAAqB,IAAI,qBAAqB,CAM7D;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,IAAI,OAAO,CAK5C"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* NOT-50: MCP connections with no launch deck header become an unassigned
|
|
4
|
+
* session instead of HTTP 401 (which Cursor misreads as OAuth / mcp_auth).
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.UNASSIGNED_DECK_MESSAGE = void 0;
|
|
8
|
+
exports.unassignedDeckBinding = unassignedDeckBinding;
|
|
9
|
+
exports.skipDeckHeaderAuth = skipDeckHeaderAuth;
|
|
10
|
+
exports.UNASSIGNED_DECK_MESSAGE = 'No deck assigned to this folder. Run `agent-deck use <deck>` in the project folder, then reload MCP.';
|
|
11
|
+
function unassignedDeckBinding() {
|
|
12
|
+
return {
|
|
13
|
+
deck: null,
|
|
14
|
+
error_code: 'GRANT_REQUIRED',
|
|
15
|
+
message: exports.UNASSIGNED_DECK_MESSAGE,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** Unit-test escape hatch: allow full tools without a deck header. */
|
|
19
|
+
function skipDeckHeaderAuth() {
|
|
20
|
+
return (process.env.AGENT_DECK_MCP_SKIP_DECK_HEADER === '1' ||
|
|
21
|
+
process.env.AGENT_DECK_MCP_SKIP_GRANT_AUTH === '1');
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=mcp-unassigned.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-unassigned.js","sourceRoot":"","sources":["../src/mcp-unassigned.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAWH,sDAMC;AAGD,gDAKC;AAvBY,QAAA,uBAAuB,GAClC,sGAAsG,CAAC;AAQzG,SAAgB,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,gBAAgB;QAC5B,OAAO,EAAE,+BAAuB;KACjC,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,SAAgB,kBAAkB;IAChC,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,GAAG;QACnD,OAAO,CAAC,GAAG,CAAC,8BAA8B,KAAK,GAAG,CACnD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Playbook } from '@agent-deck/shared';
|
|
2
|
+
export declare class PlaybookParseError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
/** Parse a minimal YAML-like frontmatter block (no external YAML dependency). */
|
|
6
|
+
export declare function parseSimpleFrontmatter(block: string): Record<string, string | string[]>;
|
|
7
|
+
export declare function parsePlaybookFile(content: string, filePath: string): Playbook;
|
|
8
|
+
//# sourceMappingURL=playbook-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playbook-parser.d.ts","sourceRoot":"","sources":["../../src/playbooks/playbook-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAGT,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,iFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAsCvF;AAMD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,CA4B7E"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PlaybookParseError = void 0;
|
|
4
|
+
exports.parseSimpleFrontmatter = parseSimpleFrontmatter;
|
|
5
|
+
exports.parsePlaybookFile = parsePlaybookFile;
|
|
6
|
+
const shared_1 = require("@agent-deck/shared");
|
|
7
|
+
class PlaybookParseError extends Error {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = 'PlaybookParseError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.PlaybookParseError = PlaybookParseError;
|
|
14
|
+
/** Parse a minimal YAML-like frontmatter block (no external YAML dependency). */
|
|
15
|
+
function parseSimpleFrontmatter(block) {
|
|
16
|
+
const result = {};
|
|
17
|
+
let currentListKey = null;
|
|
18
|
+
for (const rawLine of block.split('\n')) {
|
|
19
|
+
const line = rawLine.trimEnd();
|
|
20
|
+
if (!line.trim()) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const listMatch = line.match(/^\s+-\s+(.+)$/);
|
|
24
|
+
if (listMatch && currentListKey) {
|
|
25
|
+
const list = result[currentListKey];
|
|
26
|
+
if (Array.isArray(list)) {
|
|
27
|
+
list.push(stripQuotes(listMatch[1].trim()));
|
|
28
|
+
}
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const kvMatch = line.match(/^([\w-]+):\s*(.*)$/);
|
|
32
|
+
if (!kvMatch) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const [, key, rawValue] = kvMatch;
|
|
36
|
+
const value = rawValue.trim();
|
|
37
|
+
if (!value) {
|
|
38
|
+
currentListKey = key;
|
|
39
|
+
result[key] = [];
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
currentListKey = null;
|
|
43
|
+
result[key] = stripQuotes(value);
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
function stripQuotes(value) {
|
|
48
|
+
return value.replace(/^["']|["']$/g, '');
|
|
49
|
+
}
|
|
50
|
+
function parsePlaybookFile(content, filePath) {
|
|
51
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/);
|
|
52
|
+
if (!match) {
|
|
53
|
+
throw new PlaybookParseError(`Missing YAML frontmatter in ${filePath}`);
|
|
54
|
+
}
|
|
55
|
+
const [, frontmatterBlock, body] = match;
|
|
56
|
+
const raw = parseSimpleFrontmatter(frontmatterBlock);
|
|
57
|
+
const frontmatter = shared_1.PlaybookFrontmatterSchema.parse({
|
|
58
|
+
id: raw.id,
|
|
59
|
+
triggers: Array.isArray(raw.triggers) ? raw.triggers : [],
|
|
60
|
+
connections: Array.isArray(raw.connections) ? raw.connections : [],
|
|
61
|
+
exec: typeof raw.exec === 'string' ? raw.exec : undefined,
|
|
62
|
+
skill: typeof raw.skill === 'string' ? raw.skill : undefined,
|
|
63
|
+
});
|
|
64
|
+
const source = filePath.includes('.agent-deck/playbooks')
|
|
65
|
+
? 'repo'
|
|
66
|
+
: 'global';
|
|
67
|
+
return {
|
|
68
|
+
id: frontmatter.id,
|
|
69
|
+
path: filePath,
|
|
70
|
+
triggers: frontmatter.triggers,
|
|
71
|
+
source,
|
|
72
|
+
frontmatter,
|
|
73
|
+
body: body.trim(),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=playbook-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playbook-parser.js","sourceRoot":"","sources":["../../src/playbooks/playbook-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Playbook, PlaybookSummary } from '@agent-deck/shared';
|
|
2
|
+
export declare function getGlobalPlaybooksDir(): string;
|
|
3
|
+
export declare function discoverPlaybookPaths(workspaceRoot?: string): Promise<Array<{
|
|
4
|
+
filePath: string;
|
|
5
|
+
source: PlaybookSummary['source'];
|
|
6
|
+
}>>;
|
|
7
|
+
export declare function listPlaybooks(workspaceRoot?: string): Promise<PlaybookSummary[]>;
|
|
8
|
+
export declare function getPlaybook(playbookId: string, workspaceRoot?: string): Promise<Playbook | null>;
|
|
9
|
+
//# sourceMappingURL=playbook-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playbook-service.d.ts","sourceRoot":"","sources":["../../src/playbooks/playbook-service.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EACR,eAAe,EAEhB,MAAM,oBAAoB,CAAC;AAK5B,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AA8CD,wBAAsB,qBAAqB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;CACnC,CAAC,CAAC,CA4BF;AAED,wBAAsB,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAiBtF;AAED,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAW1B"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getGlobalPlaybooksDir = getGlobalPlaybooksDir;
|
|
7
|
+
exports.discoverPlaybookPaths = discoverPlaybookPaths;
|
|
8
|
+
exports.listPlaybooks = listPlaybooks;
|
|
9
|
+
exports.getPlaybook = getPlaybook;
|
|
10
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
11
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
12
|
+
const shared_1 = require("@agent-deck/shared");
|
|
13
|
+
const yaml_sync_1 = require("../vault/yaml-sync");
|
|
14
|
+
const repo_deck_1 = require("../scope/repo-deck");
|
|
15
|
+
const playbook_parser_1 = require("./playbook-parser");
|
|
16
|
+
function getGlobalPlaybooksDir() {
|
|
17
|
+
return node_path_1.default.join((0, yaml_sync_1.getAgentDeckHome)(), 'playbooks');
|
|
18
|
+
}
|
|
19
|
+
async function pathExists(filePath) {
|
|
20
|
+
try {
|
|
21
|
+
await promises_1.default.access(filePath);
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async function listMarkdownFiles(dir) {
|
|
29
|
+
if (!(await pathExists(dir))) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
const entries = await promises_1.default.readdir(dir, { withFileTypes: true });
|
|
33
|
+
return entries
|
|
34
|
+
.filter((entry) => entry.isFile() && entry.name.endsWith('.md'))
|
|
35
|
+
.map((entry) => node_path_1.default.join(dir, entry.name));
|
|
36
|
+
}
|
|
37
|
+
function resolvePlaybookPath(workspaceRoot, playbookPath) {
|
|
38
|
+
if (node_path_1.default.isAbsolute(playbookPath)) {
|
|
39
|
+
return playbookPath;
|
|
40
|
+
}
|
|
41
|
+
return node_path_1.default.join(node_path_1.default.resolve(workspaceRoot), playbookPath);
|
|
42
|
+
}
|
|
43
|
+
async function loadPlaybookFromFile(filePath, source) {
|
|
44
|
+
try {
|
|
45
|
+
const content = await promises_1.default.readFile(filePath, 'utf8');
|
|
46
|
+
const playbook = (0, playbook_parser_1.parsePlaybookFile)(content, filePath);
|
|
47
|
+
return { ...playbook, source };
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (error instanceof playbook_parser_1.PlaybookParseError) {
|
|
51
|
+
console.warn(error.message);
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function discoverPlaybookPaths(workspaceRoot) {
|
|
58
|
+
const discovered = new Map();
|
|
59
|
+
const addPath = (filePath, source) => {
|
|
60
|
+
const resolved = node_path_1.default.resolve(filePath);
|
|
61
|
+
if (!discovered.has(resolved)) {
|
|
62
|
+
discovered.set(resolved, { filePath: resolved, source });
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
if (workspaceRoot) {
|
|
66
|
+
const manifest = await (0, repo_deck_1.loadRepoDeckManifest)(workspaceRoot);
|
|
67
|
+
for (const playbookPath of manifest?.playbooks ?? []) {
|
|
68
|
+
addPath(resolvePlaybookPath(workspaceRoot, playbookPath), 'repo');
|
|
69
|
+
}
|
|
70
|
+
const repoDir = node_path_1.default.join(node_path_1.default.resolve(workspaceRoot), shared_1.REPO_PLAYBOOKS_DIR);
|
|
71
|
+
for (const filePath of await listMarkdownFiles(repoDir)) {
|
|
72
|
+
addPath(filePath, 'repo');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const globalDir = getGlobalPlaybooksDir();
|
|
76
|
+
for (const filePath of await listMarkdownFiles(globalDir)) {
|
|
77
|
+
addPath(filePath, 'global');
|
|
78
|
+
}
|
|
79
|
+
return [...discovered.values()];
|
|
80
|
+
}
|
|
81
|
+
async function listPlaybooks(workspaceRoot) {
|
|
82
|
+
const paths = await discoverPlaybookPaths(workspaceRoot);
|
|
83
|
+
const summaries = [];
|
|
84
|
+
for (const { filePath, source } of paths) {
|
|
85
|
+
const playbook = await loadPlaybookFromFile(filePath, source);
|
|
86
|
+
if (playbook) {
|
|
87
|
+
summaries.push({
|
|
88
|
+
id: playbook.id,
|
|
89
|
+
path: playbook.path,
|
|
90
|
+
triggers: playbook.triggers,
|
|
91
|
+
source: playbook.source,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return summaries.sort((a, b) => a.id.localeCompare(b.id));
|
|
96
|
+
}
|
|
97
|
+
async function getPlaybook(playbookId, workspaceRoot) {
|
|
98
|
+
const paths = await discoverPlaybookPaths(workspaceRoot);
|
|
99
|
+
for (const { filePath, source } of paths) {
|
|
100
|
+
const playbook = await loadPlaybookFromFile(filePath, source);
|
|
101
|
+
if (playbook?.id === playbookId) {
|
|
102
|
+
return playbook;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=playbook-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playbook-service.js","sourceRoot":"","sources":["../../src/playbooks/playbook-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FastifyPluginAsync } from 'fastify';
|
|
2
|
+
import type { ContractError } from '../execution-authority/types';
|
|
3
|
+
export declare class EnrollmentAuthError extends Error {
|
|
4
|
+
readonly contract: ContractError;
|
|
5
|
+
constructor(contract: ContractError);
|
|
6
|
+
}
|
|
7
|
+
export declare const registerExecutionAuthorityRoutes: FastifyPluginAsync;
|
|
8
|
+
//# sourceMappingURL=execution-authority.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-authority.d.ts","sourceRoot":"","sources":["../../src/routes/execution-authority.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAMlD,OAAO,KAAK,EAAe,aAAa,EAAwB,MAAM,8BAA8B,CAAC;AAGrG,qBAAa,mBAAoB,SAAQ,KAAK;aAChB,QAAQ,EAAE,aAAa;gBAAvB,QAAQ,EAAE,aAAa;CAIpD;AAyKD,eAAO,MAAM,gCAAgC,EAAE,kBA2Z9C,CAAC"}
|