alchemy 0.64.0 → 0.65.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/bin/alchemy.js +7570 -5773
- package/bin/commands/init.ts +130 -9
- package/bin/constants.ts +4 -0
- package/bin/services/cdp-manager/cdp-proxy.ts +69 -0
- package/bin/services/cdp-manager/server.ts +173 -0
- package/bin/services/execute-alchemy.ts +83 -4
- package/bin/types.ts +1 -0
- package/lib/cloudflare/bundle/plugin-node-compat.js +2 -2
- package/lib/cloudflare/bundle/plugin-node-compat.js.map +1 -1
- package/lib/cloudflare/bundle/plugin-wasm.d.ts.map +1 -1
- package/lib/cloudflare/bundle/plugin-wasm.js +20 -11
- package/lib/cloudflare/bundle/plugin-wasm.js.map +1 -1
- package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
- package/lib/cloudflare/compatibility-date.gen.js +1 -1
- package/lib/cloudflare/hyperdrive.d.ts +7 -2
- package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
- package/lib/cloudflare/hyperdrive.js +39 -57
- package/lib/cloudflare/hyperdrive.js.map +1 -1
- package/lib/cloudflare/index.d.ts +1 -0
- package/lib/cloudflare/index.d.ts.map +1 -1
- package/lib/cloudflare/index.js +1 -0
- package/lib/cloudflare/index.js.map +1 -1
- package/lib/cloudflare/next.d.ts +13 -0
- package/lib/cloudflare/next.d.ts.map +1 -0
- package/lib/cloudflare/next.js +91 -0
- package/lib/cloudflare/next.js.map +1 -0
- package/lib/cloudflare/worker-assets.d.ts +3 -3
- package/lib/cloudflare/worker-assets.d.ts.map +1 -1
- package/lib/cloudflare/worker-assets.js +22 -47
- package/lib/cloudflare/worker-assets.js.map +1 -1
- package/lib/cloudflare/wrangler.json.d.ts +2 -2
- package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
- package/lib/cloudflare/wrangler.json.js +4 -1
- package/lib/cloudflare/wrangler.json.js.map +1 -1
- package/lib/planetscale/branch.d.ts.map +1 -1
- package/lib/planetscale/branch.js +36 -25
- package/lib/planetscale/branch.js.map +1 -1
- package/lib/planetscale/database.d.ts +23 -6
- package/lib/planetscale/database.d.ts.map +1 -1
- package/lib/planetscale/database.js +11 -5
- package/lib/planetscale/database.js.map +1 -1
- package/lib/planetscale/index.d.ts +1 -0
- package/lib/planetscale/index.d.ts.map +1 -1
- package/lib/planetscale/index.js +1 -0
- package/lib/planetscale/index.js.map +1 -1
- package/lib/planetscale/password.d.ts +3 -1
- package/lib/planetscale/password.d.ts.map +1 -1
- package/lib/planetscale/password.js +3 -1
- package/lib/planetscale/password.js.map +1 -1
- package/lib/planetscale/role.d.ts +126 -0
- package/lib/planetscale/role.d.ts.map +1 -0
- package/lib/planetscale/role.js +144 -0
- package/lib/planetscale/role.js.map +1 -0
- package/lib/planetscale/utils.d.ts +17 -3
- package/lib/planetscale/utils.d.ts.map +1 -1
- package/lib/planetscale/utils.js +110 -31
- package/lib/planetscale/utils.js.map +1 -1
- package/lib/secret.d.ts +0 -3
- package/lib/secret.d.ts.map +1 -1
- package/lib/secret.js +0 -2
- package/lib/secret.js.map +1 -1
- package/lib/state/cloudflare-state-store.js +3 -3
- package/lib/state/cloudflare-state-store.js.map +1 -1
- package/lib/test/bun.d.ts +2 -2
- package/lib/test/bun.d.ts.map +1 -1
- package/lib/test/vitest.d.ts +2 -2
- package/lib/test/vitest.d.ts.map +1 -1
- package/lib/test/vitest.js +4 -4
- package/lib/test/vitest.js.map +1 -1
- package/lib/util/content-type.js +2 -2
- package/lib/util/content-type.js.map +1 -1
- package/lib/util/dedent.d.ts.map +1 -1
- package/lib/util/dedent.js +30 -18
- package/lib/util/dedent.js.map +1 -1
- package/lib/util/memoize.d.ts +1 -1
- package/lib/util/memoize.d.ts.map +1 -1
- package/lib/util/memoize.js +13 -3
- package/lib/util/memoize.js.map +1 -1
- package/package.json +5 -1
- package/src/cloudflare/bundle/plugin-node-compat.ts +2 -2
- package/src/cloudflare/bundle/plugin-wasm.ts +34 -14
- package/src/cloudflare/compatibility-date.gen.ts +1 -1
- package/src/cloudflare/hyperdrive.ts +136 -95
- package/src/cloudflare/index.ts +1 -0
- package/src/cloudflare/next.ts +123 -0
- package/src/cloudflare/worker-assets.ts +43 -105
- package/src/cloudflare/wrangler.json.ts +6 -3
- package/src/planetscale/branch.ts +52 -27
- package/src/planetscale/database.ts +75 -46
- package/src/planetscale/index.ts +1 -0
- package/src/planetscale/password.ts +3 -1
- package/src/planetscale/role.ts +278 -0
- package/src/planetscale/utils.ts +172 -30
- package/src/secret.ts +0 -4
- package/src/state/cloudflare-state-store.ts +4 -4
- package/src/test/bun.ts +2 -2
- package/src/test/vitest.ts +6 -6
- package/src/util/content-type.ts +2 -2
- package/src/util/dedent.ts +33 -21
- package/src/util/memoize.ts +15 -3
- package/templates/nextjs/README.md +85 -0
- package/templates/nextjs/_env +1 -0
- package/templates/nextjs/_env.example +1 -0
- package/templates/nextjs/_gitignore +46 -0
- package/templates/nextjs/alchemy.run.ts +16 -0
- package/templates/nextjs/eslint.config.mjs +16 -0
- package/templates/nextjs/next-env.d.ts +5 -0
- package/templates/nextjs/next.config.ts +10 -0
- package/templates/nextjs/open-next.config.ts +5 -0
- package/templates/nextjs/package.json +31 -0
- package/templates/nextjs/src/app/api/hello/route.ts +19 -0
- package/templates/nextjs/src/app/favicon.ico +0 -0
- package/templates/nextjs/src/app/globals.css +72 -0
- package/templates/nextjs/src/app/layout.tsx +19 -0
- package/templates/nextjs/src/app/page.tsx +55 -0
- package/templates/nextjs/tsconfig.json +33 -0
- package/templates/nextjs/types/env.d.ts +14 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import type { Context } from "../context.ts";
|
|
2
|
+
import { Resource } from "../resource.ts";
|
|
3
|
+
import type { Secret } from "../secret.ts";
|
|
4
|
+
import { type PlanetScaleProps } from "./api/client.gen.ts";
|
|
5
|
+
import type { Branch } from "./branch.ts";
|
|
6
|
+
import type { Database } from "./database.ts";
|
|
7
|
+
/**
|
|
8
|
+
* Properties for creating or updating a PlanetScale PostgreSQL Role
|
|
9
|
+
*/
|
|
10
|
+
export interface RoleProps extends PlanetScaleProps {
|
|
11
|
+
/**
|
|
12
|
+
* The organization ID where the role will be created
|
|
13
|
+
* Required when using string database name, optional when using Database resource
|
|
14
|
+
*/
|
|
15
|
+
organizationId?: string;
|
|
16
|
+
/**
|
|
17
|
+
* The database where the role will be created
|
|
18
|
+
* Can be either a database name (string) or Database resource
|
|
19
|
+
*/
|
|
20
|
+
database: string | Database;
|
|
21
|
+
/**
|
|
22
|
+
* The branch where the role will be created
|
|
23
|
+
* Can be either a branch name (string) or Branch resource
|
|
24
|
+
* @default "main"
|
|
25
|
+
*/
|
|
26
|
+
branch?: string | Branch;
|
|
27
|
+
/**
|
|
28
|
+
* Time to live in seconds
|
|
29
|
+
*/
|
|
30
|
+
ttl?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Roles to inherit from.
|
|
33
|
+
* The `"postgres"` role provides full administrator access to the database.
|
|
34
|
+
* You can also inherit from another Role resource.
|
|
35
|
+
*/
|
|
36
|
+
inheritedRoles: InheritedRole[] | Role;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Roles that can be inherited from.
|
|
40
|
+
*/
|
|
41
|
+
export type InheritedRole = "postgres" | "pg_checkpoint" | "pg_create_subscription" | "pg_maintain" | "pg_monitor" | "pg_read_all_data" | "pg_read_all_settings" | "pg_read_all_stats" | "pg_signal_backend" | "pg_stat_scan_tables" | "pg_use_reserved_connections" | "pg_write_all_data" | (string & {});
|
|
42
|
+
export interface Role extends Resource<"planetscale::Role">, Omit<RoleProps, "inheritedRoles"> {
|
|
43
|
+
/**
|
|
44
|
+
* The unique identifier for the role
|
|
45
|
+
*/
|
|
46
|
+
id: string;
|
|
47
|
+
/**
|
|
48
|
+
* The name of the role
|
|
49
|
+
*/
|
|
50
|
+
name: string;
|
|
51
|
+
/**
|
|
52
|
+
* The timestamp when the role expires (ISO 8601 format)
|
|
53
|
+
*/
|
|
54
|
+
expiresAt: string;
|
|
55
|
+
/**
|
|
56
|
+
* The host URL for database connection
|
|
57
|
+
*/
|
|
58
|
+
host: string;
|
|
59
|
+
/**
|
|
60
|
+
* The username for database authentication
|
|
61
|
+
*/
|
|
62
|
+
username: string;
|
|
63
|
+
/**
|
|
64
|
+
* The encrypted password for database authentication
|
|
65
|
+
*/
|
|
66
|
+
password: Secret<string>;
|
|
67
|
+
/**
|
|
68
|
+
* The database name
|
|
69
|
+
*/
|
|
70
|
+
databaseName: string;
|
|
71
|
+
/**
|
|
72
|
+
* The direct connection URL for the database.
|
|
73
|
+
*/
|
|
74
|
+
connectionUrl: Secret<string>;
|
|
75
|
+
/**
|
|
76
|
+
* The pooled connection URL for the database.
|
|
77
|
+
* Uses PSBouncer on port 6432. Recommended for production.
|
|
78
|
+
* @see https://planetscale.com/docs/postgres/connecting/psbouncer
|
|
79
|
+
*/
|
|
80
|
+
connectionUrlPooled: Secret<string>;
|
|
81
|
+
/**
|
|
82
|
+
* The roles that this role inherits from.
|
|
83
|
+
*/
|
|
84
|
+
inheritedRoles: InheritedRole[];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create and manage database roles for PlanetScale PostgreSQL branches. Database roles provide secure access to your database with specific roles and permissions.
|
|
88
|
+
*
|
|
89
|
+
* For MySQL, use [Passwords](./password.ts) instead.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ## Basic Role
|
|
93
|
+
*
|
|
94
|
+
* Create a default role with all permissions:
|
|
95
|
+
*
|
|
96
|
+
* ```ts
|
|
97
|
+
* const role = await Role("my-role", {
|
|
98
|
+
* database: "my-database",
|
|
99
|
+
* inheritedRoles: ["postgres"],
|
|
100
|
+
* });
|
|
101
|
+
* ```
|
|
102
|
+
*
|
|
103
|
+
* ## Role with TTL
|
|
104
|
+
*
|
|
105
|
+
* Create a role with a TTL of 1 hour:
|
|
106
|
+
*
|
|
107
|
+
* ```ts
|
|
108
|
+
* const role = await Role("my-role", {
|
|
109
|
+
* database: "my-database",
|
|
110
|
+
* ttl: 3600,
|
|
111
|
+
* });
|
|
112
|
+
* ```
|
|
113
|
+
*
|
|
114
|
+
* ## Role with Inherited Permissions
|
|
115
|
+
*
|
|
116
|
+
* Create a role with read-only access to all data and settings:
|
|
117
|
+
*
|
|
118
|
+
* ```ts
|
|
119
|
+
* const role = await Role("my-role", {
|
|
120
|
+
* database: "my-database",
|
|
121
|
+
* inheritedRoles: ["pg_read_all_data", "pg_read_all_settings"],
|
|
122
|
+
* });
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
export declare const Role: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<Role, RoleProps>, id: string, props: RoleProps) => Promise<Role>);
|
|
126
|
+
//# sourceMappingURL=role.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role.d.ts","sourceRoot":"","sources":["../../src/planetscale/role.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,gBAAgB;IACjD;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;IAE5B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,cAAc,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,eAAe,GACf,wBAAwB,GACxB,aAAa,GACb,YAAY,GACZ,kBAAkB,GAClB,sBAAsB,GACtB,mBAAmB,GACnB,mBAAmB,GACnB,qBAAqB,GACrB,6BAA6B,GAC7B,mBAAmB,GACnB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,WAAW,IACf,SAAQ,QAAQ,CAAC,mBAAmB,CAAC,EACnC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACnC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAEzB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAE9B;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAEpC;;OAEG;IACH,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,eAAO,MAAM,IAAI,yFAGP,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,MAC1B,MAAM,SACH,SAAS,KACf,OAAO,CAAC,IAAI,CAAC,CA+GjB,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { alchemy } from "../alchemy.js";
|
|
2
|
+
import { Resource } from "../resource.js";
|
|
3
|
+
import { logger } from "../util/logger.js";
|
|
4
|
+
import { PlanetScaleClient } from "./api/client.gen.js";
|
|
5
|
+
import { waitForBranchReady } from "./utils.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create and manage database roles for PlanetScale PostgreSQL branches. Database roles provide secure access to your database with specific roles and permissions.
|
|
8
|
+
*
|
|
9
|
+
* For MySQL, use [Passwords](./password.ts) instead.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ## Basic Role
|
|
13
|
+
*
|
|
14
|
+
* Create a default role with all permissions:
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* const role = await Role("my-role", {
|
|
18
|
+
* database: "my-database",
|
|
19
|
+
* inheritedRoles: ["postgres"],
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* ## Role with TTL
|
|
24
|
+
*
|
|
25
|
+
* Create a role with a TTL of 1 hour:
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* const role = await Role("my-role", {
|
|
29
|
+
* database: "my-database",
|
|
30
|
+
* ttl: 3600,
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* ## Role with Inherited Permissions
|
|
35
|
+
*
|
|
36
|
+
* Create a role with read-only access to all data and settings:
|
|
37
|
+
*
|
|
38
|
+
* ```ts
|
|
39
|
+
* const role = await Role("my-role", {
|
|
40
|
+
* database: "my-database",
|
|
41
|
+
* inheritedRoles: ["pg_read_all_data", "pg_read_all_settings"],
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export const Role = Resource("planetscale::Role", async function (id, props) {
|
|
46
|
+
const api = new PlanetScaleClient(props);
|
|
47
|
+
const organization = typeof props.branch === "object"
|
|
48
|
+
? props.branch.organizationId
|
|
49
|
+
: typeof props.database === "object"
|
|
50
|
+
? props.database.organizationId
|
|
51
|
+
: props.organizationId;
|
|
52
|
+
const database = typeof props.database === "string" ? props.database : props.database.name;
|
|
53
|
+
const branch = typeof props.branch === "string"
|
|
54
|
+
? props.branch
|
|
55
|
+
: (props.branch?.name ?? "main");
|
|
56
|
+
const inheritedRoles = Array.isArray(props.inheritedRoles)
|
|
57
|
+
? props.inheritedRoles
|
|
58
|
+
: props.inheritedRoles.inheritedRoles;
|
|
59
|
+
if (!organization) {
|
|
60
|
+
throw new Error("Organization ID is required");
|
|
61
|
+
}
|
|
62
|
+
switch (this.phase) {
|
|
63
|
+
case "delete": {
|
|
64
|
+
if (this.output?.id) {
|
|
65
|
+
const res = await api.organizations.databases.branches.roles.delete({
|
|
66
|
+
path: {
|
|
67
|
+
organization,
|
|
68
|
+
database,
|
|
69
|
+
branch,
|
|
70
|
+
id: this.output.id,
|
|
71
|
+
},
|
|
72
|
+
result: "full",
|
|
73
|
+
});
|
|
74
|
+
if (res.error) {
|
|
75
|
+
switch (res.error.status) {
|
|
76
|
+
case 404:
|
|
77
|
+
break;
|
|
78
|
+
case 422:
|
|
79
|
+
// This is a workaround for 422 unprocessable: Role is still referenced and cannot be dropped.
|
|
80
|
+
// Essentially, the role is still linked to a branch, so we can't delete it here, but it'll be deleted when the branch is deleted.
|
|
81
|
+
logger.warn([
|
|
82
|
+
`Failed to delete role "${id}" (name: "${this.output.name}").`,
|
|
83
|
+
`Error: ${res.error.message}`,
|
|
84
|
+
`If you are deleting database "${database}" or branch "${branch}", the role will be deleted automatically.`,
|
|
85
|
+
`Otherwise, consider manually deleting the role at: https://app.planetscale.com/${organization}/${database}/settings/roles`,
|
|
86
|
+
].join("\n"));
|
|
87
|
+
break;
|
|
88
|
+
default:
|
|
89
|
+
throw new Error(`Failed to delete role "${id}"`, {
|
|
90
|
+
cause: res.error,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return this.destroy();
|
|
96
|
+
}
|
|
97
|
+
case "create": {
|
|
98
|
+
const { kind, ready } = await api.organizations.databases.branches.get({
|
|
99
|
+
path: {
|
|
100
|
+
organization,
|
|
101
|
+
database,
|
|
102
|
+
name: branch,
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
if (kind !== "postgresql") {
|
|
106
|
+
throw new Error(`Cannot create a role on MySQL database "${database}". Roles are only supported on PostgreSQL databases. For MySQL databases, please use the Password resource instead.`);
|
|
107
|
+
}
|
|
108
|
+
// Cannot create role until branch is ready
|
|
109
|
+
if (!ready) {
|
|
110
|
+
await waitForBranchReady(api, organization, database, branch);
|
|
111
|
+
}
|
|
112
|
+
const role = await api.organizations.databases.branches.roles.post({
|
|
113
|
+
path: {
|
|
114
|
+
organization,
|
|
115
|
+
database,
|
|
116
|
+
branch,
|
|
117
|
+
},
|
|
118
|
+
body: {
|
|
119
|
+
ttl: props.ttl,
|
|
120
|
+
inherited_roles: inheritedRoles,
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
return this({
|
|
124
|
+
...props,
|
|
125
|
+
id: role.id,
|
|
126
|
+
name: role.name,
|
|
127
|
+
host: role.access_host_url,
|
|
128
|
+
username: role.username,
|
|
129
|
+
password: alchemy.secret(role.password),
|
|
130
|
+
expiresAt: role.expires_at,
|
|
131
|
+
databaseName: role.database_name,
|
|
132
|
+
inheritedRoles,
|
|
133
|
+
connectionUrl: alchemy.secret(`postgresql://${role.username}:${role.password}@${role.access_host_url}:5432/${role.database_name}?sslmode=verify-full`),
|
|
134
|
+
connectionUrlPooled: alchemy.secret(`postgresql://${role.username}:${role.password}@${role.access_host_url}:6432/${role.database_name}?sslmode=verify-full`),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
case "update": {
|
|
138
|
+
// According to the types, the only property that can be updated is the name.
|
|
139
|
+
// However, I was getting 500 errors when trying to update the name, so we'll just replace.
|
|
140
|
+
return this.replace();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=role.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role.js","sourceRoot":"","sources":["../../src/planetscale/role.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
import type { PlanetScaleClient } from "./api/client.gen.ts";
|
|
2
|
+
import type { DatabaseBranch } from "./api/types.gen.ts";
|
|
2
3
|
export type PlanetScaleClusterSize = "PS_DEV" | "PS_10" | "PS_20" | "PS_40" | "PS_80" | "PS_160" | "PS_320" | "PS_400" | "PS_640" | "PS_700" | "PS_900" | "PS_1280" | "PS_1400" | "PS_1800" | "PS_2100" | "PS_2560" | "PS_2700" | "PS_2800" | (string & {});
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
+
* Ensures that the given cluster size is in the correct format.
|
|
5
6
|
*/
|
|
6
|
-
export declare function
|
|
7
|
+
export declare function sanitizeClusterSize(input: {
|
|
8
|
+
size: PlanetScaleClusterSize;
|
|
9
|
+
kind?: "mysql" | "postgresql";
|
|
10
|
+
arch?: "x86" | "arm";
|
|
11
|
+
region?: string;
|
|
12
|
+
}): string;
|
|
13
|
+
/**
|
|
14
|
+
* Polls a branch until it is ready.
|
|
15
|
+
*/
|
|
16
|
+
export declare function waitForBranchReady(api: PlanetScaleClient, organization: string, database: string, branch: string): Promise<DatabaseBranch>;
|
|
17
|
+
/**
|
|
18
|
+
* Polls a database until it is ready.
|
|
19
|
+
*/
|
|
20
|
+
export declare function waitForDatabaseReady(api: PlanetScaleClient, organization: string, database: string): Promise<void>;
|
|
7
21
|
/**
|
|
8
22
|
* Polls a keyspace until it is finished resizing.
|
|
9
23
|
*/
|
|
@@ -13,5 +27,5 @@ export declare function waitForKeyspaceReady(api: PlanetScaleClient, organizatio
|
|
|
13
27
|
* If a branch is not production, it will be promoted to production because
|
|
14
28
|
* cluster sizes can only be configured for production branches.
|
|
15
29
|
*/
|
|
16
|
-
export declare function ensureProductionBranchClusterSize(api: PlanetScaleClient, organization: string, database: string, branch: string,
|
|
30
|
+
export declare function ensureProductionBranchClusterSize(api: PlanetScaleClient, organization: string, database: string, branch: string, kind: "mysql" | "postgresql", expectedClusterSize: PlanetScaleClusterSize): Promise<void>;
|
|
17
31
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/planetscale/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/planetscale/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,MAAM,sBAAsB,GAC9B,QAAQ,GACR,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;IAC9B,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAaT;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,iBAAiB,EACtB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC,CASzB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,iBAAiB,EACtB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,iBAAiB,EACtB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;;GAIG;AACH,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,iBAAiB,EACtB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,GAAG,YAAY,EAC5B,mBAAmB,EAAE,sBAAsB,GAC1C,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
|
package/lib/planetscale/utils.js
CHANGED
|
@@ -1,20 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Ensures that the given cluster size is in the correct format.
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
4
|
+
export function sanitizeClusterSize(input) {
|
|
5
|
+
// NAS-backed Postgres cluster sizes are formatted as `PS_<size>_<provider>_<arch>`,
|
|
6
|
+
// where <provider> is either "AWS" or "GCP", and <arch> is either "ARM" or "X86".
|
|
7
|
+
// Postgres clusters backed by PlanetScale Metal are more complex (e.g. "M6_160_AWS_INTEL_D_METAL_118"),
|
|
8
|
+
// so to avoid messing with those, we just check for AWS or GCP in the size.
|
|
9
|
+
if (input.kind === "postgresql" && !input.size.match(/(AWS|GCP)/)) {
|
|
10
|
+
// Infer the provider from the region.
|
|
11
|
+
// Not all AWS regions start with "aws-", but all GCP regions start with "gcp-".
|
|
12
|
+
const provider = input.region?.startsWith("gcp") ? "GCP" : "AWS";
|
|
13
|
+
const arch = (input.arch ?? "x86").toUpperCase();
|
|
14
|
+
return `${input.size}_${provider}_${arch}`;
|
|
15
|
+
}
|
|
16
|
+
return input.size;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Polls a branch until it is ready.
|
|
20
|
+
*/
|
|
21
|
+
export async function waitForBranchReady(api, organization, database, branch) {
|
|
22
|
+
return await poll({
|
|
23
|
+
description: `branch "${branch}" ready`,
|
|
24
|
+
fn: () => api.organizations.databases.branches.get({
|
|
25
|
+
path: { organization, database, name: branch },
|
|
26
|
+
}),
|
|
27
|
+
predicate: (branch) => branch.ready,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Polls a database until it is ready.
|
|
32
|
+
*/
|
|
33
|
+
export async function waitForDatabaseReady(api, organization, database) {
|
|
5
34
|
await poll({
|
|
6
|
-
description: `database "${database}"
|
|
7
|
-
fn:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
return await api.organizations.databases.get({
|
|
14
|
-
path: { organization, name: database },
|
|
15
|
-
});
|
|
16
|
-
},
|
|
17
|
-
predicate: (item) => item.ready,
|
|
35
|
+
description: `database "${database}" ready`,
|
|
36
|
+
fn: () => api.organizations.databases.get({
|
|
37
|
+
path: { organization, name: database },
|
|
38
|
+
}),
|
|
39
|
+
predicate: (database) => database.ready,
|
|
18
40
|
});
|
|
19
41
|
}
|
|
20
42
|
/**
|
|
@@ -36,31 +58,47 @@ export async function waitForKeyspaceReady(api, organization, database, branch,
|
|
|
36
58
|
* If a branch is not production, it will be promoted to production because
|
|
37
59
|
* cluster sizes can only be configured for production branches.
|
|
38
60
|
*/
|
|
39
|
-
export async function ensureProductionBranchClusterSize(api, organization, database, branch,
|
|
40
|
-
|
|
41
|
-
|
|
61
|
+
export async function ensureProductionBranchClusterSize(api, organization, database, branch, kind, expectedClusterSize) {
|
|
62
|
+
switch (kind) {
|
|
63
|
+
case "mysql": {
|
|
64
|
+
// Vitess databases must be promoted before resizing
|
|
65
|
+
await ensureProductionBranch(api, organization, database, branch);
|
|
66
|
+
await ensureMySQLClusterSize(api, organization, database, branch, expectedClusterSize);
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case "postgresql": {
|
|
70
|
+
// Postgres databases must be resized first before promoting, otherwise 500 error
|
|
71
|
+
await ensurePostgresClusterSize(api, organization, database, branch, expectedClusterSize);
|
|
72
|
+
await ensureProductionBranch(api, organization, database, branch);
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
42
75
|
}
|
|
43
|
-
|
|
44
|
-
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Checks if a branch is production and promotes it if it is not.
|
|
79
|
+
*/
|
|
80
|
+
async function ensureProductionBranch(api, organization, database, name) {
|
|
81
|
+
const data = await api.organizations.databases.branches.get({
|
|
45
82
|
path: {
|
|
46
83
|
organization,
|
|
47
84
|
database,
|
|
48
|
-
name
|
|
85
|
+
name,
|
|
49
86
|
},
|
|
50
87
|
});
|
|
51
|
-
if (!
|
|
52
|
-
if (!
|
|
53
|
-
await
|
|
88
|
+
if (!data.production) {
|
|
89
|
+
if (!data.ready) {
|
|
90
|
+
await waitForBranchReady(api, organization, database, name);
|
|
54
91
|
}
|
|
55
92
|
await api.organizations.databases.branches.promote.post({
|
|
56
|
-
path: {
|
|
57
|
-
organization,
|
|
58
|
-
database,
|
|
59
|
-
name: branch,
|
|
60
|
-
},
|
|
93
|
+
path: { organization, database, name },
|
|
61
94
|
});
|
|
62
95
|
}
|
|
63
|
-
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Ensures that a MySQL branch has the correct cluster size.
|
|
99
|
+
*/
|
|
100
|
+
async function ensureMySQLClusterSize(api, organization, database, branch, expectedClusterSize) {
|
|
101
|
+
// 1. Load default keyspace
|
|
64
102
|
const keyspaces = await api.organizations.databases.branches.keyspaces.list({
|
|
65
103
|
path: {
|
|
66
104
|
organization,
|
|
@@ -72,9 +110,9 @@ export async function ensureProductionBranchClusterSize(api, organization, datab
|
|
|
72
110
|
if (!defaultKeyspace) {
|
|
73
111
|
throw new Error(`No default keyspace found for branch ${branch}`);
|
|
74
112
|
}
|
|
75
|
-
//
|
|
113
|
+
// 2. Wait until any in-flight resize is done
|
|
76
114
|
await waitForKeyspaceReady(api, organization, database, branch, defaultKeyspace.name);
|
|
77
|
-
//
|
|
115
|
+
// 3. If size mismatch, trigger resize and wait again
|
|
78
116
|
// Ideally this would use the undocumented Keyspaces API, but there seems to be a missing oauth scope that we cannot add via the console yet
|
|
79
117
|
if (defaultKeyspace.cluster_name !== expectedClusterSize) {
|
|
80
118
|
await api.organizations.databases.branches.cluster.patch({
|
|
@@ -89,6 +127,47 @@ export async function ensureProductionBranchClusterSize(api, organization, datab
|
|
|
89
127
|
await waitForKeyspaceReady(api, organization, database, branch, defaultKeyspace.name);
|
|
90
128
|
}
|
|
91
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Ensures that a Postgres branch has the correct cluster size.
|
|
132
|
+
*/
|
|
133
|
+
async function ensurePostgresClusterSize(api, organization, database, branch, expectedClusterSize) {
|
|
134
|
+
const data = await api.organizations.databases.branches.get({
|
|
135
|
+
path: {
|
|
136
|
+
organization,
|
|
137
|
+
database,
|
|
138
|
+
name: branch,
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
if (data.cluster_name === expectedClusterSize) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
await waitForPendingPostgresChanges(api, organization, database, branch);
|
|
145
|
+
const change = await api.organizations.databases.branches.changes.patch({
|
|
146
|
+
path: {
|
|
147
|
+
organization,
|
|
148
|
+
database,
|
|
149
|
+
branch,
|
|
150
|
+
},
|
|
151
|
+
body: {
|
|
152
|
+
cluster_size: expectedClusterSize,
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
await waitForPendingPostgresChanges(api, organization, database, branch, change.id);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Polls for a pending Postgres change to be completed.
|
|
159
|
+
*/
|
|
160
|
+
async function waitForPendingPostgresChanges(api, organization, database, branch, changeId) {
|
|
161
|
+
await poll({
|
|
162
|
+
description: `changes for branch "${branch}"`,
|
|
163
|
+
fn: () => api.organizations.databases.branches.changes.list({
|
|
164
|
+
path: { organization, database, branch },
|
|
165
|
+
}),
|
|
166
|
+
predicate: (response) => response.data.every((change) => change.state === "completed" ||
|
|
167
|
+
change.state === "canceled" ||
|
|
168
|
+
(changeId && change.id === changeId)),
|
|
169
|
+
});
|
|
170
|
+
}
|
|
92
171
|
/**
|
|
93
172
|
* Polls a function until it returns a result that satisfies the predicate.
|
|
94
173
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/planetscale/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/planetscale/utils.ts"],"names":[],"mappings":"AAwBA;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAKnC;IACC,oFAAoF;IACpF,kFAAkF;IAClF,wGAAwG;IACxG,4EAA4E;IAC5E,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QAClE,sCAAsC;QACtC,gFAAgF;QAChF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACjE,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAsB,EACtB,YAAoB,EACpB,QAAgB,EAChB,MAAc;IAEd,OAAO,MAAM,IAAI,CAAC;QAChB,WAAW,EAAE,WAAW,MAAM,SAAS;QACvC,EAAE,EAAE,GAAG,EAAE,CACP,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;YACvC,IAAI,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;SAC/C,CAAC;QACJ,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK;KACpC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAsB,EACtB,YAAoB,EACpB,QAAgB;IAEhB,MAAM,IAAI,CAAC;QACT,WAAW,EAAE,aAAa,QAAQ,SAAS;QAC3C,EAAE,EAAE,GAAG,EAAE,CACP,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC;YAC9B,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE;SACvC,CAAC;QACJ,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK;KACxC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAsB,EACtB,YAAoB,EACpB,QAAgB,EAChB,MAAc,EACd,QAAgB;IAEhB,MAAM,IAAI,CAAC;QACT,WAAW,EAAE,aAAa,QAAQ,SAAS;QAC3C,EAAE,EAAE,GAAG,EAAE,CACP,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;YAC1D,IAAI,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;SACzD,CAAC;QACJ,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CACtB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC;QAC1D,YAAY,EAAE,GAAG;QACjB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,GAAsB,EACtB,YAAoB,EACpB,QAAgB,EAChB,MAAc,EACd,IAA4B,EAC5B,mBAA2C;IAE3C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,oDAAoD;YACpD,MAAM,sBAAsB,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,sBAAsB,CAC1B,GAAG,EACH,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,mBAAmB,CACpB,CAAC;YACF,MAAM;QACR,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,iFAAiF;YACjF,MAAM,yBAAyB,CAC7B,GAAG,EACH,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,mBAAmB,CACpB,CAAC;YACF,MAAM,sBAAsB,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,sBAAsB,CACnC,GAAsB,EACtB,YAAoB,EACpB,QAAgB,EAChB,IAAY;IAEZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC1D,IAAI,EAAE;YACJ,YAAY;YACZ,QAAQ;YACR,IAAI;SACL;KACF,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;YACtD,IAAI,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;SACvC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,sBAAsB,CACnC,GAAsB,EACtB,YAAoB,EACpB,QAAgB,EAChB,MAAc,EACd,mBAA2C;IAE3C,2BAA2B;IAC3B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;QAC1E,IAAI,EAAE;YACJ,YAAY;YACZ,QAAQ;YACR,MAAM;SACP;KACF,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,2DAA2D;IACpI,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,wCAAwC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,6CAA6C;IAC7C,MAAM,oBAAoB,CACxB,GAAG,EACH,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,eAAe,CAAC,IAAI,CACrB,CAAC;IAEF,qDAAqD;IACrD,4IAA4I;IAC5I,IAAI,eAAe,CAAC,YAAY,KAAK,mBAAmB,EAAE,CAAC;QACzD,MAAM,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;YACvD,IAAI,EAAE;gBACJ,YAAY;gBACZ,QAAQ;gBACR,IAAI,EAAE,MAAM;aACb;YACD,IAAI,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE;SAC5C,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAM,oBAAoB,CACxB,GAAG,EACH,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,eAAe,CAAC,IAAI,CACrB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,yBAAyB,CACtC,GAAsB,EACtB,YAAoB,EACpB,QAAgB,EAChB,MAAc,EACd,mBAA2C;IAE3C,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC1D,IAAI,EAAE;YACJ,YAAY;YACZ,QAAQ;YACR,IAAI,EAAE,MAAM;SACb;KACF,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,YAAY,KAAK,mBAAmB,EAAE,CAAC;QAC9C,OAAO;IACT,CAAC;IACD,MAAM,6BAA6B,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QACtE,IAAI,EAAE;YACJ,YAAY;YACZ,QAAQ;YACR,MAAM;SACP;QACD,IAAI,EAAE;YACJ,YAAY,EAAE,mBAAmB;SAClC;KACF,CAAC,CAAC;IACH,MAAM,6BAA6B,CACjC,GAAG,EACH,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,MAAM,CAAC,EAAE,CACV,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,6BAA6B,CAC1C,GAAsB,EACtB,YAAoB,EACpB,QAAgB,EAChB,MAAc,EACd,QAAiB;IAEjB,MAAM,IAAI,CAAC;QACT,WAAW,EAAE,uBAAuB,MAAM,GAAG;QAC7C,EAAE,EAAE,GAAG,EAAE,CACP,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;YAChD,IAAI,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE;SACzC,CAAC;QACJ,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CACtB,QAAQ,CAAC,IAAI,CAAC,KAAK,CACjB,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,KAAK,KAAK,WAAW;YAC5B,MAAM,CAAC,KAAK,KAAK,UAAU;YAC3B,CAAC,QAAQ,IAAI,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CACvC;KACJ,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI,CAAI,KAiCtB;IACC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC;IACtC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CACb,yBAAyB,KAAK,CAAC,WAAW,UAAU,IAAI,CAAC,KAAK,CAC5D,CAAC,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,GAAG,IAAI,CACpC,GAAG,CACL,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC3D,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
|
package/lib/secret.d.ts
CHANGED
|
@@ -4,7 +4,6 @@ declare global {
|
|
|
4
4
|
[name: string]: Secret;
|
|
5
5
|
};
|
|
6
6
|
}
|
|
7
|
-
declare const SecretSymbol: unique symbol;
|
|
8
7
|
/**
|
|
9
8
|
* Internal wrapper for sensitive values like API keys and credentials.
|
|
10
9
|
* When stored in alchemy state files, the value is automatically encrypted
|
|
@@ -43,7 +42,6 @@ declare const SecretSymbol: unique symbol;
|
|
|
43
42
|
export declare class Secret<T = string> {
|
|
44
43
|
readonly unencrypted: T;
|
|
45
44
|
readonly name: string;
|
|
46
|
-
[SecretSymbol]: boolean;
|
|
47
45
|
/**
|
|
48
46
|
* @internal
|
|
49
47
|
*/
|
|
@@ -108,5 +106,4 @@ export declare namespace secret {
|
|
|
108
106
|
}
|
|
109
107
|
const env: Env;
|
|
110
108
|
}
|
|
111
|
-
export {};
|
|
112
109
|
//# sourceMappingURL=secret.d.ts.map
|
package/lib/secret.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,mBAAmB,EAAE;QACvB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,CAAC;CACH;AAYD
|
|
1
|
+
{"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,mBAAmB,EAAE;QACvB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,CAAC;CACH;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,MAAM,CAAC,CAAC,GAAG,MAAM;IAU1B,QAAQ,CAAC,WAAW,EAAE,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAVvB;;OAEG;WACW,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;IAIlC,SAAgB,IAAI,YAAY;gBAErB,WAAW,EAAE,CAAC,EACd,IAAI,GAAE,MAAmB;IAKpC;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAI/C;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAIpD;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;CAG3B;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,CAKvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,MAAM,CAAC,CAAC,GAAG,MAAM,EAC/B,WAAW,EAAE,CAAC,GAAG,SAAS,EAC1B,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAAC,CAAC,CAAC,CAKX;AAED,yBAAiB,MAAM,CAAC;IACtB,UAAiB,GAAG;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;QACtB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KACxD;IAEM,MAAM,GAAG,EAGV,GAAG,CAAC;CASX"}
|
package/lib/secret.js
CHANGED
|
@@ -6,7 +6,6 @@ let i = 0;
|
|
|
6
6
|
function nextName() {
|
|
7
7
|
return `alchemy:anonymous-secret-${i++}`;
|
|
8
8
|
}
|
|
9
|
-
const SecretSymbol = Symbol.for("alchemy::Secret");
|
|
10
9
|
/**
|
|
11
10
|
* Internal wrapper for sensitive values like API keys and credentials.
|
|
12
11
|
* When stored in alchemy state files, the value is automatically encrypted
|
|
@@ -45,7 +44,6 @@ const SecretSymbol = Symbol.for("alchemy::Secret");
|
|
|
45
44
|
export class Secret {
|
|
46
45
|
unencrypted;
|
|
47
46
|
name;
|
|
48
|
-
[SecretSymbol] = true;
|
|
49
47
|
/**
|
|
50
48
|
* @internal
|
|
51
49
|
*/
|
package/lib/secret.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secret.js","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQvC,oFAAoF;AACpF,MAAM,aAAa,GAEf,CAAC,UAAU,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;AAE5C,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,SAAS,QAAQ;IACf,OAAO,4BAA4B,CAAC,EAAE,EAAE,CAAC;AAC3C,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"secret.js","sourceRoot":"","sources":["../src/secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQvC,oFAAoF;AACpF,MAAM,aAAa,GAEf,CAAC,UAAU,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;AAE5C,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,SAAS,QAAQ;IACf,OAAO,4BAA4B,CAAC,EAAE,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,OAAO,MAAM;IAUN;IACA;IAVX;;OAEG;IACI,MAAM,CAAC,GAAG;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAEe,IAAI,GAAG,QAAQ,CAAC;IAChC,YACW,WAAc,EACd,OAAe,QAAQ,EAAE;QADzB,gBAAW,GAAX,WAAW,CAAG;QACd,SAAI,GAAJ,IAAI,CAAqB;QAElC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAI,KAAoB;QACjC,OAAO,QAAQ,CAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAW,KAAoB;QAC1C,OAAO,QAAQ,CAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,UAAU,IAAI,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,CAAC,OAAO,CAAC,MAAM,CAAC;QACd,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAa,OAAY;IAC/C,OAAO,CACL,OAAO,YAAY,MAAM;QACzB,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,MAAM,CACpB,WAA0B,EAC1B,IAAa;IAEb,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,WAAiB,MAAM;IAMR,UAAG,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;QACjC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QACpC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAA6B,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC/D,CAAQ,CAAC;IAEV,SAAS,IAAI,CAAC,IAAY,EAAE,KAAc,EAAE,KAAc;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,kBAAkB,CAAC,CAAC;IACzE,CAAC;AACH,CAAC,EAlBgB,MAAM,KAAN,MAAM,QAkBtB"}
|
|
@@ -19,10 +19,10 @@ export class CloudflareStateStore extends StateStoreProxy {
|
|
|
19
19
|
options;
|
|
20
20
|
constructor(scope, options = {}) {
|
|
21
21
|
super(scope);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
throw new Error("Missing token for DOStateStore. Please set ALCHEMY_STATE_TOKEN in the environment or set the `stateToken` option in the DOStateStore constructor.");
|
|
22
|
+
if (!options.stateToken && !process.env.ALCHEMY_STATE_TOKEN) {
|
|
23
|
+
throw new Error("Missing token for CloudflareStateStore. Please set ALCHEMY_STATE_TOKEN in the environment or set the `stateToken` option in the CloudflareStateStore constructor. See https://alchemy.run/guides/cloudflare-state-store/");
|
|
25
24
|
}
|
|
25
|
+
const stateToken = options.stateToken ?? alchemy.secret(process.env.ALCHEMY_STATE_TOKEN);
|
|
26
26
|
this.options = {
|
|
27
27
|
...options,
|
|
28
28
|
stateToken: stateToken,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare-state-store.js","sourceRoot":"","sources":["../../src/state/cloudflare-state-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAsB7C;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,eAAe;IACvD,OAAO,CAA+D;IACtE,YAAY,KAAY,EAAE,UAAuC,EAAE;QACjE,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,
|
|
1
|
+
{"version":3,"file":"cloudflare-state-store.js","sourceRoot":"","sources":["../../src/state/cloudflare-state-store.ts"],"names":[],"mappings":"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"}
|
package/lib/test/bun.d.ts
CHANGED
|
@@ -32,8 +32,8 @@ type test = {
|
|
|
32
32
|
* @param condition If true, test will be skipped
|
|
33
33
|
*/
|
|
34
34
|
skipIf(condition: boolean): test;
|
|
35
|
-
beforeAll(fn: (scope: Scope) => Promise<void
|
|
36
|
-
afterAll(fn: (scope: Scope) => Promise<void
|
|
35
|
+
beforeAll(fn: (scope: Scope) => Promise<void>, timeout?: number): void;
|
|
36
|
+
afterAll(fn: (scope: Scope) => Promise<void>, timeout?: number): void;
|
|
37
37
|
/**
|
|
38
38
|
* Current test scope
|
|
39
39
|
*/
|