alchemy 0.1.16 → 0.1.18
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/lib/$.d.ts +12 -0
- package/lib/$.d.ts.map +1 -0
- package/lib/$.js +42 -0
- package/lib/$.js.map +1 -0
- package/lib/alchemize.d.ts +47 -0
- package/lib/alchemize.d.ts.map +1 -0
- package/lib/alchemize.js +116 -0
- package/lib/alchemize.js.map +1 -0
- package/lib/apply.d.ts +23 -0
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +4 -0
- package/lib/apply.js.map +1 -1
- package/lib/aws/account-id.d.ts +5 -0
- package/lib/aws/account-id.d.ts.map +1 -0
- package/lib/aws/account-id.js +10 -0
- package/lib/aws/account-id.js.map +1 -0
- package/lib/aws/bucket.d.ts +21 -0
- package/lib/aws/bucket.d.ts.map +1 -0
- package/lib/aws/bucket.js +114 -0
- package/lib/aws/bucket.js.map +1 -0
- package/lib/aws/function.d.ts +53 -0
- package/lib/aws/function.d.ts.map +1 -0
- package/lib/aws/function.js +195 -0
- package/lib/aws/function.js.map +1 -0
- package/lib/aws/index.d.ts +9 -0
- package/lib/aws/index.d.ts.map +1 -0
- package/lib/aws/index.js +9 -0
- package/lib/aws/index.js.map +1 -0
- package/lib/aws/oidc/github-oidc-provider.d.ts +11 -0
- package/lib/aws/oidc/github-oidc-provider.d.ts.map +1 -0
- package/lib/aws/oidc/github-oidc-provider.js +22 -0
- package/lib/aws/oidc/github-oidc-provider.js.map +1 -0
- package/lib/aws/oidc/index.d.ts +3 -0
- package/lib/aws/oidc/index.d.ts.map +1 -0
- package/lib/aws/oidc/index.js +3 -0
- package/lib/aws/oidc/index.js.map +1 -0
- package/lib/aws/oidc/oidc-provider.d.ts +60 -0
- package/lib/aws/oidc/oidc-provider.d.ts.map +1 -0
- package/lib/aws/oidc/oidc-provider.js +140 -0
- package/lib/aws/oidc/oidc-provider.js.map +1 -0
- package/lib/aws/policy.d.ts +46 -0
- package/lib/aws/policy.d.ts.map +1 -0
- package/lib/aws/policy.js +139 -0
- package/lib/aws/policy.js.map +1 -0
- package/lib/aws/queue.d.ts +62 -0
- package/lib/aws/queue.d.ts.map +1 -0
- package/lib/aws/queue.js +167 -0
- package/lib/aws/queue.js.map +1 -0
- package/lib/aws/role.d.ts +27 -0
- package/lib/aws/role.d.ts.map +1 -0
- package/lib/aws/role.js +197 -0
- package/lib/aws/role.js.map +1 -0
- package/lib/aws/ses.d.ts +75 -0
- package/lib/aws/ses.d.ts.map +1 -0
- package/lib/aws/ses.js +189 -0
- package/lib/aws/ses.js.map +1 -0
- package/lib/aws/table.d.ts +26 -0
- package/lib/aws/table.d.ts.map +1 -0
- package/lib/aws/table.js +154 -0
- package/lib/aws/table.js.map +1 -0
- package/lib/cloudflare/api.d.ts +88 -0
- package/lib/cloudflare/api.d.ts.map +1 -0
- package/lib/cloudflare/api.js +184 -0
- package/lib/cloudflare/api.js.map +1 -0
- package/lib/cloudflare/asset-manifest.d.ts +15 -0
- package/lib/cloudflare/asset-manifest.d.ts.map +1 -0
- package/lib/cloudflare/asset-manifest.js +2 -0
- package/lib/cloudflare/asset-manifest.js.map +1 -0
- package/lib/cloudflare/auth.d.ts +52 -0
- package/lib/cloudflare/auth.d.ts.map +1 -0
- package/lib/cloudflare/auth.js +114 -0
- package/lib/cloudflare/auth.js.map +1 -0
- package/lib/cloudflare/bindings.d.ts +261 -0
- package/lib/cloudflare/bindings.d.ts.map +1 -0
- package/lib/cloudflare/bindings.js +2 -0
- package/lib/cloudflare/bindings.js.map +1 -0
- package/lib/cloudflare/bound.d.ts +8 -0
- package/lib/cloudflare/bound.d.ts.map +1 -0
- package/lib/cloudflare/bound.js +2 -0
- package/lib/cloudflare/bound.js.map +1 -0
- package/lib/cloudflare/bucket.d.ts +54 -0
- package/lib/cloudflare/bucket.d.ts.map +1 -0
- package/lib/cloudflare/bucket.js +120 -0
- package/lib/cloudflare/bucket.js.map +1 -0
- package/lib/cloudflare/durable-object-namespace.d.ts +20 -0
- package/lib/cloudflare/durable-object-namespace.d.ts.map +1 -0
- package/lib/cloudflare/durable-object-namespace.js +21 -0
- package/lib/cloudflare/durable-object-namespace.js.map +1 -0
- package/lib/cloudflare/generate-asset-manifest.d.ts +3 -0
- package/lib/cloudflare/generate-asset-manifest.d.ts.map +1 -0
- package/lib/cloudflare/generate-asset-manifest.js +69 -0
- package/lib/cloudflare/generate-asset-manifest.js.map +1 -0
- package/lib/cloudflare/index.d.ts +8 -0
- package/lib/cloudflare/index.d.ts.map +1 -0
- package/lib/cloudflare/index.js +8 -0
- package/lib/cloudflare/index.js.map +1 -0
- package/lib/cloudflare/kv-namespace.d.ts +64 -0
- package/lib/cloudflare/kv-namespace.d.ts.map +1 -0
- package/lib/cloudflare/kv-namespace.js +114 -0
- package/lib/cloudflare/kv-namespace.js.map +1 -0
- package/lib/cloudflare/state.d.ts +83 -0
- package/lib/cloudflare/state.d.ts.map +1 -0
- package/lib/cloudflare/state.js +109 -0
- package/lib/cloudflare/state.js.map +1 -0
- package/lib/cloudflare/static-site-router.d.ts +19 -0
- package/lib/cloudflare/static-site-router.d.ts.map +1 -0
- package/lib/cloudflare/static-site-router.js +110 -0
- package/lib/cloudflare/static-site-router.js.map +1 -0
- package/lib/cloudflare/static-site.d.ts +166 -0
- package/lib/cloudflare/static-site.d.ts.map +1 -0
- package/lib/cloudflare/static-site.js +161 -0
- package/lib/cloudflare/static-site.js.map +1 -0
- package/lib/cloudflare/types.d.ts +52 -0
- package/lib/cloudflare/types.d.ts.map +1 -0
- package/lib/cloudflare/types.js +21 -0
- package/lib/cloudflare/types.js.map +1 -0
- package/lib/cloudflare/upload-asset-manifest.d.ts +12 -0
- package/lib/cloudflare/upload-asset-manifest.d.ts.map +1 -0
- package/lib/cloudflare/upload-asset-manifest.js +55 -0
- package/lib/cloudflare/upload-asset-manifest.js.map +1 -0
- package/lib/cloudflare/worker-metadata.d.ts +130 -0
- package/lib/cloudflare/worker-metadata.d.ts.map +1 -0
- package/lib/cloudflare/worker-metadata.js +2 -0
- package/lib/cloudflare/worker-metadata.js.map +1 -0
- package/lib/cloudflare/worker-migration.d.ts +110 -0
- package/lib/cloudflare/worker-migration.d.ts.map +1 -0
- package/lib/cloudflare/worker-migration.js +11 -0
- package/lib/cloudflare/worker-migration.js.map +1 -0
- package/lib/cloudflare/worker.d.ts +114 -0
- package/lib/cloudflare/worker.d.ts.map +1 -0
- package/lib/cloudflare/worker.js +419 -0
- package/lib/cloudflare/worker.js.map +1 -0
- package/lib/destroy.d.ts +19 -0
- package/lib/encrypt.d.ts +17 -0
- package/lib/encrypt.d.ts.map +1 -0
- package/lib/encrypt.js +45 -0
- package/lib/encrypt.js.map +1 -0
- package/lib/error.d.ts +2 -0
- package/lib/error.d.ts.map +1 -0
- package/lib/error.js +13 -0
- package/lib/error.js.map +1 -0
- package/lib/esbuild.d.ts +152 -0
- package/lib/esbuild.d.ts.map +1 -0
- package/lib/esbuild.js +67 -0
- package/lib/esbuild.js.map +1 -0
- package/lib/fs.d.ts +12 -0
- package/lib/fs.d.ts.map +1 -0
- package/lib/fs.js +41 -0
- package/lib/fs.js.map +1 -0
- package/lib/github/client.d.ts +34 -0
- package/lib/github/client.d.ts.map +1 -0
- package/lib/github/client.js +91 -0
- package/lib/github/client.js.map +1 -0
- package/lib/github/index.d.ts +2 -0
- package/lib/github/index.d.ts.map +1 -0
- package/lib/github/index.js +2 -0
- package/lib/github/index.js.map +1 -0
- package/lib/github/secret.d.ts +47 -0
- package/lib/github/secret.d.ts.map +1 -0
- package/lib/github/secret.js +99 -0
- package/lib/github/secret.js.map +1 -0
- package/lib/global.d.ts +16 -0
- package/lib/global.d.ts.map +1 -0
- package/lib/global.js +42 -0
- package/lib/global.js.map +1 -0
- package/lib/index.d.ts +11 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +10 -0
- package/lib/index.js.map +1 -0
- package/lib/input.d.ts +7 -0
- package/lib/input.d.ts.map +1 -0
- package/lib/input.js +2 -0
- package/lib/input.js.map +1 -0
- package/lib/main.d.ts +3 -0
- package/lib/main.d.ts.map +1 -0
- package/lib/main.js +32 -0
- package/lib/main.js.map +1 -0
- package/lib/output.d.ts +25 -0
- package/lib/output.d.ts.map +1 -0
- package/lib/output.js +23 -0
- package/lib/output.js.map +1 -0
- package/lib/print.d.ts +7 -0
- package/lib/print.d.ts.map +1 -0
- package/lib/print.js +10 -0
- package/lib/print.js.map +1 -0
- package/lib/resource.d.ts +71 -0
- package/lib/resource.d.ts.map +1 -0
- package/lib/resource.js +276 -0
- package/lib/resource.js.map +1 -0
- package/lib/scope.d.ts +18 -0
- package/lib/scope.d.ts.map +1 -0
- package/lib/scope.js +30 -0
- package/lib/scope.js.map +1 -0
- package/lib/secret.d.ts +12 -0
- package/lib/secret.d.ts.map +1 -0
- package/lib/secret.js +30 -0
- package/lib/secret.js.map +1 -0
- package/lib/serde.d.ts +3 -0
- package/lib/serde.d.ts.map +1 -0
- package/lib/serde.js +37 -0
- package/lib/serde.js.map +1 -0
- package/lib/slug.d.ts +2 -0
- package/lib/slug.d.ts.map +1 -0
- package/lib/slug.js +4 -0
- package/lib/slug.js.map +1 -0
- package/lib/state.d.ts +40 -0
- package/lib/state.d.ts.map +1 -0
- package/lib/state.js +74 -0
- package/lib/state.js.map +1 -0
- package/lib/stripe/index.d.ts +4 -0
- package/lib/stripe/index.d.ts.map +1 -0
- package/lib/stripe/index.js +4 -0
- package/lib/stripe/index.js.map +1 -0
- package/lib/stripe/price.d.ts +109 -0
- package/lib/stripe/price.d.ts.map +1 -0
- package/lib/stripe/price.js +112 -0
- package/lib/stripe/price.js.map +1 -0
- package/lib/stripe/product.d.ts +86 -0
- package/lib/stripe/product.d.ts.map +1 -0
- package/lib/stripe/product.js +90 -0
- package/lib/stripe/product.js.map +1 -0
- package/lib/stripe/webhook.d.ts +73 -0
- package/lib/stripe/webhook.d.ts.map +1 -0
- package/lib/stripe/webhook.js +94 -0
- package/lib/stripe/webhook.js.map +1 -0
- package/lib/utils/content-type.d.ts +8 -0
- package/lib/utils/content-type.d.ts.map +1 -0
- package/lib/utils/content-type.js +41 -0
- package/lib/utils/content-type.js.map +1 -0
- package/lib/utils/retry.d.ts +13 -0
- package/lib/utils/retry.d.ts.map +1 -0
- package/lib/utils/retry.js +32 -0
- package/lib/utils/retry.js.map +1 -0
- package/package.json +3 -6
- package/src/alchemize.ts +9 -0
- package/src/apply.ts +3 -0
- package/src/cloudflare/bindings.ts +9 -1
- package/src/cloudflare/bound.ts +18 -0
- package/src/cloudflare/bucket.ts +240 -0
- package/src/cloudflare/index.ts +1 -0
- package/src/cloudflare/static-site.ts +14 -2
- package/src/cloudflare/worker.ts +84 -59
- package/src/encrypt.ts +79 -0
- package/src/github/secret.ts +34 -33
- package/src/index.ts +1 -0
- package/src/input.ts +13 -10
- package/src/output.ts +13 -9
- package/src/secret.ts +41 -0
- package/src/serde.ts +46 -0
- package/src/state.ts +3 -2
package/src/input.ts
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import type { Output } from "./output";
|
|
2
|
+
import type { Secret } from "./secret";
|
|
2
3
|
|
|
3
4
|
export type Inputs<P extends any[]> = P extends [infer First, ...infer Rest]
|
|
4
5
|
? [Input<First>, ...Inputs<Rest>]
|
|
5
6
|
: [];
|
|
6
7
|
|
|
7
|
-
export type Input<T = any> =
|
|
8
|
-
| T
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
?
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
export type Input<T = any> = T extends Secret
|
|
9
|
+
? T | Output<T>
|
|
10
|
+
:
|
|
11
|
+
| T
|
|
12
|
+
| Output<T>
|
|
13
|
+
| (T extends any[] ? Inputs<T> : never)
|
|
14
|
+
| (T extends string | number | boolean ? Output<T> : never)
|
|
15
|
+
| (T extends object
|
|
16
|
+
? {
|
|
17
|
+
[k in keyof T]: Input<T[k]>;
|
|
18
|
+
}
|
|
19
|
+
: never);
|
package/src/output.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { Secret } from "./secret";
|
|
2
|
+
|
|
1
3
|
export function isOutput<T>(value: any): value is Output<T> {
|
|
2
4
|
return (
|
|
3
5
|
value && typeof value === "object" && typeof value.apply === "function"
|
|
@@ -45,15 +47,17 @@ export class OutputChain<T, U> {
|
|
|
45
47
|
|
|
46
48
|
export type Resolved<O> = O extends Output<infer U>
|
|
47
49
|
? U
|
|
48
|
-
: O extends
|
|
49
|
-
?
|
|
50
|
-
: O extends
|
|
51
|
-
?
|
|
52
|
-
: O extends
|
|
53
|
-
?
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
: O extends Secret
|
|
51
|
+
? Secret
|
|
52
|
+
: O extends null
|
|
53
|
+
? O
|
|
54
|
+
: O extends any[]
|
|
55
|
+
? ResolveN<O>
|
|
56
|
+
: O extends object
|
|
57
|
+
? {
|
|
58
|
+
[k in keyof O]: Resolved<O[k]>;
|
|
59
|
+
}
|
|
60
|
+
: O;
|
|
57
61
|
|
|
58
62
|
type ResolveN<O extends any[]> = O extends [infer First, ...infer Rest]
|
|
59
63
|
? [Resolved<First>, ...ResolveN<Rest>]
|
package/src/secret.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import type { Input } from "./input";
|
|
3
|
+
import { type Output, isOutput } from "./output";
|
|
4
|
+
|
|
5
|
+
const passphraseContext = new AsyncLocalStorage<string>();
|
|
6
|
+
|
|
7
|
+
export function secret<S extends Input<string> | undefined>(
|
|
8
|
+
unencrypted: S,
|
|
9
|
+
): S extends undefined
|
|
10
|
+
? never
|
|
11
|
+
: S extends Output<string>
|
|
12
|
+
? Output<Secret>
|
|
13
|
+
: Secret {
|
|
14
|
+
if (unencrypted === undefined) {
|
|
15
|
+
throw new Error("Secret cannot be undefined");
|
|
16
|
+
}
|
|
17
|
+
return (
|
|
18
|
+
isOutput(unencrypted) ? unencrypted.apply(secret) : new Secret(unencrypted)
|
|
19
|
+
) as any;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class Secret {
|
|
23
|
+
public readonly type = "secret";
|
|
24
|
+
constructor(readonly unencrypted: string) {}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function setSecretPassphrase(passphrase: string) {
|
|
28
|
+
passphraseContext.enterWith(passphrase);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function getSecretPassphrase(): string {
|
|
32
|
+
const passphrase = passphraseContext.getStore();
|
|
33
|
+
if (!passphrase) {
|
|
34
|
+
throw new Error("No passphrase set");
|
|
35
|
+
}
|
|
36
|
+
return passphrase;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function tryGetSecretPassphrase(): string | undefined {
|
|
40
|
+
return passphraseContext.getStore();
|
|
41
|
+
}
|
package/src/serde.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { decryptWithKey, encryptWithKey } from "./encrypt";
|
|
2
|
+
import { Secret, getSecretPassphrase } from "./secret";
|
|
3
|
+
|
|
4
|
+
export async function serialize(value: any): Promise<any> {
|
|
5
|
+
if (Array.isArray(value)) {
|
|
6
|
+
return Promise.all(value.map(serialize));
|
|
7
|
+
} else if (value instanceof Secret) {
|
|
8
|
+
return {
|
|
9
|
+
"@secret": await encryptWithKey(value.unencrypted, getSecretPassphrase()),
|
|
10
|
+
};
|
|
11
|
+
} else if (value && typeof value === "object") {
|
|
12
|
+
return Object.fromEntries(
|
|
13
|
+
await Promise.all(
|
|
14
|
+
Object.entries(value).map(async ([key, value]) => [
|
|
15
|
+
key,
|
|
16
|
+
await serialize(value),
|
|
17
|
+
]),
|
|
18
|
+
),
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export async function deserialize(value: any): Promise<any> {
|
|
25
|
+
if (Array.isArray(value)) {
|
|
26
|
+
return await Promise.all(
|
|
27
|
+
value.map(async (item) => await deserialize(item)),
|
|
28
|
+
);
|
|
29
|
+
} else if (value && typeof value === "object") {
|
|
30
|
+
if (typeof value["@secret"] === "string") {
|
|
31
|
+
return new Secret(
|
|
32
|
+
await decryptWithKey(value["@secret"], getSecretPassphrase()),
|
|
33
|
+
);
|
|
34
|
+
} else {
|
|
35
|
+
return Object.fromEntries(
|
|
36
|
+
await Promise.all(
|
|
37
|
+
Object.entries(value).map(async ([key, value]) => [
|
|
38
|
+
key,
|
|
39
|
+
await deserialize(value),
|
|
40
|
+
]),
|
|
41
|
+
),
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
}
|
package/src/state.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { ignore } from "./error";
|
|
4
|
+
import { deserialize, serialize } from "./serde";
|
|
4
5
|
|
|
5
6
|
export interface State {
|
|
6
7
|
status:
|
|
@@ -79,7 +80,7 @@ export class FileSystemStateStore implements StateStore {
|
|
|
79
80
|
await this.getPath(key),
|
|
80
81
|
"utf8",
|
|
81
82
|
);
|
|
82
|
-
return JSON.parse(content) as State;
|
|
83
|
+
return (await deserialize(JSON.parse(content))) as State;
|
|
83
84
|
} catch (error: any) {
|
|
84
85
|
if (error.code === "ENOENT") {
|
|
85
86
|
return undefined;
|
|
@@ -91,7 +92,7 @@ export class FileSystemStateStore implements StateStore {
|
|
|
91
92
|
async set(key: string, value: State): Promise<void> {
|
|
92
93
|
return fs.promises.writeFile(
|
|
93
94
|
await this.getPath(key),
|
|
94
|
-
JSON.stringify(value, null, 2),
|
|
95
|
+
JSON.stringify(await serialize(value), null, 2),
|
|
95
96
|
);
|
|
96
97
|
}
|
|
97
98
|
|