@studiometa/forge-sdk 0.0.1 → 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 +178 -0
- package/dist/forge.d.ts +93 -0
- package/dist/forge.d.ts.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2049 -0
- package/dist/index.js.map +1 -0
- package/dist/pagination.d.ts +34 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/resources/backups.d.ts +86 -0
- package/dist/resources/backups.d.ts.map +1 -0
- package/dist/resources/base.d.ts +10 -0
- package/dist/resources/base.d.ts.map +1 -0
- package/dist/resources/certificates.d.ts +102 -0
- package/dist/resources/certificates.d.ts.map +1 -0
- package/dist/resources/commands.d.ts +74 -0
- package/dist/resources/commands.d.ts.map +1 -0
- package/dist/resources/daemons.d.ts +92 -0
- package/dist/resources/daemons.d.ts.map +1 -0
- package/dist/resources/database-users.d.ts +84 -0
- package/dist/resources/database-users.d.ts.map +1 -0
- package/dist/resources/databases.d.ts +84 -0
- package/dist/resources/databases.d.ts.map +1 -0
- package/dist/resources/deployments.d.ts +90 -0
- package/dist/resources/deployments.d.ts.map +1 -0
- package/dist/resources/firewall-rules.d.ts +84 -0
- package/dist/resources/firewall-rules.d.ts.map +1 -0
- package/dist/resources/monitors.d.ts +85 -0
- package/dist/resources/monitors.d.ts.map +1 -0
- package/dist/resources/nginx-templates.d.ts +95 -0
- package/dist/resources/nginx-templates.d.ts.map +1 -0
- package/dist/resources/recipes.d.ts +99 -0
- package/dist/resources/recipes.d.ts.map +1 -0
- package/dist/resources/redirect-rules.d.ts +85 -0
- package/dist/resources/redirect-rules.d.ts.map +1 -0
- package/dist/resources/scheduled-jobs.d.ts +84 -0
- package/dist/resources/scheduled-jobs.d.ts.map +1 -0
- package/dist/resources/security-rules.d.ts +85 -0
- package/dist/resources/security-rules.d.ts.map +1 -0
- package/dist/resources/servers.d.ts +199 -0
- package/dist/resources/servers.d.ts.map +1 -0
- package/dist/resources/sites.d.ts +216 -0
- package/dist/resources/sites.d.ts.map +1 -0
- package/dist/resources/ssh-keys.d.ts +83 -0
- package/dist/resources/ssh-keys.d.ts.map +1 -0
- package/dist/test-utils.d.ts +27 -0
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/test-utils.js +38 -0
- package/dist/test-utils.js.map +1 -0
- package/package.json +37 -1
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { CreateDatabaseUserData, ForgeDatabaseUser, HttpClient } from "@studiometa/forge-api";
|
|
2
|
+
import { BaseCollection } from "./base.ts";
|
|
3
|
+
import { AsyncPaginatedIterator } from "../pagination.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Options for listing database users.
|
|
6
|
+
*/
|
|
7
|
+
export interface DatabaseUserListOptions {
|
|
8
|
+
/** Page number to fetch (1-indexed). */
|
|
9
|
+
page?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Collection of database users on a server.
|
|
13
|
+
*
|
|
14
|
+
* Access via `forge.server(id).databaseUsers`.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const users = await forge.server(123).databaseUsers.list();
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class DatabaseUsersCollection extends BaseCollection {
|
|
22
|
+
private readonly serverId;
|
|
23
|
+
/** @internal */
|
|
24
|
+
constructor(client: HttpClient, serverId: number);
|
|
25
|
+
private get basePath();
|
|
26
|
+
/**
|
|
27
|
+
* List database users on this server.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* const users = await forge.server(123).databaseUsers.list();
|
|
32
|
+
*
|
|
33
|
+
* // Fetch a specific page:
|
|
34
|
+
* const page2 = await forge.server(123).databaseUsers.list({ page: 2 });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
list(options?: DatabaseUserListOptions): Promise<ForgeDatabaseUser[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Iterate over all database users across all pages.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* for await (const user of forge.server(123).databaseUsers.all()) {
|
|
44
|
+
* console.log(user);
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* // Or collect all at once:
|
|
48
|
+
* const users = await forge.server(123).databaseUsers.all().toArray();
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
all(options?: Omit<DatabaseUserListOptions, "page">): AsyncPaginatedIterator<ForgeDatabaseUser>;
|
|
52
|
+
/**
|
|
53
|
+
* Get a specific database user.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* const user = await forge.server(123).databaseUsers.get(789);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
get(userId: number): Promise<ForgeDatabaseUser>;
|
|
61
|
+
/**
|
|
62
|
+
* Create a new database user.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const user = await forge.server(123).databaseUsers.create({
|
|
67
|
+
* name: 'forge',
|
|
68
|
+
* password: 'secret',
|
|
69
|
+
* databases: [1, 2],
|
|
70
|
+
* });
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
create(data: CreateDatabaseUserData): Promise<ForgeDatabaseUser>;
|
|
74
|
+
/**
|
|
75
|
+
* Delete a database user.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* await forge.server(123).databaseUsers.delete(789);
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
delete(userId: number): Promise<void>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=database-users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-users.d.ts","sourceRoot":"","sources":["../../src/resources/database-users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAGtB,iBAAiB,EACjB,UAAU,EACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,qBAAa,uBAAwB,SAAQ,cAAc;IAIvD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAH3B,gBAAgB;gBAEd,MAAM,EAAE,UAAU,EACD,QAAQ,EAAE,MAAM;IAKnC,OAAO,KAAK,QAAQ,GAEnB;IAED;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAM/E;;;;;;;;;;;;OAYG;IACH,GAAG,CACD,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,MAAM,CAAM,GAClD,sBAAsB,CAAC,iBAAiB,CAAC;IAI5C;;;;;;;OAOG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKrD;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKtE;;;;;;;OAOG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG5C"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { CreateDatabaseData, ForgeDatabase, HttpClient } from "@studiometa/forge-api";
|
|
2
|
+
import { BaseCollection } from "./base.ts";
|
|
3
|
+
import { AsyncPaginatedIterator } from "../pagination.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Options for listing databases.
|
|
6
|
+
*/
|
|
7
|
+
export interface DatabaseListOptions {
|
|
8
|
+
/** Page number to fetch (1-indexed). */
|
|
9
|
+
page?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Collection of databases on a server.
|
|
13
|
+
*
|
|
14
|
+
* Access via `forge.server(id).databases`.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const dbs = await forge.server(123).databases.list();
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class DatabasesCollection extends BaseCollection {
|
|
22
|
+
private readonly serverId;
|
|
23
|
+
/** @internal */
|
|
24
|
+
constructor(client: HttpClient, serverId: number);
|
|
25
|
+
private get basePath();
|
|
26
|
+
/**
|
|
27
|
+
* List databases on this server.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* const dbs = await forge.server(123).databases.list();
|
|
32
|
+
*
|
|
33
|
+
* // Fetch a specific page:
|
|
34
|
+
* const page2 = await forge.server(123).databases.list({ page: 2 });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
list(options?: DatabaseListOptions): Promise<ForgeDatabase[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Iterate over all databases across all pages.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* for await (const db of forge.server(123).databases.all()) {
|
|
44
|
+
* console.log(db);
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* // Or collect all at once:
|
|
48
|
+
* const dbs = await forge.server(123).databases.all().toArray();
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
all(options?: Omit<DatabaseListOptions, "page">): AsyncPaginatedIterator<ForgeDatabase>;
|
|
52
|
+
/**
|
|
53
|
+
* Get a specific database.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* const db = await forge.server(123).databases.get(789);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
get(databaseId: number): Promise<ForgeDatabase>;
|
|
61
|
+
/**
|
|
62
|
+
* Create a new database.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const db = await forge.server(123).databases.create({
|
|
67
|
+
* name: 'myapp',
|
|
68
|
+
* user: 'admin',
|
|
69
|
+
* password: 'secret',
|
|
70
|
+
* });
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
create(data: CreateDatabaseData): Promise<ForgeDatabase>;
|
|
74
|
+
/**
|
|
75
|
+
* Delete a database.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* await forge.server(123).databases.delete(789);
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
delete(databaseId: number): Promise<void>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=databases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"databases.d.ts","sourceRoot":"","sources":["../../src/resources/databases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,UAAU,EAGX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;IAInD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAH3B,gBAAgB;gBAEd,MAAM,EAAE,UAAU,EACD,QAAQ,EAAE,MAAM;IAKnC,OAAO,KAAK,QAAQ,GAEnB;IAED;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAMvE;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAM,GAAG,sBAAsB,CAAC,aAAa,CAAC;IAI3F;;;;;;;OAOG;IACG,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAKrD;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC;IAK9D;;;;;;;OAOG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhD"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { ForgeDeployment, HttpClient } from "@studiometa/forge-api";
|
|
2
|
+
import { BaseCollection } from "./base.ts";
|
|
3
|
+
import { AsyncPaginatedIterator } from "../pagination.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Options for listing deployments.
|
|
6
|
+
*/
|
|
7
|
+
export interface DeploymentListOptions {
|
|
8
|
+
/** Page number to fetch (1-indexed). */
|
|
9
|
+
page?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Collection of deployments for a site.
|
|
13
|
+
*
|
|
14
|
+
* Access via `forge.server(id).site(id).deployments`.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const deployments = await forge.server(123).site(456).deployments.list();
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class DeploymentsCollection extends BaseCollection {
|
|
22
|
+
private readonly serverId;
|
|
23
|
+
private readonly siteId;
|
|
24
|
+
/** @internal */
|
|
25
|
+
constructor(client: HttpClient, serverId: number, siteId: number);
|
|
26
|
+
private get basePath();
|
|
27
|
+
/**
|
|
28
|
+
* List deployments for this site.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* const deployments = await forge.server(123).site(456).deployments.list();
|
|
33
|
+
*
|
|
34
|
+
* // Fetch a specific page:
|
|
35
|
+
* const page2 = await forge.server(123).site(456).deployments.list({ page: 2 });
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
list(options?: DeploymentListOptions): Promise<ForgeDeployment[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Iterate over all deployments across all pages.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* for await (const deployment of forge.server(123).site(456).deployments.all()) {
|
|
45
|
+
* console.log(deployment);
|
|
46
|
+
* }
|
|
47
|
+
*
|
|
48
|
+
* // Or collect all at once:
|
|
49
|
+
* const deployments = await forge.server(123).site(456).deployments.all().toArray();
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
all(options?: Omit<DeploymentListOptions, "page">): AsyncPaginatedIterator<ForgeDeployment>;
|
|
53
|
+
/**
|
|
54
|
+
* Get a specific deployment.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* const deployment = await forge.server(123).site(456).deployments.get(789);
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
get(deploymentId: number): Promise<ForgeDeployment>;
|
|
62
|
+
/**
|
|
63
|
+
* Get the output of a deployment.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* const output = await forge.server(123).site(456).deployments.output(789);
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
output(deploymentId: number): Promise<string>;
|
|
71
|
+
/**
|
|
72
|
+
* Get the deployment script.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* const script = await forge.server(123).site(456).deployments.script();
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
script(): Promise<string>;
|
|
80
|
+
/**
|
|
81
|
+
* Update the deployment script.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* await forge.server(123).site(456).deployments.updateScript('npm run build && ...');
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
updateScript(content: string): Promise<void>;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=deployments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployments.d.ts","sourceRoot":"","sources":["../../src/resources/deployments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EAGX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,SAAQ,cAAc;IAIrD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,gBAAgB;gBAEd,MAAM,EAAE,UAAU,EACD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM;IAKjC,OAAO,KAAK,QAAQ,GAEnB;IAED;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAM3E;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,OAAO,GAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAM,GAAG,sBAAsB,CAAC,eAAe,CAAC;IAI/F;;;;;;;OAOG;IACG,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAKzD;;;;;;;OAOG;IACG,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAInD;;;;;;;OAOG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAM/B;;;;;;;OAOG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKnD"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { CreateFirewallRuleData, ForgeFirewallRule, HttpClient } from "@studiometa/forge-api";
|
|
2
|
+
import { BaseCollection } from "./base.ts";
|
|
3
|
+
import { AsyncPaginatedIterator } from "../pagination.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Options for listing firewall rules.
|
|
6
|
+
*/
|
|
7
|
+
export interface FirewallRuleListOptions {
|
|
8
|
+
/** Page number to fetch (1-indexed). */
|
|
9
|
+
page?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Collection of firewall rules on a server.
|
|
13
|
+
*
|
|
14
|
+
* Access via `forge.server(id).firewallRules`.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const rules = await forge.server(123).firewallRules.list();
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class FirewallRulesCollection extends BaseCollection {
|
|
22
|
+
private readonly serverId;
|
|
23
|
+
/** @internal */
|
|
24
|
+
constructor(client: HttpClient, serverId: number);
|
|
25
|
+
private get basePath();
|
|
26
|
+
/**
|
|
27
|
+
* List firewall rules on this server.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* const rules = await forge.server(123).firewallRules.list();
|
|
32
|
+
*
|
|
33
|
+
* // Fetch a specific page:
|
|
34
|
+
* const page2 = await forge.server(123).firewallRules.list({ page: 2 });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
list(options?: FirewallRuleListOptions): Promise<ForgeFirewallRule[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Iterate over all firewall rules across all pages.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* for await (const rule of forge.server(123).firewallRules.all()) {
|
|
44
|
+
* console.log(rule);
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* // Or collect all at once:
|
|
48
|
+
* const rules = await forge.server(123).firewallRules.all().toArray();
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
all(options?: Omit<FirewallRuleListOptions, "page">): AsyncPaginatedIterator<ForgeFirewallRule>;
|
|
52
|
+
/**
|
|
53
|
+
* Get a specific firewall rule.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* const rule = await forge.server(123).firewallRules.get(789);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
get(ruleId: number): Promise<ForgeFirewallRule>;
|
|
61
|
+
/**
|
|
62
|
+
* Create a new firewall rule.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const rule = await forge.server(123).firewallRules.create({
|
|
67
|
+
* name: 'Allow HTTP',
|
|
68
|
+
* port: 80,
|
|
69
|
+
* type: 'allow',
|
|
70
|
+
* });
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
create(data: CreateFirewallRuleData): Promise<ForgeFirewallRule>;
|
|
74
|
+
/**
|
|
75
|
+
* Delete a firewall rule.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```ts
|
|
79
|
+
* await forge.server(123).firewallRules.delete(789);
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
delete(ruleId: number): Promise<void>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=firewall-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firewall-rules.d.ts","sourceRoot":"","sources":["../../src/resources/firewall-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAGtB,iBAAiB,EACjB,UAAU,EACX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,qBAAa,uBAAwB,SAAQ,cAAc;IAIvD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAH3B,gBAAgB;gBAEd,MAAM,EAAE,UAAU,EACD,QAAQ,EAAE,MAAM;IAKnC,OAAO,KAAK,QAAQ,GAEnB;IAED;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAM/E;;;;;;;;;;;;OAYG;IACH,GAAG,CACD,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,MAAM,CAAM,GAClD,sBAAsB,CAAC,iBAAiB,CAAC;IAI5C;;;;;;;OAOG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKrD;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKtE;;;;;;;OAOG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG5C"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { CreateMonitorData, ForgeMonitor, HttpClient } from "@studiometa/forge-api";
|
|
2
|
+
import { BaseCollection } from "./base.ts";
|
|
3
|
+
import { AsyncPaginatedIterator } from "../pagination.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Options for listing monitors.
|
|
6
|
+
*/
|
|
7
|
+
export interface MonitorListOptions {
|
|
8
|
+
/** Page number to fetch (1-indexed). */
|
|
9
|
+
page?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Collection of server monitors.
|
|
13
|
+
*
|
|
14
|
+
* Access via `forge.server(id).monitors`.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const monitors = await forge.server(123).monitors.list();
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class MonitorsCollection extends BaseCollection {
|
|
22
|
+
private readonly serverId;
|
|
23
|
+
/** @internal */
|
|
24
|
+
constructor(client: HttpClient, serverId: number);
|
|
25
|
+
private get basePath();
|
|
26
|
+
/**
|
|
27
|
+
* List monitors on this server.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* const monitors = await forge.server(123).monitors.list();
|
|
32
|
+
*
|
|
33
|
+
* // Fetch a specific page:
|
|
34
|
+
* const page2 = await forge.server(123).monitors.list({ page: 2 });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
list(options?: MonitorListOptions): Promise<ForgeMonitor[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Iterate over all monitors across all pages.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* for await (const monitor of forge.server(123).monitors.all()) {
|
|
44
|
+
* console.log(monitor);
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* // Or collect all at once:
|
|
48
|
+
* const monitors = await forge.server(123).monitors.all().toArray();
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
all(options?: Omit<MonitorListOptions, "page">): AsyncPaginatedIterator<ForgeMonitor>;
|
|
52
|
+
/**
|
|
53
|
+
* Get a specific monitor.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* const monitor = await forge.server(123).monitors.get(789);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
get(monitorId: number): Promise<ForgeMonitor>;
|
|
61
|
+
/**
|
|
62
|
+
* Create a new monitor.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const monitor = await forge.server(123).monitors.create({
|
|
67
|
+
* type: 'cpu_load',
|
|
68
|
+
* operator: 'gte',
|
|
69
|
+
* threshold: 80,
|
|
70
|
+
* minutes: 5,
|
|
71
|
+
* });
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
create(data: CreateMonitorData): Promise<ForgeMonitor>;
|
|
75
|
+
/**
|
|
76
|
+
* Delete a monitor.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```ts
|
|
80
|
+
* await forge.server(123).monitors.delete(789);
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
delete(monitorId: number): Promise<void>;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=monitors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitors.d.ts","sourceRoot":"","sources":["../../src/resources/monitors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,UAAU,EAGX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;IAIlD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAH3B,gBAAgB;gBAEd,MAAM,EAAE,UAAU,EACD,QAAQ,EAAE,MAAM;IAKnC,OAAO,KAAK,QAAQ,GAEnB;IAED;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAMrE;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAM,GAAG,sBAAsB,CAAC,YAAY,CAAC;IAIzF;;;;;;;OAOG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAKnD;;;;;;;;;;;;OAYG;IACG,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAK5D;;;;;;;OAOG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG/C"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { CreateNginxTemplateData, ForgeNginxTemplate, HttpClient } from "@studiometa/forge-api";
|
|
2
|
+
import { BaseCollection } from "./base.ts";
|
|
3
|
+
import { AsyncPaginatedIterator } from "../pagination.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Options for listing Nginx templates.
|
|
6
|
+
*/
|
|
7
|
+
export interface NginxTemplateListOptions {
|
|
8
|
+
/** Page number to fetch (1-indexed). */
|
|
9
|
+
page?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Collection of Nginx templates on a server.
|
|
13
|
+
*
|
|
14
|
+
* Access via `forge.server(id).nginxTemplates`.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const templates = await forge.server(123).nginxTemplates.list();
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class NginxTemplatesCollection extends BaseCollection {
|
|
22
|
+
private readonly serverId;
|
|
23
|
+
/** @internal */
|
|
24
|
+
constructor(client: HttpClient, serverId: number);
|
|
25
|
+
private get basePath();
|
|
26
|
+
/**
|
|
27
|
+
* List Nginx templates on this server.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* const templates = await forge.server(123).nginxTemplates.list();
|
|
32
|
+
*
|
|
33
|
+
* // Fetch a specific page:
|
|
34
|
+
* const page2 = await forge.server(123).nginxTemplates.list({ page: 2 });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
list(options?: NginxTemplateListOptions): Promise<ForgeNginxTemplate[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Iterate over all Nginx templates across all pages.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* for await (const template of forge.server(123).nginxTemplates.all()) {
|
|
44
|
+
* console.log(template);
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* // Or collect all at once:
|
|
48
|
+
* const templates = await forge.server(123).nginxTemplates.all().toArray();
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
all(options?: Omit<NginxTemplateListOptions, "page">): AsyncPaginatedIterator<ForgeNginxTemplate>;
|
|
52
|
+
/**
|
|
53
|
+
* Get a specific Nginx template.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* const template = await forge.server(123).nginxTemplates.get(789);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
get(templateId: number): Promise<ForgeNginxTemplate>;
|
|
61
|
+
/**
|
|
62
|
+
* Create a new Nginx template.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const template = await forge.server(123).nginxTemplates.create({
|
|
67
|
+
* name: 'Laravel Template',
|
|
68
|
+
* content: 'server { ... }',
|
|
69
|
+
* });
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
create(data: CreateNginxTemplateData): Promise<ForgeNginxTemplate>;
|
|
73
|
+
/**
|
|
74
|
+
* Update an existing Nginx template.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```ts
|
|
78
|
+
* const template = await forge.server(123).nginxTemplates.update(789, {
|
|
79
|
+
* name: 'Updated Template',
|
|
80
|
+
* content: 'server { ... }',
|
|
81
|
+
* });
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
update(templateId: number, data: Partial<CreateNginxTemplateData>): Promise<ForgeNginxTemplate>;
|
|
85
|
+
/**
|
|
86
|
+
* Delete a Nginx template.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```ts
|
|
90
|
+
* await forge.server(123).nginxTemplates.delete(789);
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
delete(templateId: number): Promise<void>;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=nginx-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nginx-templates.d.ts","sourceRoot":"","sources":["../../src/resources/nginx-templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAClB,UAAU,EAGX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,qBAAa,wBAAyB,SAAQ,cAAc;IAIxD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAH3B,gBAAgB;gBAEd,MAAM,EAAE,UAAU,EACD,QAAQ,EAAE,MAAM;IAKnC,OAAO,KAAK,QAAQ,GAEnB;IAED;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAMjF;;;;;;;;;;;;OAYG;IACH,GAAG,CACD,OAAO,GAAE,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAM,GACnD,sBAAsB,CAAC,kBAAkB,CAAC;IAM7C;;;;;;;OAOG;IACG,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAK1D;;;;;;;;;;OAUG;IACG,MAAM,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAKxE;;;;;;;;;;OAUG;IACG,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,CAAC,uBAAuB,CAAC,GACrC,OAAO,CAAC,kBAAkB,CAAC;IAQ9B;;;;;;;OAOG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhD"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { CreateRecipeData, ForgeRecipe, HttpClient } from "@studiometa/forge-api";
|
|
2
|
+
import { BaseCollection } from "./base.ts";
|
|
3
|
+
import { AsyncPaginatedIterator } from "../pagination.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Options for listing recipes.
|
|
6
|
+
*/
|
|
7
|
+
export interface RecipeListOptions {
|
|
8
|
+
/** Page number to fetch (1-indexed). */
|
|
9
|
+
page?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Options for running a recipe.
|
|
13
|
+
*/
|
|
14
|
+
export interface RunRecipeOptions {
|
|
15
|
+
/** Server IDs to run the recipe on. */
|
|
16
|
+
servers: number[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Collection of recipes.
|
|
20
|
+
*
|
|
21
|
+
* Access via `forge.recipes`.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* const recipes = await forge.recipes.list();
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare class RecipesCollection extends BaseCollection {
|
|
29
|
+
/** @internal */
|
|
30
|
+
constructor(client: HttpClient);
|
|
31
|
+
private get basePath();
|
|
32
|
+
/**
|
|
33
|
+
* List all recipes.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* const recipes = await forge.recipes.list();
|
|
38
|
+
*
|
|
39
|
+
* // Fetch a specific page:
|
|
40
|
+
* const page2 = await forge.recipes.list({ page: 2 });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
list(options?: RecipeListOptions): Promise<ForgeRecipe[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Iterate over all recipes across all pages.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* for await (const recipe of forge.recipes.all()) {
|
|
50
|
+
* console.log(recipe);
|
|
51
|
+
* }
|
|
52
|
+
*
|
|
53
|
+
* // Or collect all at once:
|
|
54
|
+
* const recipes = await forge.recipes.all().toArray();
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
all(options?: Omit<RecipeListOptions, "page">): AsyncPaginatedIterator<ForgeRecipe>;
|
|
58
|
+
/**
|
|
59
|
+
* Get a specific recipe.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* const recipe = await forge.recipes.get(789);
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
get(recipeId: number): Promise<ForgeRecipe>;
|
|
67
|
+
/**
|
|
68
|
+
* Create a new recipe.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* const recipe = await forge.recipes.create({
|
|
73
|
+
* name: 'Install Node',
|
|
74
|
+
* user: 'root',
|
|
75
|
+
* script: 'curl -fsSL https://deb.nodesource.com/setup_20.x | bash -',
|
|
76
|
+
* });
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
create(data: CreateRecipeData): Promise<ForgeRecipe>;
|
|
80
|
+
/**
|
|
81
|
+
* Delete a recipe.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* await forge.recipes.delete(789);
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
delete(recipeId: number): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Run a recipe on one or more servers.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* await forge.recipes.run(789, { servers: [123, 456] });
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
run(recipeId: number, options: RunRecipeOptions): Promise<void>;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=recipes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/resources/recipes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EAGX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,SAAQ,cAAc;IACnD,gBAAgB;gBACJ,MAAM,EAAE,UAAU;IAI9B,OAAO,KAAK,QAAQ,GAEnB;IAED;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAMnE;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAM,GAAG,sBAAsB,CAAC,WAAW,CAAC;IAIvF;;;;;;;OAOG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAKjD;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAK1D;;;;;;;OAOG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C;;;;;;;OAOG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAGtE"}
|