@studiometa/forge-core 0.1.0 → 0.2.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/README.md +30 -0
- package/dist/executors/deployments/deploy-and-wait.d.ts +13 -0
- package/dist/executors/deployments/deploy-and-wait.d.ts.map +1 -0
- package/dist/executors/deployments/get-log.d.ts +7 -0
- package/dist/executors/deployments/get-log.d.ts.map +1 -0
- package/dist/executors/deployments/index.d.ts +3 -1
- package/dist/executors/deployments/index.d.ts.map +1 -1
- package/dist/executors/deployments/types.d.ts +31 -0
- package/dist/executors/deployments/types.d.ts.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +646 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +32 -0
- package/dist/logger.d.ts.map +1 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -56,6 +56,8 @@ import { RESOURCES, ACTIONS } from "@studiometa/forge-core";
|
|
|
56
56
|
|
|
57
57
|
- `listDeployments({ server_id, site_id }, ctx)` — List deployments
|
|
58
58
|
- `deploySite({ server_id, site_id }, ctx)` — Trigger deployment
|
|
59
|
+
- `deploySiteAndWait({ server_id, site_id, timeout_ms?, poll_interval_ms? }, ctx)` — Deploy and poll until complete, returns `DeployResult` with status, log, and elapsed time
|
|
60
|
+
- `getDeploymentLog({ server_id, site_id }, ctx)` — Get the latest deployment log
|
|
59
61
|
- `getDeploymentOutput({ server_id, site_id, deployment_id }, ctx)` — Get output
|
|
60
62
|
- `getDeploymentScript({ server_id, site_id }, ctx)` — Get deploy script
|
|
61
63
|
- `updateDeploymentScript({ server_id, site_id, content }, ctx)` — Update script
|
|
@@ -100,6 +102,34 @@ import { RESOURCES, ACTIONS } from "@studiometa/forge-core";
|
|
|
100
102
|
|
|
101
103
|
- `listRecipes`, `getRecipe`, `createRecipe`, `deleteRecipe`, `runRecipe`
|
|
102
104
|
|
|
105
|
+
## Audit Logging
|
|
106
|
+
|
|
107
|
+
A shared audit logger for tracking write operations across MCP and CLI:
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
import { createAuditLogger } from "@studiometa/forge-core";
|
|
111
|
+
|
|
112
|
+
const logger = createAuditLogger("mcp"); // or 'cli'
|
|
113
|
+
|
|
114
|
+
logger.log({
|
|
115
|
+
source: "mcp",
|
|
116
|
+
resource: "servers",
|
|
117
|
+
action: "reboot",
|
|
118
|
+
args: { id: "123" },
|
|
119
|
+
status: "success",
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
- Logs JSON lines via [pino](https://github.com/pinojs/pino) to `~/.config/forge-tools/audit.log`
|
|
124
|
+
- Override path with `FORGE_AUDIT_LOG` environment variable
|
|
125
|
+
- Sensitive fields (`apiToken`, `token`, `password`, `secret`, `key`, `credentials`) are automatically redacted
|
|
126
|
+
- Silent no-op on failure — never interrupts the actual operation
|
|
127
|
+
|
|
128
|
+
### Utilities
|
|
129
|
+
|
|
130
|
+
- `sanitizeArgs(args)` — Strip sensitive fields from an args object
|
|
131
|
+
- `getAuditLogPath()` — Resolve the audit log file path
|
|
132
|
+
|
|
103
133
|
## Testing
|
|
104
134
|
|
|
105
135
|
```typescript
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ExecutorContext, ExecutorResult } from "../../context.ts";
|
|
2
|
+
import type { DeploySiteAndWaitOptions, DeployResult } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Trigger a deployment and wait for it to complete.
|
|
5
|
+
*
|
|
6
|
+
* 1. POSTs to the deploy endpoint.
|
|
7
|
+
* 2. Polls GET /servers/{id}/sites/{site_id} every `poll_interval_ms` ms.
|
|
8
|
+
* 3. When `deployment_status` becomes null the deploy is done.
|
|
9
|
+
* 4. Fetches the deployment log.
|
|
10
|
+
* 5. Checks the most recent deployment status to determine success/failure.
|
|
11
|
+
*/
|
|
12
|
+
export declare function deploySiteAndWait(options: DeploySiteAndWaitOptions, ctx: ExecutorContext): Promise<ExecutorResult<DeployResult>>;
|
|
13
|
+
//# sourceMappingURL=deploy-and-wait.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-and-wait.d.ts","sourceRoot":"","sources":["../../../src/executors/deployments/deploy-and-wait.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAExE,OAAO,KAAK,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzE;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,EACjC,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CA2EvC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ExecutorContext, ExecutorResult } from "../../context.ts";
|
|
2
|
+
import type { GetDeploymentLogOptions } from "./types.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Get the deployment log for a site.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getDeploymentLog(options: GetDeploymentLogOptions, ctx: ExecutorContext): Promise<ExecutorResult<string>>;
|
|
7
|
+
//# sourceMappingURL=get-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-log.d.ts","sourceRoot":"","sources":["../../../src/executors/deployments/get-log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAExE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,EAChC,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAKjC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export { deploySite } from "./deploy.ts";
|
|
2
|
+
export { deploySiteAndWait } from "./deploy-and-wait.ts";
|
|
3
|
+
export { getDeploymentLog } from "./get-log.ts";
|
|
2
4
|
export { getDeploymentOutput } from "./get-output.ts";
|
|
3
5
|
export { getDeploymentScript } from "./get-script.ts";
|
|
4
6
|
export { listDeployments } from "./list.ts";
|
|
5
7
|
export { updateDeploymentScript } from "./update-script.ts";
|
|
6
|
-
export type { DeploySiteOptions, GetDeploymentOutputOptions, GetDeploymentScriptOptions, ListDeploymentsOptions, UpdateDeploymentScriptOptions, } from "./types.ts";
|
|
8
|
+
export type { DeployResult, DeploySiteAndWaitOptions, DeploySiteOptions, GetDeploymentLogOptions, GetDeploymentOutputOptions, GetDeploymentScriptOptions, ListDeploymentsOptions, UpdateDeploymentScriptOptions, } from "./types.ts";
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/executors/deployments/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EACV,iBAAiB,EACjB,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/executors/deployments/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EACV,YAAY,EACZ,wBAAwB,EACxB,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,YAAY,CAAC"}
|
|
@@ -38,4 +38,35 @@ export interface UpdateDeploymentScriptOptions {
|
|
|
38
38
|
site_id: string;
|
|
39
39
|
content: string;
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Options for getting the deployment log.
|
|
43
|
+
*/
|
|
44
|
+
export interface GetDeploymentLogOptions {
|
|
45
|
+
server_id: string;
|
|
46
|
+
site_id: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Options for deploying a site and waiting for completion.
|
|
50
|
+
*/
|
|
51
|
+
export interface DeploySiteAndWaitOptions {
|
|
52
|
+
server_id: string;
|
|
53
|
+
site_id: string;
|
|
54
|
+
/** Polling interval in milliseconds. Default: 3000 */
|
|
55
|
+
poll_interval_ms?: number;
|
|
56
|
+
/** Timeout in milliseconds. Default: 600000 (10 min) */
|
|
57
|
+
timeout_ms?: number;
|
|
58
|
+
/** Called on each poll iteration with current status and elapsed time. */
|
|
59
|
+
onProgress?: (update: {
|
|
60
|
+
status: string;
|
|
61
|
+
elapsed_ms: number;
|
|
62
|
+
}) => void;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Result of the deploySiteAndWait executor.
|
|
66
|
+
*/
|
|
67
|
+
export interface DeployResult {
|
|
68
|
+
status: "success" | "failed";
|
|
69
|
+
log: string;
|
|
70
|
+
elapsed_ms: number;
|
|
71
|
+
}
|
|
41
72
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/executors/deployments/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/executors/deployments/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACvE;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { ACTIONS, RESOURCES } from "./constants.ts";
|
|
2
2
|
export type { Action, Resource } from "./constants.ts";
|
|
3
|
+
export { createAuditLogger, sanitizeArgs, getAuditLogPath } from "./logger.ts";
|
|
4
|
+
export type { AuditLogger, AuditLogEntry } from "./logger.ts";
|
|
3
5
|
export { createTestExecutorContext } from "./context.ts";
|
|
4
6
|
export type { ExecutorContext, ExecutorResult } from "./context.ts";
|
|
5
7
|
export type { Executor } from "./executors/types.ts";
|
|
@@ -7,8 +9,8 @@ export { createServer, deleteServer, getServer, listServers, rebootServer, } fro
|
|
|
7
9
|
export type { CreateServerOptions, DeleteServerOptions, GetServerOptions, ListServersOptions, RebootServerOptions, } from "./executors/servers/index.ts";
|
|
8
10
|
export { createSite, deleteSite, getSite, listSites } from "./executors/sites/index.ts";
|
|
9
11
|
export type { CreateSiteOptions, DeleteSiteOptions, GetSiteOptions, ListSitesOptions, } from "./executors/sites/index.ts";
|
|
10
|
-
export { deploySite, getDeploymentOutput, getDeploymentScript, listDeployments, updateDeploymentScript, } from "./executors/deployments/index.ts";
|
|
11
|
-
export type { DeploySiteOptions, GetDeploymentOutputOptions, GetDeploymentScriptOptions, ListDeploymentsOptions, UpdateDeploymentScriptOptions, } from "./executors/deployments/index.ts";
|
|
12
|
+
export { deploySite, deploySiteAndWait, getDeploymentLog, getDeploymentOutput, getDeploymentScript, listDeployments, updateDeploymentScript, } from "./executors/deployments/index.ts";
|
|
13
|
+
export type { DeployResult, DeploySiteAndWaitOptions, DeploySiteOptions, GetDeploymentLogOptions, GetDeploymentOutputOptions, GetDeploymentScriptOptions, ListDeploymentsOptions, UpdateDeploymentScriptOptions, } from "./executors/deployments/index.ts";
|
|
12
14
|
export { activateCertificate, createCertificate, deleteCertificate, getCertificate, listCertificates, } from "./executors/certificates/index.ts";
|
|
13
15
|
export type { ActivateCertificateOptions, CreateCertificateOptions, DeleteCertificateOptions, GetCertificateOptions, ListCertificatesOptions, } from "./executors/certificates/index.ts";
|
|
14
16
|
export { createDatabase, deleteDatabase, getDatabase, listDatabases, } from "./executors/databases/index.ts";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|