@microagi/alchemy-gcp 0.3.0 → 0.5.1
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/CHANGELOG.md +124 -0
- package/lib/ArtifactRegistry/Operations.d.ts +47 -0
- package/lib/ArtifactRegistry/Operations.d.ts.map +1 -0
- package/lib/ArtifactRegistry/Operations.js +47 -0
- package/lib/ArtifactRegistry/Operations.js.map +1 -0
- package/lib/ArtifactRegistry/Repository.d.ts +263 -0
- package/lib/ArtifactRegistry/Repository.d.ts.map +1 -0
- package/lib/ArtifactRegistry/Repository.js +256 -0
- package/lib/ArtifactRegistry/Repository.js.map +1 -0
- package/lib/ArtifactRegistry/Types.d.ts +32 -0
- package/lib/ArtifactRegistry/Types.d.ts.map +1 -0
- package/lib/ArtifactRegistry/Types.js +12 -0
- package/lib/ArtifactRegistry/Types.js.map +1 -0
- package/lib/ArtifactRegistry/Validation.d.ts +43 -0
- package/lib/ArtifactRegistry/Validation.d.ts.map +1 -0
- package/lib/ArtifactRegistry/Validation.js +95 -0
- package/lib/ArtifactRegistry/Validation.js.map +1 -0
- package/lib/ArtifactRegistry/index.d.ts +4 -0
- package/lib/ArtifactRegistry/index.d.ts.map +1 -0
- package/lib/ArtifactRegistry/index.js +2 -0
- package/lib/ArtifactRegistry/index.js.map +1 -0
- package/lib/Auth/Credentials.d.ts +2 -1
- package/lib/Auth/Credentials.d.ts.map +1 -1
- package/lib/Auth/Credentials.js +3 -2
- package/lib/Auth/Credentials.js.map +1 -1
- package/lib/CloudResourceManager/Project.d.ts +1 -1
- package/lib/Compute/GlobalAddress.d.ts +1 -1
- package/lib/Compute/Network.d.ts +1 -1
- package/lib/Compute/SharedVpcHost.d.ts +1 -1
- package/lib/Compute/SharedVpcServiceProject.d.ts +1 -1
- package/lib/Compute/Subnetwork.d.ts +1 -1
- package/lib/Container/Cluster.d.ts +1 -1
- package/lib/Container/NodePool.d.ts +1 -1
- package/lib/ManagedLustre/Instance.d.ts +1 -1
- package/lib/Providers.d.ts +1 -1
- package/lib/Providers.d.ts.map +1 -1
- package/lib/Providers.js +9 -1
- package/lib/Providers.js.map +1 -1
- package/lib/Run/Job.d.ts +1 -1
- package/lib/Run/Service.d.ts +1 -1
- package/lib/ServiceNetworking/PsaConnection.d.ts +1 -1
- package/lib/ServiceUsage/ApiEnable.d.ts +1 -1
- package/lib/Sqladmin/Database.d.ts +82 -0
- package/lib/Sqladmin/Database.d.ts.map +1 -0
- package/lib/Sqladmin/Database.js +87 -0
- package/lib/Sqladmin/Database.js.map +1 -0
- package/lib/Sqladmin/Instance.d.ts +234 -0
- package/lib/Sqladmin/Instance.d.ts.map +1 -0
- package/lib/Sqladmin/Instance.js +251 -0
- package/lib/Sqladmin/Instance.js.map +1 -0
- package/lib/Sqladmin/Operations.d.ts +41 -0
- package/lib/Sqladmin/Operations.d.ts.map +1 -0
- package/lib/Sqladmin/Operations.js +42 -0
- package/lib/Sqladmin/Operations.js.map +1 -0
- package/lib/Sqladmin/Types.d.ts +82 -0
- package/lib/Sqladmin/Types.d.ts.map +1 -0
- package/lib/Sqladmin/Types.js +28 -0
- package/lib/Sqladmin/Types.js.map +1 -0
- package/lib/Sqladmin/User.d.ts +110 -0
- package/lib/Sqladmin/User.d.ts.map +1 -0
- package/lib/Sqladmin/User.js +156 -0
- package/lib/Sqladmin/User.js.map +1 -0
- package/lib/Sqladmin/Validation.d.ts +60 -0
- package/lib/Sqladmin/Validation.d.ts.map +1 -0
- package/lib/Sqladmin/Validation.js +125 -0
- package/lib/Sqladmin/Validation.js.map +1 -0
- package/lib/Sqladmin/index.d.ts +9 -0
- package/lib/Sqladmin/index.d.ts.map +1 -0
- package/lib/Sqladmin/index.js +5 -0
- package/lib/Sqladmin/index.js.map +1 -0
- package/lib/Tags.d.ts +4 -4
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/package.json +2 -2
- package/src/ArtifactRegistry/Operations.ts +79 -0
- package/src/ArtifactRegistry/Repository.ts +628 -0
- package/src/ArtifactRegistry/Types.ts +49 -0
- package/src/ArtifactRegistry/Validation.ts +112 -0
- package/src/ArtifactRegistry/index.ts +10 -0
- package/src/Auth/Credentials.ts +3 -2
- package/src/Providers.ts +15 -0
- package/src/Sqladmin/Database.ts +209 -0
- package/src/Sqladmin/Instance.ts +620 -0
- package/src/Sqladmin/Operations.ts +73 -0
- package/src/Sqladmin/Types.ts +101 -0
- package/src/Sqladmin/User.ts +333 -0
- package/src/Sqladmin/Validation.ts +148 -0
- package/src/Sqladmin/index.ts +19 -0
- package/src/index.ts +2 -0
|
@@ -169,5 +169,5 @@ export type ManagedLustreInstanceAttributes = {
|
|
|
169
169
|
};
|
|
170
170
|
export type ManagedLustreInstance = Resource<"GCP.ManagedLustreInstance", ManagedLustreInstanceProps, ManagedLustreInstanceAttributes, never, GCP.Providers>;
|
|
171
171
|
export declare const ManagedLustreInstance: import("alchemy").ResourceClass<ManagedLustreInstance>;
|
|
172
|
-
export declare const ManagedLustreInstanceProvider: () => import("effect/Layer").Layer<Provider.Provider<ManagedLustreInstance>, never, import("
|
|
172
|
+
export declare const ManagedLustreInstanceProvider: () => import("effect/Layer").Layer<Provider.Provider<ManagedLustreInstance>, never, import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
|
|
173
173
|
//# sourceMappingURL=Instance.d.ts.map
|
package/lib/Providers.d.ts
CHANGED
|
@@ -19,6 +19,6 @@ export type ProviderRequirements = Layer.Services<ReturnType<typeof providers>>;
|
|
|
19
19
|
* re-provide it here, mirroring `AWS/Providers.ts` and
|
|
20
20
|
* `Cloudflare/Providers.ts`.
|
|
21
21
|
*/
|
|
22
|
-
export declare const providers: () => Layer.Layer<import("@distilled.cloud/gcp").Credentials | Providers, never, import("
|
|
22
|
+
export declare const providers: () => Layer.Layer<import("@distilled.cloud/gcp").Credentials | Providers, never, import("alchemy").Stack | import("alchemy").Stage | import("effect/unstable/http/HttpClient").HttpClient | import("alchemy").AuthProviders | import("alchemy/Auth/Profile").Profile>;
|
|
23
23
|
export {};
|
|
24
24
|
//# sourceMappingURL=Providers.d.ts.map
|
package/lib/Providers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Providers.d.ts","sourceRoot":"","sources":["../src/Providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;;
|
|
1
|
+
{"version":3,"file":"Providers.d.ts","sourceRoot":"","sources":["../src/Providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;;AAiCtC,qBAAa,SAAU,SAAQ,cAA+C;CAAG;AAEjF,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC;AAEhF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,uQAmDnB,CAAC"}
|
package/lib/Providers.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as Provider from "alchemy/Provider";
|
|
2
2
|
import * as Layer from "effect/Layer";
|
|
3
|
+
import { ArtifactRegistryRepository, ArtifactRegistryRepositoryProvider, } from "./ArtifactRegistry/Repository.js";
|
|
3
4
|
import { GCPAuth } from "./Auth/AuthProvider.js";
|
|
4
5
|
import { fromAuthProvider } from "./Auth/Credentials.js";
|
|
5
6
|
import { Project, ProjectProvider } from "./CloudResourceManager/Project.js";
|
|
@@ -15,6 +16,9 @@ import { Job, JobProvider } from "./Run/Job.js";
|
|
|
15
16
|
import { Service, ServiceProvider } from "./Run/Service.js";
|
|
16
17
|
import { PsaConnection, PsaConnectionProvider, } from "./ServiceNetworking/PsaConnection.js";
|
|
17
18
|
import { ApiEnable, ApiEnableProvider } from "./ServiceUsage/ApiEnable.js";
|
|
19
|
+
import { SqlDatabase, SqlDatabaseProvider } from "./Sqladmin/Database.js";
|
|
20
|
+
import { SqlInstance, SqlInstanceProvider } from "./Sqladmin/Instance.js";
|
|
21
|
+
import { SqlUser, SqlUserProvider } from "./Sqladmin/User.js";
|
|
18
22
|
export class Providers extends Provider.ProviderCollection()("GCP") {
|
|
19
23
|
}
|
|
20
24
|
/**
|
|
@@ -46,7 +50,11 @@ export const providers = () => Layer.effect(Providers, Provider.collection([
|
|
|
46
50
|
ManagedLustreInstance,
|
|
47
51
|
Service,
|
|
48
52
|
Job,
|
|
49
|
-
|
|
53
|
+
SqlInstance,
|
|
54
|
+
SqlDatabase,
|
|
55
|
+
SqlUser,
|
|
56
|
+
ArtifactRegistryRepository,
|
|
57
|
+
])).pipe(Layer.provide(Layer.mergeAll(ProjectProvider(), ClusterProvider(), NodePoolProvider(), ApiEnableProvider(), NetworkProvider(), SubnetworkProvider(), GlobalAddressProvider(), SharedVpcHostProvider(), SharedVpcServiceProjectProvider(), PsaConnectionProvider(), ManagedLustreInstanceProvider(), ServiceProvider(), JobProvider(), SqlInstanceProvider(), SqlDatabaseProvider(), SqlUserProvider(), ArtifactRegistryRepositoryProvider())), Layer.provideMerge(fromAuthProvider()), Layer.provideMerge(GCPAuth),
|
|
50
58
|
// Auth/config failures (missing ADC, malformed profile) become
|
|
51
59
|
// unrecoverable defects rather than typed errors — mirrors
|
|
52
60
|
// `AWS/Providers.ts` and `Cloudflare/Providers.ts`. Resource lifecycle
|
package/lib/Providers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Providers.js","sourceRoot":"","sources":["../src/Providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EACL,uBAAuB,EACvB,+BAA+B,GAChC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EACL,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,qBAAqB,GACtB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"Providers.js","sourceRoot":"","sources":["../src/Providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,GACnC,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EACL,uBAAuB,EACvB,+BAA+B,GAChC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EACL,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,aAAa,EACb,qBAAqB,GACtB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,OAAO,SAAU,SAAQ,QAAQ,CAAC,kBAAkB,EAAa,CAAC,KAAK,CAAC;CAAG;AAIjF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,EAAE,CAC5B,KAAK,CAAC,MAAM,CACV,SAAS,EACT,QAAQ,CAAC,UAAU,CAAC;IAClB,OAAO;IACP,OAAO;IACP,QAAQ;IACR,SAAS;IACT,OAAO;IACP,UAAU;IACV,aAAa;IACb,aAAa;IACb,uBAAuB;IACvB,aAAa;IACb,qBAAqB;IACrB,OAAO;IACP,GAAG;IACH,WAAW;IACX,WAAW;IACX,OAAO;IACP,0BAA0B;CAC3B,CAAC,CACH,CAAC,IAAI,CACJ,KAAK,CAAC,OAAO,CACX,KAAK,CAAC,QAAQ,CACZ,eAAe,EAAE,EACjB,eAAe,EAAE,EACjB,gBAAgB,EAAE,EAClB,iBAAiB,EAAE,EACnB,eAAe,EAAE,EACjB,kBAAkB,EAAE,EACpB,qBAAqB,EAAE,EACvB,qBAAqB,EAAE,EACvB,+BAA+B,EAAE,EACjC,qBAAqB,EAAE,EACvB,6BAA6B,EAAE,EAC/B,eAAe,EAAE,EACjB,WAAW,EAAE,EACb,mBAAmB,EAAE,EACrB,mBAAmB,EAAE,EACrB,eAAe,EAAE,EACjB,kCAAkC,EAAE,CACrC,CACF,EACD,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,EACtC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC;AAC3B,+DAA+D;AAC/D,2DAA2D;AAC3D,uEAAuE;AACvE,0DAA0D;AAC1D,KAAK,CAAC,KAAK,CACZ,CAAC"}
|
package/lib/Run/Job.d.ts
CHANGED
|
@@ -163,5 +163,5 @@ export type JobAttributes = {
|
|
|
163
163
|
};
|
|
164
164
|
export type Job = Resource<"GCP.Job", JobProps, JobAttributes, RunIamBindingContract, GCP.Providers>;
|
|
165
165
|
export declare const Job: import("alchemy").ResourceClass<Job>;
|
|
166
|
-
export declare const JobProvider: () => import("effect/Layer").Layer<Provider.Provider<Job>, never, import("
|
|
166
|
+
export declare const JobProvider: () => import("effect/Layer").Layer<Provider.Provider<Job>, never, import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
|
|
167
167
|
//# sourceMappingURL=Job.d.ts.map
|
package/lib/Run/Service.d.ts
CHANGED
|
@@ -189,5 +189,5 @@ export type ServiceAttributes = {
|
|
|
189
189
|
};
|
|
190
190
|
export type Service = Resource<"GCP.Service", ServiceProps, ServiceAttributes, RunIamBindingContract, GCP.Providers>;
|
|
191
191
|
export declare const Service: import("alchemy").ResourceClass<Service>;
|
|
192
|
-
export declare const ServiceProvider: () => import("effect/Layer").Layer<Provider.Provider<Service>, never, import("
|
|
192
|
+
export declare const ServiceProvider: () => import("effect/Layer").Layer<Provider.Provider<Service>, never, import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
|
|
193
193
|
//# sourceMappingURL=Service.d.ts.map
|
|
@@ -80,5 +80,5 @@ export type PsaConnectionAttributes = {
|
|
|
80
80
|
};
|
|
81
81
|
export type PsaConnection = Resource<"GCP.PsaConnection", PsaConnectionProps, PsaConnectionAttributes, never, GCP.Providers>;
|
|
82
82
|
export declare const PsaConnection: import("alchemy").ResourceClass<PsaConnection>;
|
|
83
|
-
export declare const PsaConnectionProvider: () => import("effect/Layer").Layer<Provider.Provider<PsaConnection>, never, import("
|
|
83
|
+
export declare const PsaConnectionProvider: () => import("effect/Layer").Layer<Provider.Provider<PsaConnection>, never, import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
|
|
84
84
|
//# sourceMappingURL=PsaConnection.d.ts.map
|
|
@@ -74,5 +74,5 @@ export type ApiEnableAttributes = {
|
|
|
74
74
|
*/
|
|
75
75
|
export type ApiEnable = Resource<"GCP.ApiEnable", ApiEnableProps, ApiEnableAttributes, never, GCP.Providers>;
|
|
76
76
|
export declare const ApiEnable: import("alchemy").ResourceClass<ApiEnable>;
|
|
77
|
-
export declare const ApiEnableProvider: () => import("effect/Layer").Layer<Provider.Provider<ApiEnable>, never, import("
|
|
77
|
+
export declare const ApiEnableProvider: () => import("effect/Layer").Layer<Provider.Provider<ApiEnable>, never, import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
|
|
78
78
|
//# sourceMappingURL=ApiEnable.d.ts.map
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Resource } from "alchemy";
|
|
2
|
+
import * as Provider from "alchemy/Provider";
|
|
3
|
+
import type * as GCP from "../Providers.ts";
|
|
4
|
+
/**
|
|
5
|
+
* A logical Postgres database inside a Cloud SQL instance.
|
|
6
|
+
*
|
|
7
|
+
* Cloud SQL `databases` resources are extremely thin — name, charset,
|
|
8
|
+
* collation, parent instance. Use this resource to declaratively
|
|
9
|
+
* create a tenant database (one per app, one per team, etc.) and let
|
|
10
|
+
* alchemy track its lifecycle.
|
|
11
|
+
*
|
|
12
|
+
* **Adoption.** Cloud SQL databases carry NO labels. There is no
|
|
13
|
+
* server-side adoption marker we can stamp without polluting the
|
|
14
|
+
* collation field, so `read` is best-effort: it returns the observed
|
|
15
|
+
* shape if the database exists at the same logical address, and
|
|
16
|
+
* `undefined` otherwise. The caller is responsible for `--adopt` if
|
|
17
|
+
* they want to take over an existing physical database; we do not
|
|
18
|
+
* gate on labels here.
|
|
19
|
+
*
|
|
20
|
+
* **Replace triggers.** `project`, `instance`, `name`. Charset and
|
|
21
|
+
* collation are immutable post-create in practice — the API accepts
|
|
22
|
+
* a `patch` but ignores collation/charset drift, so we treat them as
|
|
23
|
+
* "set once, then forgotten" and only diff name/parent.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const db = yield* GCP.SqlDatabase("AppDb", {
|
|
28
|
+
* project: instance.project,
|
|
29
|
+
* instance: instance.name,
|
|
30
|
+
* name: "app",
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @see https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1/databases
|
|
35
|
+
*/
|
|
36
|
+
export type SqlDatabaseProps = {
|
|
37
|
+
/**
|
|
38
|
+
* GCP project ID hosting the parent instance. Immutable — replace.
|
|
39
|
+
* @see https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1/databases#Database
|
|
40
|
+
*/
|
|
41
|
+
project: string;
|
|
42
|
+
/**
|
|
43
|
+
* Parent Cloud SQL instance name (NOT the fully-qualified resource
|
|
44
|
+
* name; just the bare `name`). Immutable — replace.
|
|
45
|
+
*/
|
|
46
|
+
instance: string;
|
|
47
|
+
/**
|
|
48
|
+
* Database name. 1–64 chars; Postgres-specific naming applies (no
|
|
49
|
+
* reserved words, etc.). Immutable — replace if changed.
|
|
50
|
+
*/
|
|
51
|
+
name: string;
|
|
52
|
+
/**
|
|
53
|
+
* Server-side character set. Postgres-default is `UTF8`. Set at
|
|
54
|
+
* create; not honoured on patch.
|
|
55
|
+
* @see https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1/databases#Database.FIELDS.charset
|
|
56
|
+
*/
|
|
57
|
+
charset?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Collation. Postgres-default is `en_US.UTF8`. Set at create; not
|
|
60
|
+
* honoured on patch.
|
|
61
|
+
* @see https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1/databases#Database.FIELDS.collation
|
|
62
|
+
*/
|
|
63
|
+
collation?: string;
|
|
64
|
+
};
|
|
65
|
+
export type SqlDatabaseAttributes = {
|
|
66
|
+
/** Database name. */
|
|
67
|
+
name: string;
|
|
68
|
+
/** Parent instance name. */
|
|
69
|
+
instance: string;
|
|
70
|
+
/** Project ID. */
|
|
71
|
+
project: string;
|
|
72
|
+
/** Server-defined URL. */
|
|
73
|
+
selfLink: string;
|
|
74
|
+
/** Effective charset (server may default to `UTF8`). */
|
|
75
|
+
charset: string | undefined;
|
|
76
|
+
/** Effective collation. */
|
|
77
|
+
collation: string | undefined;
|
|
78
|
+
};
|
|
79
|
+
export type SqlDatabase = Resource<"GCP.SqlDatabase", SqlDatabaseProps, SqlDatabaseAttributes, never, GCP.Providers>;
|
|
80
|
+
export declare const SqlDatabase: import("alchemy").ResourceClass<SqlDatabase>;
|
|
81
|
+
export declare const SqlDatabaseProvider: () => import("effect/Layer").Layer<Provider.Provider<SqlDatabase>, never, import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
|
|
82
|
+
//# sourceMappingURL=Database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../src/Sqladmin/Database.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAI5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,2BAA2B;IAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,QAAQ,CAChC,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,EACL,GAAG,CAAC,SAAS,CACd,CAAC;AACF,eAAO,MAAM,WAAW,8CAA2C,CAAC;AAcpE,eAAO,MAAM,mBAAmB,8KAqG7B,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as sql from "@distilled.cloud/gcp/sqladmin-v1";
|
|
2
|
+
import { Resource } from "alchemy";
|
|
3
|
+
import { isResolved, somePropsAreDifferent } from "alchemy/Diff";
|
|
4
|
+
import * as Provider from "alchemy/Provider";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import { makeAwaitOperation } from "./Operations.js";
|
|
7
|
+
import { reshapeBadRequest, validateDatabaseName } from "./Validation.js";
|
|
8
|
+
export const SqlDatabase = Resource("GCP.SqlDatabase");
|
|
9
|
+
const toAttributes = (d, parent) => ({
|
|
10
|
+
name: parent.name,
|
|
11
|
+
instance: parent.instance,
|
|
12
|
+
project: parent.project,
|
|
13
|
+
selfLink: d.selfLink ?? "",
|
|
14
|
+
charset: d.charset,
|
|
15
|
+
collation: d.collation,
|
|
16
|
+
});
|
|
17
|
+
export const SqlDatabaseProvider = () => Provider.effect(SqlDatabase, Effect.gen(function* () {
|
|
18
|
+
const getDatabases = yield* sql.getDatabases;
|
|
19
|
+
const insertDatabases = yield* sql.insertDatabases;
|
|
20
|
+
const deleteDatabases = yield* sql.deleteDatabases;
|
|
21
|
+
const getOperations = yield* sql.getOperations;
|
|
22
|
+
const awaitOperation = makeAwaitOperation(getOperations);
|
|
23
|
+
const observe = (project, instance, database) => getDatabases({ project, instance, database }).pipe(Effect.catchTag("NotFound", () => Effect.succeed(undefined)), Effect.catchTag("Forbidden", () => Effect.succeed(undefined)));
|
|
24
|
+
return {
|
|
25
|
+
stables: ["name", "instance", "project", "selfLink"],
|
|
26
|
+
diff: Effect.fn(function* ({ news, olds = {} }) {
|
|
27
|
+
if (!isResolved(news))
|
|
28
|
+
return undefined;
|
|
29
|
+
if (somePropsAreDifferent(olds, news, [
|
|
30
|
+
"project",
|
|
31
|
+
"instance",
|
|
32
|
+
"name",
|
|
33
|
+
])) {
|
|
34
|
+
return { action: "replace" };
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}),
|
|
38
|
+
reconcile: Effect.fn(function* ({ news, session }) {
|
|
39
|
+
yield* validateDatabaseName(news.name);
|
|
40
|
+
let observed = yield* observe(news.project, news.instance, news.name);
|
|
41
|
+
if (!observed) {
|
|
42
|
+
const op = yield* insertDatabases({
|
|
43
|
+
project: news.project,
|
|
44
|
+
instance: news.instance,
|
|
45
|
+
body: {
|
|
46
|
+
name: news.name,
|
|
47
|
+
...(news.charset ? { charset: news.charset } : {}),
|
|
48
|
+
...(news.collation ? { collation: news.collation } : {}),
|
|
49
|
+
},
|
|
50
|
+
}).pipe(Effect.catchTag("Conflict", () => Effect.succeed(undefined)), Effect.catchTag("BadRequest", reshapeBadRequest("Database", "insert")));
|
|
51
|
+
if (op?.name)
|
|
52
|
+
yield* awaitOperation(news.project, op.name, session);
|
|
53
|
+
observed = yield* getDatabases({
|
|
54
|
+
project: news.project,
|
|
55
|
+
instance: news.instance,
|
|
56
|
+
database: news.name,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return toAttributes(observed, {
|
|
60
|
+
project: news.project,
|
|
61
|
+
instance: news.instance,
|
|
62
|
+
name: news.name,
|
|
63
|
+
});
|
|
64
|
+
}),
|
|
65
|
+
delete: Effect.fn(function* ({ output, session }) {
|
|
66
|
+
yield* deleteDatabases({
|
|
67
|
+
project: output.project,
|
|
68
|
+
instance: output.instance,
|
|
69
|
+
database: output.name,
|
|
70
|
+
}).pipe(Effect.flatMap((op) => op.name
|
|
71
|
+
? awaitOperation(output.project, op.name, session)
|
|
72
|
+
: Effect.succeed(op)), Effect.catchTag("NotFound", () => Effect.void), Effect.catchTag("BadRequest", reshapeBadRequest("Database", "delete")));
|
|
73
|
+
}),
|
|
74
|
+
read: Effect.fn(function* ({ output, olds }) {
|
|
75
|
+
const project = output?.project ?? olds?.project;
|
|
76
|
+
const instance = output?.instance ?? olds?.instance;
|
|
77
|
+
const name = output?.name ?? olds?.name;
|
|
78
|
+
if (!project || !instance || !name)
|
|
79
|
+
return undefined;
|
|
80
|
+
const observed = yield* observe(project, instance, name);
|
|
81
|
+
if (!observed)
|
|
82
|
+
return undefined;
|
|
83
|
+
return toAttributes(observed, { project, instance, name });
|
|
84
|
+
}),
|
|
85
|
+
};
|
|
86
|
+
}));
|
|
87
|
+
//# sourceMappingURL=Database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Database.js","sourceRoot":"","sources":["../../src/Sqladmin/Database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { Resource } from "alchemy";
|
|
2
|
+
import * as Provider from "alchemy/Provider";
|
|
3
|
+
import * as Redacted from "effect/Redacted";
|
|
4
|
+
import type * as GCP from "../Providers.ts";
|
|
5
|
+
import type { PostgresVersion, SqlActivationPolicy, SqlAvailabilityType, SqlDataDiskType, SqlEdition } from "./Types.ts";
|
|
6
|
+
/**
|
|
7
|
+
* A Cloud SQL for Postgres instance.
|
|
8
|
+
*
|
|
9
|
+
* **Resource model.** A Cloud SQL instance bundles the storage volume,
|
|
10
|
+
* compute tier, networking (public IP / VPC private IP via PSA), and
|
|
11
|
+
* managed backups. Databases (`GCP.SqlDatabase`) and users
|
|
12
|
+
* (`GCP.SqlUser`) hang off it and are modelled as separate resources.
|
|
13
|
+
*
|
|
14
|
+
* **Lifecycle.** observe → ensure (insert; retry on the "API not yet
|
|
15
|
+
* enabled" 403 propagation race) → sync (patch top-level fields, with
|
|
16
|
+
* `settingsVersion` round-trip for optimistic concurrency) → return.
|
|
17
|
+
*
|
|
18
|
+
* **Replace triggers.** `project`, `region`, `name`, `databaseVersion`.
|
|
19
|
+
* Everything else — tier, disk size, IP config, backup config — is
|
|
20
|
+
* in-place via `patch`.
|
|
21
|
+
*
|
|
22
|
+
* **Optimistic concurrency.** Cloud SQL uses `settings.settingsVersion`
|
|
23
|
+
* (NOT `etag` — etag is deprecated). Every patch reads the live
|
|
24
|
+
* instance and threads the observed `settingsVersion` through the
|
|
25
|
+
* body. Concurrent edits surface as `Conflict`.
|
|
26
|
+
*
|
|
27
|
+
* **Adoption.** Label-gated: an instance whose `settings.userLabels`
|
|
28
|
+
* lack our `alchemy_*` keys is wrapped in `Unowned(attrs)` from
|
|
29
|
+
* `read`, forcing `--adopt` before takeover.
|
|
30
|
+
*
|
|
31
|
+
* **Deletion protection.** When `settings.deletionProtectionEnabled`
|
|
32
|
+
* is `true`, alchemy `destroy` will fail with a `BadRequest`. Set the
|
|
33
|
+
* flag to `false` in a separate deploy (which patches the instance),
|
|
34
|
+
* then re-run destroy.
|
|
35
|
+
*
|
|
36
|
+
* @example Minimal private-IP Postgres 17 instance on a Shared VPC
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const db = yield* GCP.SqlInstance("Primary", {
|
|
39
|
+
* project: project.projectId,
|
|
40
|
+
* region: "europe-west4",
|
|
41
|
+
* databaseVersion: "POSTGRES_17",
|
|
42
|
+
* settings: {
|
|
43
|
+
* tier: "db-custom-2-7680",
|
|
44
|
+
* edition: "ENTERPRISE",
|
|
45
|
+
* dataDiskSizeGb: 50,
|
|
46
|
+
* ipConfiguration: {
|
|
47
|
+
* ipv4Enabled: false,
|
|
48
|
+
* privateNetwork: hostVpc.selfLink,
|
|
49
|
+
* },
|
|
50
|
+
* backupConfiguration: { enabled: true, pointInTimeRecoveryEnabled: true },
|
|
51
|
+
* },
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @see https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1/instances
|
|
56
|
+
*/
|
|
57
|
+
export type SqlInstanceProps = {
|
|
58
|
+
/**
|
|
59
|
+
* GCP project ID hosting the instance. Immutable — replace if changed.
|
|
60
|
+
* @see https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1/instances#SqlInstance
|
|
61
|
+
*/
|
|
62
|
+
project: string;
|
|
63
|
+
/**
|
|
64
|
+
* Cloud SQL region (e.g. `europe-west4`). Cloud SQL is regional;
|
|
65
|
+
* zonality is configured inside `settings.availabilityType`.
|
|
66
|
+
* Immutable — replace if changed.
|
|
67
|
+
* @see https://cloud.google.com/sql/docs/postgres/locations
|
|
68
|
+
*/
|
|
69
|
+
region: string;
|
|
70
|
+
/**
|
|
71
|
+
* Instance name. Defaults to `createPhysicalName({ id, lowercase:
|
|
72
|
+
* true, maxLength: 98 })`. Lowercase letters/digits/hyphens; begin
|
|
73
|
+
* with a letter, no trailing hyphen; 1–98 chars. Immutable — replace.
|
|
74
|
+
* @see https://cloud.google.com/sql/docs/postgres/admin-api/rest/v1/instances#SqlInstance
|
|
75
|
+
*/
|
|
76
|
+
name?: string;
|
|
77
|
+
/**
|
|
78
|
+
* Postgres engine version. Immutable — Cloud SQL exposes major
|
|
79
|
+
* version *upgrades* via a separate `upgrade` operation, not via
|
|
80
|
+
* `patch`. Surfacing it as immutable here forces an explicit replace
|
|
81
|
+
* (or out-of-band upgrade) for clarity.
|
|
82
|
+
* @see https://cloud.google.com/sql/docs/postgres/db-versions
|
|
83
|
+
*/
|
|
84
|
+
databaseVersion: PostgresVersion;
|
|
85
|
+
/**
|
|
86
|
+
* Initial Postgres `postgres` superuser password. Only set on
|
|
87
|
+
* insert; ignored on subsequent patches (Cloud SQL silently drops
|
|
88
|
+
* `rootPassword` on patch). Typically omitted on IAM-only stacks
|
|
89
|
+
* since the `postgres` role is unused.
|
|
90
|
+
* @see https://cloud.google.com/sql/docs/postgres/create-manage-users#user-root
|
|
91
|
+
*/
|
|
92
|
+
rootPassword?: Redacted.Redacted<string>;
|
|
93
|
+
/**
|
|
94
|
+
* Resource labels. Alchemy internal labels (`alchemy_app`,
|
|
95
|
+
* `alchemy_stage`, `alchemy_id`) are merged on top automatically.
|
|
96
|
+
* Cloud SQL stores user labels under `settings.userLabels`; we
|
|
97
|
+
* surface them at the top level for symmetry with other GCP
|
|
98
|
+
* resources. Mutable via `patch`.
|
|
99
|
+
* @see https://cloud.google.com/sql/docs/postgres/label-instance
|
|
100
|
+
*/
|
|
101
|
+
labels?: Record<string, string>;
|
|
102
|
+
/** Instance settings (tier, disk, IP, backups, …). Mostly mutable via `patch`. */
|
|
103
|
+
settings: {
|
|
104
|
+
/**
|
|
105
|
+
* Machine tier (`db-custom-{vCPU}-{memMiB}`, `db-f1-micro`,
|
|
106
|
+
* `db-perf-optimized-*`). Mutable via `patch` (causes a restart).
|
|
107
|
+
* @see https://cloud.google.com/sql/docs/postgres/instance-settings
|
|
108
|
+
*/
|
|
109
|
+
tier: string;
|
|
110
|
+
/**
|
|
111
|
+
* Cloud SQL edition. `ENTERPRISE_PLUS` is required for
|
|
112
|
+
* Data Cache + the `db-perf-optimized-*` tiers. Mutable via
|
|
113
|
+
* `patch` (some transitions require a restart).
|
|
114
|
+
* @see https://cloud.google.com/sql/docs/postgres/editions-intro
|
|
115
|
+
*/
|
|
116
|
+
edition?: SqlEdition;
|
|
117
|
+
/**
|
|
118
|
+
* Storage size in GB. Mutable via `patch`; can only grow, not
|
|
119
|
+
* shrink (shrink requires a side-channel operation).
|
|
120
|
+
* @see https://cloud.google.com/sql/docs/postgres/instance-settings#storage-capacity-2ndgen
|
|
121
|
+
*/
|
|
122
|
+
dataDiskSizeGb?: number;
|
|
123
|
+
/**
|
|
124
|
+
* Disk type. `PD_SSD` is the default; `PD_HDD` is legacy.
|
|
125
|
+
* Immutable in practice — Cloud SQL rejects type changes on patch.
|
|
126
|
+
* @see https://cloud.google.com/sql/docs/postgres/instance-settings#storage-type-2ndgen
|
|
127
|
+
*/
|
|
128
|
+
dataDiskType?: SqlDataDiskType;
|
|
129
|
+
/** Auto-grow the data disk when nearing full. Mutable via `patch`. */
|
|
130
|
+
diskAutoresize?: boolean;
|
|
131
|
+
/** Cap on auto-grown size, in GB. Mutable via `patch`. */
|
|
132
|
+
diskAutoresizeLimit?: number;
|
|
133
|
+
/** Networking — public IP, private IP via PSA, or both. Mutable via `patch`. */
|
|
134
|
+
ipConfiguration?: {
|
|
135
|
+
/**
|
|
136
|
+
* VPC selfLink (`https://www.googleapis.com/compute/v1/projects/{p}/global/networks/{n}`)
|
|
137
|
+
* to attach the private IP to. The VPC must already have a PSA
|
|
138
|
+
* peering with `servicenetworking.googleapis.com`. Immutable
|
|
139
|
+
* after first set (Cloud SQL refuses to change the private network).
|
|
140
|
+
* @see https://cloud.google.com/sql/docs/postgres/private-ip
|
|
141
|
+
*/
|
|
142
|
+
privateNetwork?: string;
|
|
143
|
+
/** Enable a public IPv4 endpoint. Mutable via `patch`. */
|
|
144
|
+
ipv4Enabled?: boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Allow Google-managed services (BigQuery, Vertex AI, etc.) to
|
|
147
|
+
* reach the private IP over Google's backbone. Mutable via `patch`.
|
|
148
|
+
*/
|
|
149
|
+
enablePrivatePathForGoogleCloudServices?: boolean;
|
|
150
|
+
/** Require SSL/TLS on all connections. Mutable via `patch`. */
|
|
151
|
+
requireSsl?: boolean;
|
|
152
|
+
};
|
|
153
|
+
/** Backup window + retention settings. Mutable via `patch`. */
|
|
154
|
+
backupConfiguration?: {
|
|
155
|
+
/** Enable automated daily backups. Mutable via `patch`. */
|
|
156
|
+
enabled?: boolean;
|
|
157
|
+
/** Enable PITR (write-ahead log archiving). Mutable via `patch`. */
|
|
158
|
+
pointInTimeRecoveryEnabled?: boolean;
|
|
159
|
+
/** Backup start time in UTC, `HH:MM` 24-hour. Mutable via `patch`. */
|
|
160
|
+
startTime?: string;
|
|
161
|
+
/** WAL retention window (1–7 days). Mutable via `patch`. */
|
|
162
|
+
transactionLogRetentionDays?: number;
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Postgres flags (e.g. `shared_buffers`, `max_connections`).
|
|
166
|
+
* Mutable via `patch`; some flags trigger a restart.
|
|
167
|
+
* @see https://cloud.google.com/sql/docs/postgres/flags
|
|
168
|
+
*/
|
|
169
|
+
databaseFlags?: ReadonlyArray<{
|
|
170
|
+
name: string;
|
|
171
|
+
value: string;
|
|
172
|
+
}>;
|
|
173
|
+
/**
|
|
174
|
+
* Block alchemy from deleting the instance via the API. Disable
|
|
175
|
+
* before running destroy.
|
|
176
|
+
* @see https://cloud.google.com/sql/docs/postgres/deletion-protection
|
|
177
|
+
*/
|
|
178
|
+
deletionProtectionEnabled?: boolean;
|
|
179
|
+
/** Park (`NEVER`) or run (`ALWAYS`) the instance. Mutable via `patch`. */
|
|
180
|
+
activationPolicy?: SqlActivationPolicy;
|
|
181
|
+
/**
|
|
182
|
+
* `ZONAL` = single zone; `REGIONAL` = HA standby in a second zone.
|
|
183
|
+
* Mutable via `patch` (transitions to/from `REGIONAL` take ~10 min).
|
|
184
|
+
* @see https://cloud.google.com/sql/docs/postgres/high-availability
|
|
185
|
+
*/
|
|
186
|
+
availabilityType?: SqlAvailabilityType;
|
|
187
|
+
};
|
|
188
|
+
};
|
|
189
|
+
export type SqlInstanceIpAddress = {
|
|
190
|
+
/** Address class — `PRIMARY` (public), `PRIVATE`, or `OUTGOING`. */
|
|
191
|
+
type: string | undefined;
|
|
192
|
+
/** The IP itself. */
|
|
193
|
+
ipAddress: string | undefined;
|
|
194
|
+
};
|
|
195
|
+
export type SqlInstanceAttributes = {
|
|
196
|
+
/** Bare instance name (no `projects/.../instances/` prefix). */
|
|
197
|
+
name: string;
|
|
198
|
+
/** Server-defined URL for the instance. */
|
|
199
|
+
selfLink: string;
|
|
200
|
+
/** GCP project ID. */
|
|
201
|
+
project: string;
|
|
202
|
+
/** Region. */
|
|
203
|
+
region: string;
|
|
204
|
+
/**
|
|
205
|
+
* `project:region:name` — the canonical identifier the Cloud SQL
|
|
206
|
+
* Auth Proxy and the IAM authn token exchange both consume.
|
|
207
|
+
*/
|
|
208
|
+
connectionName: string;
|
|
209
|
+
/** Echoed Postgres version (e.g. `POSTGRES_17`). */
|
|
210
|
+
databaseVersion: string;
|
|
211
|
+
/** Lifecycle state — `RUNNABLE` once ready. */
|
|
212
|
+
state: string;
|
|
213
|
+
/** All IPs Cloud SQL has assigned. */
|
|
214
|
+
ipAddresses: ReadonlyArray<SqlInstanceIpAddress>;
|
|
215
|
+
/** Convenience: first `PRIVATE` IP, if any. */
|
|
216
|
+
privateIpAddress: string | undefined;
|
|
217
|
+
/** Convenience: first `PRIMARY` (public) IP, if any. */
|
|
218
|
+
publicIpAddress: string | undefined;
|
|
219
|
+
/** Server CA cert; useful for pinning TLS roots from a client. */
|
|
220
|
+
serverCaCert: {
|
|
221
|
+
cert: string | undefined;
|
|
222
|
+
commonName: string | undefined;
|
|
223
|
+
expirationTime: string | undefined;
|
|
224
|
+
sha1Fingerprint: string | undefined;
|
|
225
|
+
} | undefined;
|
|
226
|
+
/** Monotonic optimistic-concurrency token — round-tripped on patch. */
|
|
227
|
+
settingsVersion: string | undefined;
|
|
228
|
+
/** Labels currently set, including alchemy internals. */
|
|
229
|
+
labels: Record<string, string>;
|
|
230
|
+
};
|
|
231
|
+
export type SqlInstance = Resource<"GCP.SqlInstance", SqlInstanceProps, SqlInstanceAttributes, never, GCP.Providers>;
|
|
232
|
+
export declare const SqlInstance: import("alchemy").ResourceClass<SqlInstance>;
|
|
233
|
+
export declare const SqlInstanceProvider: () => import("effect/Layer").Layer<Provider.Provider<SqlInstance>, never, import("alchemy").Stack | import("alchemy").Stage | import("@distilled.cloud/gcp").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
|
|
234
|
+
//# sourceMappingURL=Instance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../../src/Sqladmin/Instance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAI7C,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAG5C,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,UAAU,EACX,MAAM,YAAY,CAAC;AAGpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,eAAe,EAAE,eAAe,CAAC;IACjC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,kFAAkF;IAClF,QAAQ,EAAE;QACR;;;;WAIG;QACH,IAAI,EAAE,MAAM,CAAC;QACb;;;;;WAKG;QACH,OAAO,CAAC,EAAE,UAAU,CAAC;QACrB;;;;WAIG;QACH,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB;;;;WAIG;QACH,YAAY,CAAC,EAAE,eAAe,CAAC;QAC/B,sEAAsE;QACtE,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,0DAA0D;QAC1D,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,gFAAgF;QAChF,eAAe,CAAC,EAAE;YAChB;;;;;;eAMG;YACH,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,0DAA0D;YAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;YACtB;;;eAGG;YACH,uCAAuC,CAAC,EAAE,OAAO,CAAC;YAClD,+DAA+D;YAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;SACtB,CAAC;QACF,+DAA+D;QAC/D,mBAAmB,CAAC,EAAE;YACpB,2DAA2D;YAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,oEAAoE;YACpE,0BAA0B,CAAC,EAAE,OAAO,CAAC;YACrC,sEAAsE;YACtE,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,4DAA4D;YAC5D,2BAA2B,CAAC,EAAE,MAAM,CAAC;SACtC,CAAC;QACF;;;;WAIG;QACH,aAAa,CAAC,EAAE,aAAa,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/D;;;;WAIG;QACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;QACpC,0EAA0E;QAC1E,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;QACvC;;;;WAIG;QACH,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;KACxC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,oEAAoE;IACpE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,qBAAqB;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,WAAW,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACjD,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,wDAAwD;IACxD,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,kEAAkE;IAClE,YAAY,EACR;QACE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;QACnC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;KACrC,GACD,SAAS,CAAC;IACd,uEAAuE;IACvE,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,QAAQ,CAChC,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,EACL,GAAG,CAAC,SAAS,CACd,CAAC;AACF,eAAO,MAAM,WAAW,8CAA2C,CAAC;AA8FpE,eAAO,MAAM,mBAAmB,kOA2Q7B,CAAC"}
|