@framers/agentos-ext-cloud-digitalocean 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 (47) hide show
  1. package/LICENSE +98 -0
  2. package/dist/DigitalOceanService.d.ts +215 -0
  3. package/dist/DigitalOceanService.d.ts.map +1 -0
  4. package/dist/DigitalOceanService.js +323 -0
  5. package/dist/DigitalOceanService.js.map +1 -0
  6. package/dist/index.d.ts +43 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +74 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/tools/createApp.d.ts +79 -0
  11. package/dist/tools/createApp.d.ts.map +1 -0
  12. package/dist/tools/createApp.js +54 -0
  13. package/dist/tools/createApp.js.map +1 -0
  14. package/dist/tools/createDroplet.d.ts +80 -0
  15. package/dist/tools/createDroplet.d.ts.map +1 -0
  16. package/dist/tools/createDroplet.js +60 -0
  17. package/dist/tools/createDroplet.js.map +1 -0
  18. package/dist/tools/deleteResource.d.ts +42 -0
  19. package/dist/tools/deleteResource.d.ts.map +1 -0
  20. package/dist/tools/deleteResource.js +56 -0
  21. package/dist/tools/deleteResource.js.map +1 -0
  22. package/dist/tools/deployApp.d.ts +39 -0
  23. package/dist/tools/deployApp.d.ts.map +1 -0
  24. package/dist/tools/deployApp.js +35 -0
  25. package/dist/tools/deployApp.js.map +1 -0
  26. package/dist/tools/listResources.d.ts +54 -0
  27. package/dist/tools/listResources.d.ts.map +1 -0
  28. package/dist/tools/listResources.js +50 -0
  29. package/dist/tools/listResources.js.map +1 -0
  30. package/dist/tools/manageDns.d.ts +82 -0
  31. package/dist/tools/manageDns.d.ts.map +1 -0
  32. package/dist/tools/manageDns.js +107 -0
  33. package/dist/tools/manageDns.js.map +1 -0
  34. package/manifest.json +35 -0
  35. package/package.json +65 -0
  36. package/src/DigitalOceanService.ts +514 -0
  37. package/src/index.ts +130 -0
  38. package/src/tools/createApp.ts +69 -0
  39. package/src/tools/createDroplet.ts +74 -0
  40. package/src/tools/deleteResource.ts +64 -0
  41. package/src/tools/deployApp.ts +41 -0
  42. package/src/tools/listResources.ts +66 -0
  43. package/src/tools/manageDns.ts +131 -0
  44. package/test/DigitalOceanService.test.ts +435 -0
  45. package/test/index.test.ts +58 -0
  46. package/test/tools.test.ts +478 -0
  47. package/tsconfig.json +22 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @fileoverview DigitalOcean Cloud Extension for AgentOS.
3
+ *
4
+ * Provides 6 tools for managing App Platform apps, Droplets, DNS records,
5
+ * and deployments via the DigitalOcean REST API v2.
6
+ *
7
+ * @module @framers/agentos-ext-cloud-digitalocean
8
+ */
9
+ export interface DigitalOceanCloudOptions {
10
+ token?: string;
11
+ secrets?: Record<string, string>;
12
+ }
13
+ export interface ExtensionContext {
14
+ options?: Record<string, unknown>;
15
+ secrets?: Record<string, string>;
16
+ getSecret?: (key: string) => string | undefined;
17
+ logger?: {
18
+ info: (msg: string) => void;
19
+ };
20
+ }
21
+ export interface ExtensionPack {
22
+ name: string;
23
+ version: string;
24
+ descriptors: Array<{
25
+ id: string;
26
+ kind: string;
27
+ priority?: number;
28
+ payload: unknown;
29
+ }>;
30
+ onActivate?: () => Promise<void>;
31
+ onDeactivate?: () => Promise<void>;
32
+ }
33
+ export declare function createExtensionPack(context: ExtensionContext): ExtensionPack;
34
+ export { DigitalOceanService } from './DigitalOceanService.js';
35
+ export type { DigitalOceanConfig, DOApp, DOAppSpec, DOAppServiceSpec, DOAppStaticSiteSpec, DOAppEnvVar, DODeployment, DODroplet, DODomain, DODomainRecord, CreateAppOptions, CreateDropletOptions, } from './DigitalOceanService.js';
36
+ export { DOCreateAppTool } from './tools/createApp.js';
37
+ export { DOCreateDropletTool } from './tools/createDroplet.js';
38
+ export { DOListResourcesTool } from './tools/listResources.js';
39
+ export { DODeployAppTool } from './tools/deployApp.js';
40
+ export { DOManageDnsTool } from './tools/manageDns.js';
41
+ export { DODeleteResourceTool } from './tools/deleteResource.js';
42
+ export default createExtensionPack;
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAeH,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAkBD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAChD,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtF,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAMD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa,CAsC5E;AAMD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACV,kBAAkB,EAClB,KAAK,EACL,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,eAAe,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,74 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview DigitalOcean Cloud Extension for AgentOS.
4
+ *
5
+ * Provides 6 tools for managing App Platform apps, Droplets, DNS records,
6
+ * and deployments via the DigitalOcean REST API v2.
7
+ *
8
+ * @module @framers/agentos-ext-cloud-digitalocean
9
+ */
10
+ import { DigitalOceanService } from './DigitalOceanService.js';
11
+ import { DOCreateAppTool } from './tools/createApp.js';
12
+ import { DOCreateDropletTool } from './tools/createDroplet.js';
13
+ import { DOListResourcesTool } from './tools/listResources.js';
14
+ import { DODeployAppTool } from './tools/deployApp.js';
15
+ import { DOManageDnsTool } from './tools/manageDns.js';
16
+ import { DODeleteResourceTool } from './tools/deleteResource.js';
17
+ // ---------------------------------------------------------------------------
18
+ // Secret Resolution
19
+ // ---------------------------------------------------------------------------
20
+ function resolveConfig(opts, secrets) {
21
+ return {
22
+ token: opts.token ?? secrets['digitalocean.token']
23
+ ?? process.env.DIGITALOCEAN_TOKEN ?? process.env.DO_API_TOKEN ?? '',
24
+ };
25
+ }
26
+ // ---------------------------------------------------------------------------
27
+ // Factory
28
+ // ---------------------------------------------------------------------------
29
+ export function createExtensionPack(context) {
30
+ const opts = (context.options ?? {});
31
+ const secrets = opts.secrets ?? context.secrets ?? {};
32
+ const config = resolveConfig(opts, secrets);
33
+ const service = new DigitalOceanService(config);
34
+ const createAppTool = new DOCreateAppTool(service);
35
+ const createDropletTool = new DOCreateDropletTool(service);
36
+ const listResourcesTool = new DOListResourcesTool(service);
37
+ const deployAppTool = new DODeployAppTool(service);
38
+ const manageDnsTool = new DOManageDnsTool(service);
39
+ const deleteResourceTool = new DODeleteResourceTool(service);
40
+ return {
41
+ name: '@framers/agentos-ext-cloud-digitalocean',
42
+ version: '0.1.0',
43
+ descriptors: [
44
+ { id: 'doCreateApp', kind: 'tool', priority: 40, payload: createAppTool },
45
+ { id: 'doCreateDroplet', kind: 'tool', priority: 40, payload: createDropletTool },
46
+ { id: 'doListResources', kind: 'tool', priority: 40, payload: listResourcesTool },
47
+ { id: 'doDeployApp', kind: 'tool', priority: 40, payload: deployAppTool },
48
+ { id: 'doManageDns', kind: 'tool', priority: 40, payload: manageDnsTool },
49
+ { id: 'doDeleteResource', kind: 'tool', priority: 40, payload: deleteResourceTool },
50
+ ],
51
+ onActivate: async () => {
52
+ if (!config.token) {
53
+ throw new Error('DigitalOcean: no API token provided. Set DIGITALOCEAN_TOKEN or DO_API_TOKEN environment variable, '
54
+ + 'or provide it via secrets["digitalocean.token"].');
55
+ }
56
+ await service.initialize();
57
+ },
58
+ onDeactivate: async () => {
59
+ await service.shutdown();
60
+ },
61
+ };
62
+ }
63
+ // ---------------------------------------------------------------------------
64
+ // Public exports
65
+ // ---------------------------------------------------------------------------
66
+ export { DigitalOceanService } from './DigitalOceanService.js';
67
+ export { DOCreateAppTool } from './tools/createApp.js';
68
+ export { DOCreateDropletTool } from './tools/createDroplet.js';
69
+ export { DOListResourcesTool } from './tools/listResources.js';
70
+ export { DODeployAppTool } from './tools/deployApp.js';
71
+ export { DOManageDnsTool } from './tools/manageDns.js';
72
+ export { DODeleteResourceTool } from './tools/deleteResource.js';
73
+ export default createExtensionPack;
74
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @fileoverview DOCreateAppTool — create an App Platform app from a Git repository.
3
+ */
4
+ import type { DigitalOceanService, DOApp } from '../DigitalOceanService.js';
5
+ export interface CreateAppInput {
6
+ name: string;
7
+ gitUrl: string;
8
+ branch?: string;
9
+ region?: string;
10
+ buildCommand?: string;
11
+ runCommand?: string;
12
+ outputDir?: string;
13
+ isStatic?: boolean;
14
+ envVars?: Record<string, string>;
15
+ instanceSizeSlug?: string;
16
+ }
17
+ export declare class DOCreateAppTool {
18
+ private service;
19
+ readonly id = "doCreateApp";
20
+ readonly name = "doCreateApp";
21
+ readonly displayName = "Create DO App";
22
+ readonly description = "Create a DigitalOcean App Platform app from a Git repository with auto-detected settings. Supports both services (Node.js, Python, Go, etc.) and static sites. Configures build/run commands, environment variables, region, and instance size.";
23
+ readonly category = "cloud";
24
+ readonly version = "0.1.0";
25
+ readonly hasSideEffects = true;
26
+ readonly inputSchema: {
27
+ type: "object";
28
+ properties: {
29
+ name: {
30
+ type: string;
31
+ description: string;
32
+ };
33
+ gitUrl: {
34
+ type: string;
35
+ description: string;
36
+ };
37
+ branch: {
38
+ type: string;
39
+ description: string;
40
+ };
41
+ region: {
42
+ type: string;
43
+ description: string;
44
+ };
45
+ buildCommand: {
46
+ type: string;
47
+ description: string;
48
+ };
49
+ runCommand: {
50
+ type: string;
51
+ description: string;
52
+ };
53
+ outputDir: {
54
+ type: string;
55
+ description: string;
56
+ };
57
+ isStatic: {
58
+ type: string;
59
+ description: string;
60
+ };
61
+ envVars: {
62
+ type: string;
63
+ description: string;
64
+ };
65
+ instanceSizeSlug: {
66
+ type: string;
67
+ description: string;
68
+ };
69
+ };
70
+ required: string[];
71
+ };
72
+ constructor(service: DigitalOceanService);
73
+ execute(args: CreateAppInput): Promise<{
74
+ success: boolean;
75
+ data?: DOApp;
76
+ error?: string;
77
+ }>;
78
+ }
79
+ //# sourceMappingURL=createApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createApp.d.ts","sourceRoot":"","sources":["../../src/tools/createApp.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,eAAe;IA0Bd,OAAO,CAAC,OAAO;IAzB3B,QAAQ,CAAC,EAAE,iBAAiB;IAC5B,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,WAAW,mBAAmB;IACvC,QAAQ,CAAC,WAAW,qPAAqP;IACzQ,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAelB;gBAEkB,OAAO,EAAE,mBAAmB;IAE1C,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,KAAK,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAoBjG"}
@@ -0,0 +1,54 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview DOCreateAppTool — create an App Platform app from a Git repository.
4
+ */
5
+ export class DOCreateAppTool {
6
+ service;
7
+ id = 'doCreateApp';
8
+ name = 'doCreateApp';
9
+ displayName = 'Create DO App';
10
+ description = 'Create a DigitalOcean App Platform app from a Git repository with auto-detected settings. Supports both services (Node.js, Python, Go, etc.) and static sites. Configures build/run commands, environment variables, region, and instance size.';
11
+ category = 'cloud';
12
+ version = '0.1.0';
13
+ hasSideEffects = true;
14
+ inputSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ name: { type: 'string', description: 'App name (must be lowercase, alphanumeric, and hyphens only)' },
18
+ gitUrl: { type: 'string', description: 'Git repository clone URL (e.g. "https://github.com/user/repo")' },
19
+ branch: { type: 'string', description: 'Git branch to deploy from (default: "main")' },
20
+ region: { type: 'string', description: 'Region slug (e.g. "nyc", "sfo", "ams", "sgp"). Default: "nyc"' },
21
+ buildCommand: { type: 'string', description: 'Build command override (e.g. "npm run build")' },
22
+ runCommand: { type: 'string', description: 'Run command for services (e.g. "npm start")' },
23
+ outputDir: { type: 'string', description: 'Output directory for static sites (e.g. "dist", "build")' },
24
+ isStatic: { type: 'boolean', description: 'Whether to deploy as a static site (default: false, deploys as service)' },
25
+ envVars: { type: 'object', description: 'Environment variables as key-value pairs' },
26
+ instanceSizeSlug: { type: 'string', description: 'Instance size slug (e.g. "basic-xxs", "basic-xs", "professional-xs")' },
27
+ },
28
+ required: ['name', 'gitUrl'],
29
+ };
30
+ constructor(service) {
31
+ this.service = service;
32
+ }
33
+ async execute(args) {
34
+ try {
35
+ const app = await this.service.createApp({
36
+ name: args.name,
37
+ gitUrl: args.gitUrl,
38
+ branch: args.branch,
39
+ region: args.region,
40
+ buildCommand: args.buildCommand,
41
+ runCommand: args.runCommand,
42
+ outputDir: args.outputDir,
43
+ isStatic: args.isStatic,
44
+ envVars: args.envVars,
45
+ instanceSizeSlug: args.instanceSizeSlug,
46
+ });
47
+ return { success: true, data: app };
48
+ }
49
+ catch (err) {
50
+ return { success: false, error: err.message };
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=createApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createApp.js","sourceRoot":"","sources":["../../src/tools/createApp.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;GAEG;AAiBH,MAAM,OAAO,eAAe;IA0BN;IAzBX,EAAE,GAAG,aAAa,CAAC;IACnB,IAAI,GAAG,aAAa,CAAC;IACrB,WAAW,GAAG,eAAe,CAAC;IAC9B,WAAW,GAAG,iPAAiP,CAAC;IAChQ,QAAQ,GAAG,OAAO,CAAC;IACnB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8DAA8D,EAAE;YACrG,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gEAAgE,EAAE;YACzG,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;YACtF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+DAA+D,EAAE;YACxG,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;YAC9F,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;YAC1F,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0DAA0D,EAAE;YACtG,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,yEAAyE,EAAE;YACrH,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0CAA0C,EAAE;YACpF,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sEAAsE,EAAE;SAC1H;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;KAC7B,CAAC;IAEF,YAAoB,OAA4B;QAA5B,YAAO,GAAP,OAAO,CAAqB;IAAG,CAAC;IAEpD,KAAK,CAAC,OAAO,CAAC,IAAoB;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBACvC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;aACxC,CAAC,CAAC;YAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * @fileoverview DOCreateDropletTool — create a VPS Droplet with specified region, size, and image.
3
+ */
4
+ import type { DigitalOceanService, DODroplet } from '../DigitalOceanService.js';
5
+ export interface CreateDropletInput {
6
+ name: string;
7
+ region: string;
8
+ size: string;
9
+ image: string;
10
+ sshKeys?: (string | number)[];
11
+ userData?: string;
12
+ backups?: boolean;
13
+ ipv6?: boolean;
14
+ tags?: string[];
15
+ }
16
+ export declare class DOCreateDropletTool {
17
+ private service;
18
+ readonly id = "doCreateDroplet";
19
+ readonly name = "doCreateDroplet";
20
+ readonly displayName = "Create DO Droplet";
21
+ readonly description = "Create a DigitalOcean Droplet (VPS instance) with a specified region, size, and OS image. Supports SSH key injection, cloud-init user data scripts, backups, IPv6, and tagging.";
22
+ readonly category = "cloud";
23
+ readonly version = "0.1.0";
24
+ readonly hasSideEffects = true;
25
+ readonly inputSchema: {
26
+ type: "object";
27
+ properties: {
28
+ name: {
29
+ type: string;
30
+ description: string;
31
+ };
32
+ region: {
33
+ type: string;
34
+ description: string;
35
+ };
36
+ size: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ image: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ sshKeys: {
45
+ type: string;
46
+ items: {
47
+ type: string[];
48
+ };
49
+ description: string;
50
+ };
51
+ userData: {
52
+ type: string;
53
+ description: string;
54
+ };
55
+ backups: {
56
+ type: string;
57
+ description: string;
58
+ };
59
+ ipv6: {
60
+ type: string;
61
+ description: string;
62
+ };
63
+ tags: {
64
+ type: string;
65
+ items: {
66
+ type: string;
67
+ };
68
+ description: string;
69
+ };
70
+ };
71
+ required: string[];
72
+ };
73
+ constructor(service: DigitalOceanService);
74
+ execute(args: CreateDropletInput): Promise<{
75
+ success: boolean;
76
+ data?: DODroplet;
77
+ error?: string;
78
+ }>;
79
+ }
80
+ //# sourceMappingURL=createDroplet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createDroplet.d.ts","sourceRoot":"","sources":["../../src/tools/createDroplet.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEhF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAiClB,OAAO,CAAC,OAAO;IAhC3B,QAAQ,CAAC,EAAE,qBAAqB;IAChC,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,WAAW,uBAAuB;IAC3C,QAAQ,CAAC,WAAW,qLAAqL;IACzM,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsBlB;gBAEkB,OAAO,EAAE,mBAAmB;IAE1C,OAAO,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAmBzG"}
@@ -0,0 +1,60 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview DOCreateDropletTool — create a VPS Droplet with specified region, size, and image.
4
+ */
5
+ export class DOCreateDropletTool {
6
+ service;
7
+ id = 'doCreateDroplet';
8
+ name = 'doCreateDroplet';
9
+ displayName = 'Create DO Droplet';
10
+ description = 'Create a DigitalOcean Droplet (VPS instance) with a specified region, size, and OS image. Supports SSH key injection, cloud-init user data scripts, backups, IPv6, and tagging.';
11
+ category = 'cloud';
12
+ version = '0.1.0';
13
+ hasSideEffects = true;
14
+ inputSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ name: { type: 'string', description: 'Droplet hostname (e.g. "my-server-01")' },
18
+ region: { type: 'string', description: 'Region slug (e.g. "nyc1", "sfo3", "ams3", "sgp1", "lon1")' },
19
+ size: { type: 'string', description: 'Size slug (e.g. "s-1vcpu-1gb", "s-2vcpu-4gb", "s-4vcpu-8gb")' },
20
+ image: { type: 'string', description: 'Image slug or ID (e.g. "ubuntu-24-04-x64", "debian-12-x64", "docker-20-04")' },
21
+ sshKeys: {
22
+ type: 'array',
23
+ items: { type: ['string', 'number'] },
24
+ description: 'SSH key IDs or fingerprints to embed in the Droplet',
25
+ },
26
+ userData: { type: 'string', description: 'Cloud-init user data script for automated setup' },
27
+ backups: { type: 'boolean', description: 'Enable weekly backups (default: false)' },
28
+ ipv6: { type: 'boolean', description: 'Enable IPv6 networking (default: false)' },
29
+ tags: {
30
+ type: 'array',
31
+ items: { type: 'string' },
32
+ description: 'Tags to apply to the Droplet for organization and filtering',
33
+ },
34
+ },
35
+ required: ['name', 'region', 'size', 'image'],
36
+ };
37
+ constructor(service) {
38
+ this.service = service;
39
+ }
40
+ async execute(args) {
41
+ try {
42
+ const droplet = await this.service.createDroplet({
43
+ name: args.name,
44
+ region: args.region,
45
+ size: args.size,
46
+ image: args.image,
47
+ sshKeys: args.sshKeys,
48
+ userData: args.userData,
49
+ backups: args.backups,
50
+ ipv6: args.ipv6,
51
+ tags: args.tags,
52
+ });
53
+ return { success: true, data: droplet };
54
+ }
55
+ catch (err) {
56
+ return { success: false, error: err.message };
57
+ }
58
+ }
59
+ }
60
+ //# sourceMappingURL=createDroplet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createDroplet.js","sourceRoot":"","sources":["../../src/tools/createDroplet.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;GAEG;AAgBH,MAAM,OAAO,mBAAmB;IAiCV;IAhCX,EAAE,GAAG,iBAAiB,CAAC;IACvB,IAAI,GAAG,iBAAiB,CAAC;IACzB,WAAW,GAAG,mBAAmB,CAAC;IAClC,WAAW,GAAG,iLAAiL,CAAC;IAChM,QAAQ,GAAG,OAAO,CAAC;IACnB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;YAC/E,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;YACpG,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8DAA8D,EAAE;YACrG,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6EAA6E,EAAE;YACrH,OAAO,EAAE;gBACP,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACrC,WAAW,EAAE,qDAAqD;aACnE;YACD,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iDAAiD,EAAE;YAC5F,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,wCAAwC,EAAE;YACnF,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,yCAAyC,EAAE;YACjF,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,6DAA6D;aAC3E;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;KAC9C,CAAC;IAEF,YAAoB,OAA4B;QAA5B,YAAO,GAAP,OAAO,CAAqB;IAAG,CAAC;IAEpD,KAAK,CAAC,OAAO,CAAC,IAAwB;QACpC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;gBAC/C,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC,CAAC;YAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @fileoverview DODeleteResourceTool — delete an app or droplet from DigitalOcean.
3
+ */
4
+ import type { DigitalOceanService } from '../DigitalOceanService.js';
5
+ export interface DeleteResourceInput {
6
+ resourceType: 'app' | 'droplet';
7
+ resourceId: string;
8
+ }
9
+ export declare class DODeleteResourceTool {
10
+ private service;
11
+ readonly id = "doDeleteResource";
12
+ readonly name = "doDeleteResource";
13
+ readonly displayName = "Delete DO Resource";
14
+ readonly description = "Permanently delete a DigitalOcean App Platform app or Droplet. This action is irreversible \u2014 the resource and all associated data will be destroyed.";
15
+ readonly category = "cloud";
16
+ readonly version = "0.1.0";
17
+ readonly hasSideEffects = true;
18
+ readonly inputSchema: {
19
+ type: "object";
20
+ properties: {
21
+ resourceType: {
22
+ type: string;
23
+ enum: string[];
24
+ description: string;
25
+ };
26
+ resourceId: {
27
+ type: string;
28
+ description: string;
29
+ };
30
+ };
31
+ required: string[];
32
+ };
33
+ constructor(service: DigitalOceanService);
34
+ execute(args: DeleteResourceInput): Promise<{
35
+ success: boolean;
36
+ data?: {
37
+ message: string;
38
+ };
39
+ error?: string;
40
+ }>;
41
+ }
42
+ //# sourceMappingURL=deleteResource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteResource.d.ts","sourceRoot":"","sources":["../../src/tools/deleteResource.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,KAAK,GAAG,SAAS,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAyBnB,OAAO,CAAC,OAAO;IAxB3B,QAAQ,CAAC,EAAE,sBAAsB;IACjC,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,WAAW,wBAAwB;IAC5C,QAAQ,CAAC,WAAW,+JAA0J;IAC9K,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;MAclB;gBAEkB,OAAO,EAAE,mBAAmB;IAE1C,OAAO,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAwBpH"}
@@ -0,0 +1,56 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview DODeleteResourceTool — delete an app or droplet from DigitalOcean.
4
+ */
5
+ export class DODeleteResourceTool {
6
+ service;
7
+ id = 'doDeleteResource';
8
+ name = 'doDeleteResource';
9
+ displayName = 'Delete DO Resource';
10
+ description = 'Permanently delete a DigitalOcean App Platform app or Droplet. This action is irreversible — the resource and all associated data will be destroyed.';
11
+ category = 'cloud';
12
+ version = '0.1.0';
13
+ hasSideEffects = true;
14
+ inputSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ resourceType: {
18
+ type: 'string',
19
+ enum: ['app', 'droplet'],
20
+ description: 'Type of resource to delete',
21
+ },
22
+ resourceId: {
23
+ type: 'string',
24
+ description: 'Resource ID to delete (app UUID or droplet numeric ID)',
25
+ },
26
+ },
27
+ required: ['resourceType', 'resourceId'],
28
+ };
29
+ constructor(service) {
30
+ this.service = service;
31
+ }
32
+ async execute(args) {
33
+ try {
34
+ switch (args.resourceType) {
35
+ case 'app': {
36
+ await this.service.deleteApp(args.resourceId);
37
+ return { success: true, data: { message: `App ${args.resourceId} has been deleted.` } };
38
+ }
39
+ case 'droplet': {
40
+ const dropletId = parseInt(args.resourceId, 10);
41
+ if (isNaN(dropletId)) {
42
+ return { success: false, error: `Invalid droplet ID: "${args.resourceId}". Must be a numeric ID.` };
43
+ }
44
+ await this.service.deleteDroplet(dropletId);
45
+ return { success: true, data: { message: `Droplet ${dropletId} has been deleted.` } };
46
+ }
47
+ default:
48
+ return { success: false, error: `Unknown resource type: ${args.resourceType}. Use "app" or "droplet".` };
49
+ }
50
+ }
51
+ catch (err) {
52
+ return { success: false, error: err.message };
53
+ }
54
+ }
55
+ }
56
+ //# sourceMappingURL=deleteResource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteResource.js","sourceRoot":"","sources":["../../src/tools/deleteResource.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;GAEG;AASH,MAAM,OAAO,oBAAoB;IAyBX;IAxBX,EAAE,GAAG,kBAAkB,CAAC;IACxB,IAAI,GAAG,kBAAkB,CAAC;IAC1B,WAAW,GAAG,oBAAoB,CAAC;IACnC,WAAW,GAAG,sJAAsJ,CAAC;IACrK,QAAQ,GAAG,OAAO,CAAC;IACnB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;gBACxB,WAAW,EAAE,4BAA4B;aAC1C;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wDAAwD;aACtE;SACF;QACD,QAAQ,EAAE,CAAC,cAAc,EAAE,YAAY,CAAC;KACzC,CAAC;IAEF,YAAoB,OAA4B;QAA5B,YAAO,GAAP,OAAO,CAAqB;IAAG,CAAC;IAEpD,KAAK,CAAC,OAAO,CAAC,IAAyB;QACrC,IAAI,CAAC;YACH,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC1B,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC,UAAU,oBAAoB,EAAE,EAAE,CAAC;gBAC1F,CAAC;gBAED,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAChD,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;wBACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,IAAI,CAAC,UAAU,0BAA0B,EAAE,CAAC;oBACtG,CAAC;oBACD,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;oBAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,SAAS,oBAAoB,EAAE,EAAE,CAAC;gBACxF,CAAC;gBAED;oBACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,IAAI,CAAC,YAAY,2BAA2B,EAAE,CAAC;YAC7G,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @fileoverview DODeployAppTool — trigger a new deployment on an existing App Platform app.
3
+ */
4
+ import type { DigitalOceanService, DODeployment } from '../DigitalOceanService.js';
5
+ export interface DeployAppInput {
6
+ appId: string;
7
+ forceBuild?: boolean;
8
+ }
9
+ export declare class DODeployAppTool {
10
+ private service;
11
+ readonly id = "doDeployApp";
12
+ readonly name = "doDeployApp";
13
+ readonly displayName = "Deploy DO App";
14
+ readonly description = "Trigger a new deployment on an existing DigitalOcean App Platform app. Pulls the latest code from the configured Git repository and builds/deploys it. Optionally force a full rebuild.";
15
+ readonly category = "cloud";
16
+ readonly version = "0.1.0";
17
+ readonly hasSideEffects = true;
18
+ readonly inputSchema: {
19
+ type: "object";
20
+ properties: {
21
+ appId: {
22
+ type: string;
23
+ description: string;
24
+ };
25
+ forceBuild: {
26
+ type: string;
27
+ description: string;
28
+ };
29
+ };
30
+ required: string[];
31
+ };
32
+ constructor(service: DigitalOceanService);
33
+ execute(args: DeployAppInput): Promise<{
34
+ success: boolean;
35
+ data?: DODeployment;
36
+ error?: string;
37
+ }>;
38
+ }
39
+ //# sourceMappingURL=deployApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployApp.d.ts","sourceRoot":"","sources":["../../src/tools/deployApp.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,eAAe;IAkBd,OAAO,CAAC,OAAO;IAjB3B,QAAQ,CAAC,EAAE,iBAAiB;IAC5B,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,WAAW,mBAAmB;IACvC,QAAQ,CAAC,WAAW,6LAA6L;IACjN,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;MAOlB;gBAEkB,OAAO,EAAE,mBAAmB;IAE1C,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,YAAY,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAQxG"}
@@ -0,0 +1,35 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview DODeployAppTool — trigger a new deployment on an existing App Platform app.
4
+ */
5
+ export class DODeployAppTool {
6
+ service;
7
+ id = 'doDeployApp';
8
+ name = 'doDeployApp';
9
+ displayName = 'Deploy DO App';
10
+ description = 'Trigger a new deployment on an existing DigitalOcean App Platform app. Pulls the latest code from the configured Git repository and builds/deploys it. Optionally force a full rebuild.';
11
+ category = 'cloud';
12
+ version = '0.1.0';
13
+ hasSideEffects = true;
14
+ inputSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ appId: { type: 'string', description: 'App ID to deploy (use doListResources to find app IDs)' },
18
+ forceBuild: { type: 'boolean', description: 'Force a complete rebuild instead of incremental (default: false)' },
19
+ },
20
+ required: ['appId'],
21
+ };
22
+ constructor(service) {
23
+ this.service = service;
24
+ }
25
+ async execute(args) {
26
+ try {
27
+ const deployment = await this.service.createDeployment(args.appId, args.forceBuild);
28
+ return { success: true, data: deployment };
29
+ }
30
+ catch (err) {
31
+ return { success: false, error: err.message };
32
+ }
33
+ }
34
+ }
35
+ //# sourceMappingURL=deployApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployApp.js","sourceRoot":"","sources":["../../src/tools/deployApp.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;GAEG;AASH,MAAM,OAAO,eAAe;IAkBN;IAjBX,EAAE,GAAG,aAAa,CAAC;IACnB,IAAI,GAAG,aAAa,CAAC;IACrB,WAAW,GAAG,eAAe,CAAC;IAC9B,WAAW,GAAG,yLAAyL,CAAC;IACxM,QAAQ,GAAG,OAAO,CAAC;IACnB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wDAAwD,EAAE;YAChG,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kEAAkE,EAAE;SACjH;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB,CAAC;IAEF,YAAoB,OAA4B;QAA5B,YAAO,GAAP,OAAO,CAAqB;IAAG,CAAC;IAEpD,KAAK,CAAC,OAAO,CAAC,IAAoB;QAChC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACpF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}