alchemy 2.0.0-beta.13 → 2.0.0-beta.15
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 +9477 -9290
- package/bin/alchemy.js.map +1 -1
- package/bin/alchemy.ts +6 -2
- package/bin/cli.js +61 -0
- package/bin/commands/deploy.ts +6 -4
- package/bin/commands/login.ts +1 -1
- package/bin/commands/logs.ts +1 -1
- package/bin/commands/state.ts +233 -0
- package/bin/commands/tail.ts +1 -1
- package/lib/AWS/AutoScaling/LaunchTemplate.d.ts +1 -1
- package/lib/AWS/EC2/Instance.d.ts +1 -1
- package/lib/AWS/EC2/hosted.d.ts +2 -2
- package/lib/AWS/ECS/Task.d.ts +4 -4
- package/lib/AWS/ECS/Task.d.ts.map +1 -1
- package/lib/AWS/ECS/Task.js +2 -2
- package/lib/AWS/ECS/Task.js.map +1 -1
- package/lib/AWS/Environment.d.ts +2 -2
- package/lib/AWS/Lambda/BucketEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/BucketEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/EventBridgeEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/EventBridgeEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/Function.d.ts +2 -2
- package/lib/AWS/Lambda/Function.d.ts.map +1 -1
- package/lib/AWS/Lambda/Function.js +1 -2
- package/lib/AWS/Lambda/Function.js.map +1 -1
- package/lib/AWS/Lambda/QueueEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/QueueEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/StreamEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/StreamEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/TableEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/TableEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/TopicEventSource.d.ts +1 -1
- package/lib/AWS/Lambda/TopicEventSource.d.ts.map +1 -1
- package/lib/AWS/SQS/QueueSink.d.ts.map +1 -1
- package/lib/AWS/SQS/QueueSink.js +1 -2
- package/lib/AWS/SQS/QueueSink.js.map +1 -1
- package/lib/Agent/coding/bash.d.ts +2 -6
- package/lib/Agent/coding/bash.d.ts.map +1 -1
- package/lib/Agent/coding/bash.js +2 -3
- package/lib/Agent/coding/bash.js.map +1 -1
- package/lib/Agent/coding/edit.d.ts +1 -1
- package/lib/Agent/coding/glob.d.ts +2 -4
- package/lib/Agent/coding/glob.d.ts.map +1 -1
- package/lib/Agent/coding/glob.js +1 -2
- package/lib/Agent/coding/glob.js.map +1 -1
- package/lib/Agent/coding/grep.d.ts +2 -4
- package/lib/Agent/coding/grep.d.ts.map +1 -1
- package/lib/Agent/coding/grep.js +1 -2
- package/lib/Agent/coding/grep.js.map +1 -1
- package/lib/Agent/coding/read.d.ts +1 -1
- package/lib/Agent/coding/write.d.ts +1 -1
- package/lib/Agent/lsp/client.d.ts +2 -2
- package/lib/Agent/util/ripgrep.d.ts +2 -2
- package/lib/AlchemyContext.d.ts +13 -0
- package/lib/AlchemyContext.d.ts.map +1 -0
- package/lib/AlchemyContext.js +18 -0
- package/lib/AlchemyContext.js.map +1 -0
- package/lib/Auth/AuthProvider.js +1 -1
- package/lib/Auth/AuthProvider.js.map +1 -1
- package/lib/Auth/Profile.d.ts +1 -1
- package/lib/Auth/index.d.ts +3 -1
- package/lib/Auth/index.d.ts.map +1 -1
- package/lib/Auth/index.js +3 -0
- package/lib/Auth/index.js.map +1 -1
- package/lib/Build/Command.d.ts +1 -1
- package/lib/Build/Memo.d.ts +1 -1
- package/lib/Bundle/Docker.d.ts +3 -3
- package/lib/Bundle/TempRoot.d.ts +3 -3
- package/lib/Cli/LoggingCli.d.ts +4 -0
- package/lib/Cli/LoggingCli.d.ts.map +1 -0
- package/lib/{Test/TestCli.js → Cli/LoggingCli.js} +3 -3
- package/lib/Cli/LoggingCli.js.map +1 -0
- package/lib/Cli/index.d.ts +0 -1
- package/lib/Cli/index.d.ts.map +1 -1
- package/lib/Cli/index.js +4 -1
- package/lib/Cli/index.js.map +1 -1
- package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts +58 -0
- package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts.map +1 -0
- package/lib/Cloudflare/ApiToken/AccountApiToken.js +137 -0
- package/lib/Cloudflare/ApiToken/AccountApiToken.js.map +1 -0
- package/lib/Cloudflare/ApiToken/Common.d.ts +91 -0
- package/lib/Cloudflare/ApiToken/Common.d.ts.map +1 -0
- package/lib/Cloudflare/ApiToken/Common.js +61 -0
- package/lib/Cloudflare/ApiToken/Common.js.map +1 -0
- package/lib/Cloudflare/ApiToken/PermissionGroups.d.ts +1549 -0
- package/lib/Cloudflare/ApiToken/PermissionGroups.d.ts.map +1 -0
- package/lib/Cloudflare/ApiToken/PermissionGroups.js +1856 -0
- package/lib/Cloudflare/ApiToken/PermissionGroups.js.map +1 -0
- package/lib/Cloudflare/ApiToken/UserApiToken.d.ts +49 -0
- package/lib/Cloudflare/ApiToken/UserApiToken.d.ts.map +1 -0
- package/lib/Cloudflare/ApiToken/UserApiToken.js +113 -0
- package/lib/Cloudflare/ApiToken/UserApiToken.js.map +1 -0
- package/lib/Cloudflare/ApiToken/index.d.ts +5 -0
- package/lib/Cloudflare/ApiToken/index.d.ts.map +1 -0
- package/lib/Cloudflare/ApiToken/index.js +5 -0
- package/lib/Cloudflare/ApiToken/index.js.map +1 -0
- package/lib/Cloudflare/Auth/AuthProvider.js +2 -2
- package/lib/Cloudflare/Auth/AuthProvider.js.map +1 -1
- package/lib/Cloudflare/CloudflareEnvironment.d.ts +1 -1
- package/lib/Cloudflare/Container/ContainerApplication.d.ts +2 -2
- package/lib/Cloudflare/Container/ContainerApplication.d.ts.map +1 -1
- package/lib/Cloudflare/Container/ContainerApplication.js +7 -2
- package/lib/Cloudflare/Container/ContainerApplication.js.map +1 -1
- package/lib/Cloudflare/EdgeSession.d.ts +53 -0
- package/lib/Cloudflare/EdgeSession.d.ts.map +1 -0
- package/lib/Cloudflare/EdgeSession.js +78 -0
- package/lib/Cloudflare/EdgeSession.js.map +1 -0
- package/lib/Cloudflare/Providers.d.ts +1 -1
- package/lib/Cloudflare/Providers.d.ts.map +1 -1
- package/lib/Cloudflare/Providers.js +4 -1
- package/lib/Cloudflare/Providers.js.map +1 -1
- package/lib/Cloudflare/StateStore/Api.d.ts +61 -0
- package/lib/Cloudflare/StateStore/Api.d.ts.map +1 -0
- package/lib/Cloudflare/StateStore/Api.js +103 -0
- package/lib/Cloudflare/StateStore/Api.js.map +1 -0
- package/lib/Cloudflare/StateStore/State.d.ts +39 -0
- package/lib/Cloudflare/StateStore/State.d.ts.map +1 -0
- package/lib/Cloudflare/StateStore/State.js +217 -0
- package/lib/Cloudflare/StateStore/State.js.map +1 -0
- package/lib/Cloudflare/StateStore/Store.d.ts +82 -0
- package/lib/Cloudflare/StateStore/Store.d.ts.map +1 -0
- package/lib/Cloudflare/StateStore/Store.js +191 -0
- package/lib/Cloudflare/StateStore/Store.js.map +1 -0
- package/lib/Cloudflare/StateStore/Token.d.ts +43 -0
- package/lib/Cloudflare/StateStore/Token.d.ts.map +1 -0
- package/lib/Cloudflare/StateStore/Token.js +61 -0
- package/lib/Cloudflare/StateStore/Token.js.map +1 -0
- package/lib/Cloudflare/StateStore/index.d.ts +2 -0
- package/lib/Cloudflare/StateStore/index.d.ts.map +1 -0
- package/lib/Cloudflare/StateStore/index.js +2 -0
- package/lib/Cloudflare/StateStore/index.js.map +1 -0
- package/lib/Cloudflare/Workers/Assets.d.ts +2 -2
- package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts +2 -2
- package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectNamespace.js +0 -1
- package/lib/Cloudflare/Workers/DurableObjectNamespace.js.map +1 -1
- package/lib/Cloudflare/Workers/HttpServer.d.ts +1 -1
- package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/HttpServer.js.map +1 -1
- package/lib/Cloudflare/Workers/Worker.d.ts +5 -5
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +0 -1
- package/lib/Cloudflare/Workers/Worker.js.map +1 -1
- package/lib/Cloudflare/index.d.ts +4 -1
- package/lib/Cloudflare/index.d.ts.map +1 -1
- package/lib/Cloudflare/index.js +4 -1
- package/lib/Cloudflare/index.js.map +1 -1
- package/lib/Deploy.d.ts +10 -0
- package/lib/Deploy.d.ts.map +1 -0
- package/lib/Deploy.js +12 -0
- package/lib/Deploy.js.map +1 -0
- package/lib/Destroy.d.ts +8 -3
- package/lib/Destroy.d.ts.map +1 -1
- package/lib/Destroy.js +8 -8
- package/lib/Destroy.js.map +1 -1
- package/lib/GitHub/Providers.d.ts +3 -0
- package/lib/GitHub/Providers.d.ts.map +1 -0
- package/lib/GitHub/Providers.js +5 -0
- package/lib/GitHub/Providers.js.map +1 -0
- package/lib/GitHub/index.d.ts +1 -0
- package/lib/GitHub/index.d.ts.map +1 -1
- package/lib/GitHub/index.js +1 -0
- package/lib/GitHub/index.js.map +1 -1
- package/lib/Http.d.ts +1 -1
- package/lib/Http.d.ts.map +1 -1
- package/lib/Http.js +7 -3
- package/lib/Http.js.map +1 -1
- package/lib/Kubernetes/client.d.ts +10 -10
- package/lib/Output.d.ts.map +1 -1
- package/lib/Output.js +4 -0
- package/lib/Output.js.map +1 -1
- package/lib/Plan.d.ts.map +1 -1
- package/lib/Plan.js +4 -0
- package/lib/Plan.js.map +1 -1
- package/lib/Platform.d.ts +2 -2
- package/lib/Platform.d.ts.map +1 -1
- package/lib/Platform.js.map +1 -1
- package/lib/Provider.d.ts.map +1 -1
- package/lib/Provider.js +0 -1
- package/lib/Provider.js.map +1 -1
- package/lib/Stack.d.ts +24 -12
- package/lib/Stack.d.ts.map +1 -1
- package/lib/Stack.js +47 -10
- package/lib/Stack.js.map +1 -1
- package/lib/State/HttpStateApi.d.ts +96 -0
- package/lib/State/HttpStateApi.d.ts.map +1 -0
- package/lib/State/HttpStateApi.js +96 -0
- package/lib/State/HttpStateApi.js.map +1 -0
- package/lib/State/HttpStateStore.d.ts +10 -0
- package/lib/State/HttpStateStore.d.ts.map +1 -0
- package/lib/State/HttpStateStore.js +102 -0
- package/lib/State/HttpStateStore.js.map +1 -0
- package/lib/State/InMemoryState.d.ts +2 -30
- package/lib/State/InMemoryState.d.ts.map +1 -1
- package/lib/State/InMemoryState.js +23 -18
- package/lib/State/InMemoryState.js.map +1 -1
- package/lib/State/LocalState.d.ts +4 -2
- package/lib/State/LocalState.d.ts.map +1 -1
- package/lib/State/LocalState.js +9 -41
- package/lib/State/LocalState.js.map +1 -1
- package/lib/State/State.d.ts +11 -4
- package/lib/State/State.d.ts.map +1 -1
- package/lib/State/State.js +1 -1
- package/lib/State/State.js.map +1 -1
- package/lib/State/StateEncoding.d.ts +31 -0
- package/lib/State/StateEncoding.d.ts.map +1 -0
- package/lib/State/StateEncoding.js +82 -0
- package/lib/State/StateEncoding.js.map +1 -0
- package/lib/State/Sync.d.ts +23 -0
- package/lib/State/Sync.d.ts.map +1 -0
- package/lib/State/Sync.js +49 -0
- package/lib/State/Sync.js.map +1 -0
- package/lib/State/index.d.ts +4 -0
- package/lib/State/index.d.ts.map +1 -1
- package/lib/State/index.js +4 -0
- package/lib/State/index.js.map +1 -1
- package/lib/Test/Bun.d.ts +13 -17
- package/lib/Test/Bun.d.ts.map +1 -1
- package/lib/Test/Bun.js +17 -36
- package/lib/Test/Bun.js.map +1 -1
- package/lib/Test/TestState.d.ts +1 -2
- package/lib/Test/TestState.d.ts.map +1 -1
- package/lib/Test/TestState.js +5 -9
- package/lib/Test/TestState.js.map +1 -1
- package/lib/Test/Vitest.d.ts +3 -2
- package/lib/Test/Vitest.d.ts.map +1 -1
- package/lib/Test/Vitest.js +20 -11
- package/lib/Test/Vitest.js.map +1 -1
- package/lib/Test/index.d.ts +0 -1
- package/lib/Test/index.d.ts.map +1 -1
- package/lib/Test/index.js +0 -1
- package/lib/Test/index.js.map +1 -1
- package/lib/Util/FileLogger.d.ts +2 -2
- package/lib/Util/FileLogger.d.ts.map +1 -1
- package/lib/Util/FileLogger.js +2 -2
- package/lib/Util/FileLogger.js.map +1 -1
- package/lib/cli/index.d.ts +10 -5
- package/lib/cli/index.d.ts.map +1 -1
- package/lib/cli/index.js +2 -43045
- package/lib/cli/index.js.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/package.json +30 -15
- package/src/AWS/ECS/Task.ts +4 -4
- package/src/AWS/Lambda/Function.ts +2 -3
- package/src/AWS/SQS/QueueSink.ts +1 -2
- package/src/Agent/coding/bash.ts +2 -3
- package/src/Agent/coding/glob.ts +1 -2
- package/src/Agent/coding/grep.ts +1 -2
- package/src/AlchemyContext.ts +27 -0
- package/src/Auth/AuthProvider.ts +1 -1
- package/src/Auth/index.ts +3 -1
- package/src/{Test/TestCli.ts → Cli/LoggingCli.ts} +2 -2
- package/src/Cli/index.ts +4 -1
- package/src/Cloudflare/ApiToken/AccountApiToken.ts +197 -0
- package/src/Cloudflare/ApiToken/Common.ts +148 -0
- package/src/Cloudflare/ApiToken/PermissionGroups.ts +1910 -0
- package/src/Cloudflare/ApiToken/UserApiToken.ts +168 -0
- package/src/Cloudflare/ApiToken/index.ts +4 -0
- package/src/Cloudflare/Auth/AuthProvider.ts +2 -2
- package/src/Cloudflare/Container/ContainerApplication.ts +8 -2
- package/src/Cloudflare/EdgeSession.ts +144 -0
- package/src/Cloudflare/Providers.ts +5 -0
- package/src/Cloudflare/StateStore/Api.ts +159 -0
- package/src/Cloudflare/StateStore/State.ts +318 -0
- package/src/Cloudflare/StateStore/Store.ts +290 -0
- package/src/Cloudflare/StateStore/Token.ts +68 -0
- package/src/Cloudflare/StateStore/index.ts +1 -0
- package/src/Cloudflare/Workers/DurableObjectNamespace.ts +1 -6
- package/src/Cloudflare/Workers/HttpServer.ts +1 -1
- package/src/Cloudflare/Workers/Worker.ts +7 -7
- package/src/Cloudflare/index.ts +4 -1
- package/src/Deploy.ts +25 -0
- package/src/Destroy.ts +25 -13
- package/src/GitHub/Providers.ts +6 -0
- package/src/GitHub/index.ts +1 -0
- package/src/Http.ts +31 -16
- package/src/Output.ts +3 -2
- package/src/Plan.ts +3 -0
- package/src/Platform.ts +8 -2
- package/src/Provider.ts +0 -2
- package/src/Stack.ts +146 -45
- package/src/State/HttpStateApi.ts +155 -0
- package/src/State/HttpStateStore.ts +156 -0
- package/src/State/InMemoryState.ts +15 -17
- package/src/State/LocalState.ts +13 -45
- package/src/State/State.ts +13 -4
- package/src/State/StateEncoding.ts +83 -0
- package/src/State/Sync.ts +89 -0
- package/src/State/index.ts +4 -0
- package/src/Test/Bun.ts +31 -89
- package/src/Test/TestState.ts +6 -8
- package/src/Test/Vitest.ts +32 -19
- package/src/Test/index.ts +0 -1
- package/src/Util/FileLogger.ts +2 -2
- package/src/index.ts +2 -1
- package/lib/Config.d.ts +0 -20
- package/lib/Config.d.ts.map +0 -1
- package/lib/Config.js +0 -22
- package/lib/Config.js.map +0 -1
- package/lib/Observability.d.ts +0 -2
- package/lib/Observability.d.ts.map +0 -1
- package/lib/Observability.js +0 -1
- package/lib/Observability.js.map +0 -1
- package/lib/Test/TestCli.d.ts +0 -4
- package/lib/Test/TestCli.d.ts.map +0 -1
- package/lib/Test/TestCli.js.map +0 -1
- package/src/Config.ts +0 -31
- package/src/Observability.ts +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as EffectContext from "effect/Context";
|
|
2
|
+
import * as FileSystem from "effect/FileSystem";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
import * as Path from "effect/Path";
|
|
5
|
+
declare const AlchemyContext_base: EffectContext.ServiceClass<AlchemyContext, "alchemy/Context", {
|
|
6
|
+
dotAlchemy: string;
|
|
7
|
+
updateStateStore: boolean;
|
|
8
|
+
}>;
|
|
9
|
+
export declare class AlchemyContext extends AlchemyContext_base {
|
|
10
|
+
}
|
|
11
|
+
export declare const AlchemyContextLive: Layer.Layer<AlchemyContext, import("effect/PlatformError").PlatformError, Path.Path | FileSystem.FileSystem>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=AlchemyContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlchemyContext.d.ts","sourceRoot":"","sources":["../src/AlchemyContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;;gBAKpB,MAAM;sBACA,OAAO;;AAJ7B,qBAAa,cAAe,SAAQ,mBAMd;CAAG;AAEzB,eAAO,MAAM,kBAAkB,8GAY9B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as EffectContext from "effect/Context";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as FileSystem from "effect/FileSystem";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
|
+
import * as Path from "effect/Path";
|
|
6
|
+
export class AlchemyContext extends EffectContext.Service()("alchemy/Context") {
|
|
7
|
+
}
|
|
8
|
+
export const AlchemyContextLive = Layer.effect(AlchemyContext, Effect.gen(function* () {
|
|
9
|
+
const fs = yield* FileSystem.FileSystem;
|
|
10
|
+
const path = yield* Path.Path;
|
|
11
|
+
const dir = path.join(process.cwd(), ".alchemy");
|
|
12
|
+
yield* fs.makeDirectory(dir, { recursive: true });
|
|
13
|
+
return {
|
|
14
|
+
dotAlchemy: dir,
|
|
15
|
+
updateStateStore: false,
|
|
16
|
+
};
|
|
17
|
+
}));
|
|
18
|
+
//# sourceMappingURL=AlchemyContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlchemyContext.js","sourceRoot":"","sources":["../src/AlchemyContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAEpC,MAAM,OAAO,cAAe,SAAQ,aAAa,CAAC,OAAO,EAMtD,CAAC,iBAAiB,CAAC;CAAG;AAEzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAC5C,cAAc,EACd,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IACjD,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,OAAO;QACL,UAAU,EAAE,GAAG;QACf,gBAAgB,EAAE,KAAK;KACxB,CAAC;AACJ,CAAC,CAAC,CACH,CAAC"}
|
package/lib/Auth/AuthProvider.js
CHANGED
|
@@ -38,7 +38,7 @@ export const AuthProviderLayer = () => (name, impl) => Layer.effectDiscard(AuthP
|
|
|
38
38
|
*/
|
|
39
39
|
export const getAuthProvider = (name) => Effect.flatMap(AuthProviders.asEffect(), (registry) => registry[name] == null
|
|
40
40
|
? Effect.fail(new AuthError({
|
|
41
|
-
message: `AuthProvider '${name}' is not registered. Make sure its layer has been
|
|
41
|
+
message: `AuthProvider '${name}' is not registered. Make sure its layer has been provided.`,
|
|
42
42
|
}))
|
|
43
43
|
: Effect.succeed(registry[name]));
|
|
44
44
|
//# sourceMappingURL=AuthProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthProvider.js","sourceRoot":"","sources":["../../src/Auth/AuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,gBAAgB,EAAa,CACjE,WAAW,EACX;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;CACtC,CACF;CAAG;AAEJ,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,OAAO,EAK/C,CAAC,eAAe,CAAC;CAAG;AAkEvB,MAAM,CAAC,MAAM,YAAY,GACvB,GAAmD,EAAE,CACrD,CAQE,IAAY,EACZ,IAsBK,EACL,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1C,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,GAAG,EAAE,CACH,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;QACjB,IAAI,EAAE,cAAc;QACpB,IAAI;QACJ,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI;YACJ,CAAC,GAAG,IAA2B,EAAE,EAAE,CACjC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAC/C,CAAC,CACH;KACmC,CAAC,CAC1C,CAAC;AACJ,CAAC,CAAC,CAAC;AAEP;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAC5B,GAAmD,EAAE,CACrD,CAQE,IAAY,EACZ,IAsBK,EACL,EAAE,CACF,KAAK,CAAC,aAAa,CACjB,YAAY,EAAuB,CAOjC,IAAI,EAAE,IAAI,CAAC,CACd,CAAC;AAEN;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAI7B,IAAY,EACgE,EAAE,CAC9E,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CACpD,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI;IACpB,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,CAAC;QACZ,OAAO,EAAE,iBAAiB,IAAI,
|
|
1
|
+
{"version":3,"file":"AuthProvider.js","sourceRoot":"","sources":["../../src/Auth/AuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,gBAAgB,EAAa,CACjE,WAAW,EACX;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;CACtC,CACF;CAAG;AAEJ,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,OAAO,EAK/C,CAAC,eAAe,CAAC;CAAG;AAkEvB,MAAM,CAAC,MAAM,YAAY,GACvB,GAAmD,EAAE,CACrD,CAQE,IAAY,EACZ,IAsBK,EACL,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1C,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,GAAG,EAAE,CACH,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;QACjB,IAAI,EAAE,cAAc;QACpB,IAAI;QACJ,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI;YACJ,CAAC,GAAG,IAA2B,EAAE,EAAE,CACjC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAC/C,CAAC,CACH;KACmC,CAAC,CAC1C,CAAC;AACJ,CAAC,CAAC,CAAC;AAEP;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAC5B,GAAmD,EAAE,CACrD,CAQE,IAAY,EACZ,IAsBK,EACL,EAAE,CACF,KAAK,CAAC,aAAa,CACjB,YAAY,EAAuB,CAOjC,IAAI,EAAE,IAAI,CAAC,CACd,CAAC;AAEN;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAI7B,IAAY,EACgE,EAAE,CAC9E,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CACpD,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI;IACpB,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,CAAC;QACZ,OAAO,EAAE,iBAAiB,IAAI,6DAA6D;KAC5F,CAAC,CACH;IACH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC,CAAC,CACxE,CAAC"}
|
package/lib/Auth/Profile.d.ts
CHANGED
|
@@ -74,6 +74,6 @@ export declare const loadOrConfigure: <Config extends {
|
|
|
74
74
|
* - other: Other authentication methods
|
|
75
75
|
*/
|
|
76
76
|
method: string;
|
|
77
|
-
}, import("
|
|
77
|
+
}, import("effect/PlatformError").PlatformError | import("./AuthProvider.ts").AuthError, FileSystem.FileSystem>;
|
|
78
78
|
export {};
|
|
79
79
|
//# sourceMappingURL=Profile.d.ts.map
|
package/lib/Auth/index.d.ts
CHANGED
package/lib/Auth/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}
|
package/lib/Auth/index.js
CHANGED
package/lib/Auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}
|
package/lib/Build/Command.d.ts
CHANGED
|
@@ -89,7 +89,7 @@ export interface Command extends Resource<"Build.Command", CommandProps, {
|
|
|
89
89
|
* });
|
|
90
90
|
*/
|
|
91
91
|
export declare const Command: import("../Resource.ts").ResourceClass<Command>;
|
|
92
|
-
export declare const CommandProvider: () => import("effect/Layer").Layer<Provider.Provider<Command>, never, import("effect/Scope").Scope | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner
|
|
92
|
+
export declare const CommandProvider: () => import("effect/Layer").Layer<Provider.Provider<Command>, never, Path.Path | FileSystem.FileSystem | import("effect/Scope").Scope | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner>;
|
|
93
93
|
export interface RunBuildCommandOptions {
|
|
94
94
|
command: string;
|
|
95
95
|
cwd?: string;
|
package/lib/Build/Memo.d.ts
CHANGED
|
@@ -41,5 +41,5 @@ export interface MemoOptions {
|
|
|
41
41
|
export declare const hashDirectory: (props: {
|
|
42
42
|
cwd?: string;
|
|
43
43
|
memo?: MemoOptions;
|
|
44
|
-
}) => Effect.Effect<string, PlatformError,
|
|
44
|
+
}) => Effect.Effect<string, PlatformError, Path.Path | FileSystem.FileSystem>;
|
|
45
45
|
//# sourceMappingURL=Memo.d.ts.map
|
package/lib/Bundle/Docker.d.ts
CHANGED
|
@@ -31,11 +31,11 @@ export interface DockerBuildOptions {
|
|
|
31
31
|
readonly extraArgs?: ReadonlyArray<string>;
|
|
32
32
|
readonly env?: Record<string, string | undefined>;
|
|
33
33
|
}
|
|
34
|
-
export declare const materializeDockerfile: (dockerfile: string, dir: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError,
|
|
34
|
+
export declare const materializeDockerfile: (dockerfile: string, dir: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError, Path.Path | FileSystem.FileSystem>;
|
|
35
35
|
export declare const writeContextFiles: (dir: string, files: readonly {
|
|
36
36
|
readonly path: string;
|
|
37
37
|
readonly content: string | Uint8Array;
|
|
38
|
-
}[]) => Effect.Effect<void, import("effect/PlatformError").PlatformError,
|
|
38
|
+
}[]) => Effect.Effect<void, import("effect/PlatformError").PlatformError, Path.Path | FileSystem.FileSystem>;
|
|
39
39
|
export declare const runDockerCommand: (args: readonly string[], options?: {
|
|
40
40
|
cwd?: string;
|
|
41
41
|
env?: Record<string, string | undefined>;
|
|
@@ -67,6 +67,6 @@ export declare const dockerLogin: (auth: RegistryAuth, options?: {
|
|
|
67
67
|
* Push an image ref. When `auth` is set, uses an isolated `DOCKER_CONFIG`
|
|
68
68
|
* directory so concurrent deploys do not race on global docker credentials.
|
|
69
69
|
*/
|
|
70
|
-
export declare const pushImage: (imageRef: string, auth?: RegistryAuth | undefined) => Effect.Effect<void, import("effect/PlatformError").PlatformError | DockerCommandError, import("effect/Scope").Scope | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner
|
|
70
|
+
export declare const pushImage: (imageRef: string, auth?: RegistryAuth | undefined) => Effect.Effect<void, import("effect/PlatformError").PlatformError | DockerCommandError, FileSystem.FileSystem | import("effect/Scope").Scope | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner>;
|
|
71
71
|
export {};
|
|
72
72
|
//# sourceMappingURL=Docker.d.ts.map
|
package/lib/Bundle/TempRoot.d.ts
CHANGED
|
@@ -9,16 +9,16 @@ import { Stage } from "../Stage.ts";
|
|
|
9
9
|
* nonce) so concurrent bundle operations for the same resource never collide.
|
|
10
10
|
* Stale directories from previous crashed runs are cleaned up best-effort.
|
|
11
11
|
*/
|
|
12
|
-
export declare const createTempBundleDir: (entry: string, dotAlchemy: string, id: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError,
|
|
12
|
+
export declare const createTempBundleDir: (entry: string, dotAlchemy: string, id: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError, Path.Path | FileSystem.FileSystem | Stage | Stack>;
|
|
13
13
|
/**
|
|
14
14
|
* Returns a deterministic bundle staging directory without clearing it first.
|
|
15
15
|
* Useful for Docker build contexts where keeping the directory stable avoids
|
|
16
16
|
* unnecessary file churn between builds.
|
|
17
17
|
*/
|
|
18
|
-
export declare const getStableContextDir: (entry: string, dotAlchemy: string, id: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError,
|
|
18
|
+
export declare const getStableContextDir: (entry: string, dotAlchemy: string, id: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError, Path.Path | FileSystem.FileSystem | Stage | Stack>;
|
|
19
19
|
/**
|
|
20
20
|
* Cleans up a bundle's private temp directory.
|
|
21
21
|
*/
|
|
22
22
|
export declare const cleanupBundleTempDir: (tempDir: string) => Effect.Effect<void, never, FileSystem.FileSystem>;
|
|
23
|
-
export declare const findCwdForBundle: (entry: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError,
|
|
23
|
+
export declare const findCwdForBundle: (entry: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError, Path.Path | FileSystem.FileSystem>;
|
|
24
24
|
//# sourceMappingURL=TempRoot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoggingCli.d.ts","sourceRoot":"","sources":["../../src/Cli/LoggingCli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,eAAO,MAAM,UAAU,gCAgBtB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
2
|
import * as Layer from "effect/Layer";
|
|
3
|
-
import { Cli } from "
|
|
4
|
-
export const
|
|
3
|
+
import { Cli } from "./Cli.js";
|
|
4
|
+
export const LoggingCli = Layer.succeed(Cli, Cli.of({
|
|
5
5
|
approvePlan: () => Effect.succeed(true),
|
|
6
6
|
displayPlan: () => Effect.void,
|
|
7
7
|
startApplySession: () => Effect.succeed({
|
|
@@ -11,4 +11,4 @@ export const TestCli = Layer.succeed(Cli, Cli.of({
|
|
|
11
11
|
: `${event.id}: ${event.message}`),
|
|
12
12
|
}),
|
|
13
13
|
}));
|
|
14
|
-
//# sourceMappingURL=
|
|
14
|
+
//# sourceMappingURL=LoggingCli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoggingCli.js","sourceRoot":"","sources":["../../src/Cli/LoggingCli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CACrC,GAAG,EACH,GAAG,CAAC,EAAE,CAAC;IACL,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IACvC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;IAC9B,iBAAiB,EAAE,GAAG,EAAE,CACtB,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;QACvB,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CACd,MAAM,CAAC,GAAG,CACR,KAAK,CAAC,IAAI,KAAK,eAAe;YAC5B,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,GAAG;YAC9C,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE,CACpC;KACJ,CAAC;CACL,CAAC,CACH,CAAC"}
|
package/lib/Cli/index.d.ts
CHANGED
package/lib/Cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Cli/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Cli/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
|
package/lib/Cli/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export * from "./Cli.js";
|
|
2
|
-
|
|
2
|
+
// Note: do NOT re-export InkCLI here. The Ink-based renderer pulls in
|
|
3
|
+
// `react`/`ink`, which we do not want consumers of `alchemy/Cli` to
|
|
4
|
+
// transitively depend on. Import `alchemy/Cli/InkCLI` directly when needed
|
|
5
|
+
// (currently only from `bin/alchemy.ts`, which is bundled).
|
|
3
6
|
//# sourceMappingURL=index.js.map
|
package/lib/Cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Cli/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Cli/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,4DAA4D"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as Redacted from "effect/Redacted";
|
|
2
|
+
import * as Provider from "../../Provider.ts";
|
|
3
|
+
import { Resource } from "../../Resource.ts";
|
|
4
|
+
import { CloudflareEnvironment } from "../CloudflareEnvironment.ts";
|
|
5
|
+
import type { Providers } from "../Providers.ts";
|
|
6
|
+
import { type BaseApiTokenProps } from "./Common.ts";
|
|
7
|
+
export type AccountApiTokenProps = BaseApiTokenProps;
|
|
8
|
+
export type AccountApiToken = Resource<"Cloudflare.AccountApiToken", AccountApiTokenProps, {
|
|
9
|
+
tokenId: string;
|
|
10
|
+
name: string;
|
|
11
|
+
status: "active" | "disabled" | "expired";
|
|
12
|
+
/**
|
|
13
|
+
* The plaintext token value. Cloudflare returns this only once, on
|
|
14
|
+
* creation, so we persist it here for downstream consumers (e.g. a
|
|
15
|
+
* GitHub Actions secret).
|
|
16
|
+
*/
|
|
17
|
+
value: Redacted.Redacted<string>;
|
|
18
|
+
accountId: string;
|
|
19
|
+
}, never, Providers>;
|
|
20
|
+
/**
|
|
21
|
+
* A Cloudflare account-owned API token (`POST /accounts/{account_id}/tokens`).
|
|
22
|
+
*
|
|
23
|
+
* Account-owned tokens are managed at the account level and persist
|
|
24
|
+
* independently of any single user. Use these for CI tokens, third-party
|
|
25
|
+
* integrations, or anywhere the token should outlive an individual user's
|
|
26
|
+
* session.
|
|
27
|
+
*
|
|
28
|
+
* Creating account-owned tokens requires the caller to have the
|
|
29
|
+
* `API Tokens > Write` account permission.
|
|
30
|
+
*
|
|
31
|
+
* @section Creating a Token
|
|
32
|
+
* @example A token for managing Workers and KV from CI
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const token = yield* Cloudflare.AccountApiToken("ci-token", {
|
|
35
|
+
* name: "my-ci-token",
|
|
36
|
+
* policies: [
|
|
37
|
+
* {
|
|
38
|
+
* effect: "allow",
|
|
39
|
+
* permissionGroups: [
|
|
40
|
+
* "Workers Scripts Write",
|
|
41
|
+
* "Workers KV Storage Write",
|
|
42
|
+
* ],
|
|
43
|
+
* resources: { "com.cloudflare.api.account": "*" },
|
|
44
|
+
* },
|
|
45
|
+
* ],
|
|
46
|
+
* });
|
|
47
|
+
*
|
|
48
|
+
* yield* GitHub.Secret("cf-api-token", {
|
|
49
|
+
* owner: "me",
|
|
50
|
+
* repository: "my-repo",
|
|
51
|
+
* name: "CLOUDFLARE_API_TOKEN",
|
|
52
|
+
* value: token.value,
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare const AccountApiToken: import("../../Resource.ts").ResourceClass<AccountApiToken>;
|
|
57
|
+
export declare const AccountApiTokenProvider: () => import("effect/Layer").Layer<Provider.Provider<AccountApiToken>, never, import("effect/unstable/http/HttpClient").HttpClient | import("../../Stage.ts").Stage | import("../../Stack.ts").Stack | import("@distilled.cloud/cloudflare").Credentials | CloudflareEnvironment>;
|
|
58
|
+
//# sourceMappingURL=AccountApiToken.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountApiToken.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/AccountApiToken.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAG5C,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAErD,MAAM,MAAM,eAAe,GAAG,QAAQ,CACpC,4BAA4B,EAC5B,oBAAoB,EACpB;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C;;;;OAIG;IACH,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB,EACD,KAAK,EACL,SAAS,CACV,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,eAAe,4DAE3B,CAAC;AASF,eAAO,MAAM,uBAAuB,mRA+GjC,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import * as accounts from "@distilled.cloud/cloudflare/accounts";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Redacted from "effect/Redacted";
|
|
4
|
+
import { isResolved } from "../../Diff.js";
|
|
5
|
+
import { createPhysicalName } from "../../PhysicalName.js";
|
|
6
|
+
import * as Provider from "../../Provider.js";
|
|
7
|
+
import { Resource } from "../../Resource.js";
|
|
8
|
+
import { CloudflareEnvironment } from "../CloudflareEnvironment.js";
|
|
9
|
+
import { buildConditionPayload, conditionFingerprint, policyFingerprint, resolvePolicies, } from "./Common.js";
|
|
10
|
+
/**
|
|
11
|
+
* A Cloudflare account-owned API token (`POST /accounts/{account_id}/tokens`).
|
|
12
|
+
*
|
|
13
|
+
* Account-owned tokens are managed at the account level and persist
|
|
14
|
+
* independently of any single user. Use these for CI tokens, third-party
|
|
15
|
+
* integrations, or anywhere the token should outlive an individual user's
|
|
16
|
+
* session.
|
|
17
|
+
*
|
|
18
|
+
* Creating account-owned tokens requires the caller to have the
|
|
19
|
+
* `API Tokens > Write` account permission.
|
|
20
|
+
*
|
|
21
|
+
* @section Creating a Token
|
|
22
|
+
* @example A token for managing Workers and KV from CI
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const token = yield* Cloudflare.AccountApiToken("ci-token", {
|
|
25
|
+
* name: "my-ci-token",
|
|
26
|
+
* policies: [
|
|
27
|
+
* {
|
|
28
|
+
* effect: "allow",
|
|
29
|
+
* permissionGroups: [
|
|
30
|
+
* "Workers Scripts Write",
|
|
31
|
+
* "Workers KV Storage Write",
|
|
32
|
+
* ],
|
|
33
|
+
* resources: { "com.cloudflare.api.account": "*" },
|
|
34
|
+
* },
|
|
35
|
+
* ],
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* yield* GitHub.Secret("cf-api-token", {
|
|
39
|
+
* owner: "me",
|
|
40
|
+
* repository: "my-repo",
|
|
41
|
+
* name: "CLOUDFLARE_API_TOKEN",
|
|
42
|
+
* value: token.value,
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export const AccountApiToken = Resource("Cloudflare.AccountApiToken");
|
|
47
|
+
const resolveName = (id, name) => Effect.gen(function* () {
|
|
48
|
+
return name ?? (yield* createPhysicalName({ id }));
|
|
49
|
+
});
|
|
50
|
+
export const AccountApiTokenProvider = () => Provider.effect(AccountApiToken, Effect.gen(function* () {
|
|
51
|
+
const { accountId } = yield* CloudflareEnvironment;
|
|
52
|
+
const createToken = yield* accounts.createToken;
|
|
53
|
+
const updateToken = yield* accounts.updateToken;
|
|
54
|
+
const deleteToken = yield* accounts.deleteToken;
|
|
55
|
+
const getToken = yield* accounts.getToken;
|
|
56
|
+
const buildAttributes = (tokenData, value) => ({
|
|
57
|
+
tokenId: tokenData.id ?? "",
|
|
58
|
+
name: tokenData.name ?? "",
|
|
59
|
+
status: tokenData.status ?? "active",
|
|
60
|
+
value,
|
|
61
|
+
accountId,
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
stables: ["tokenId", "accountId"],
|
|
65
|
+
diff: Effect.fn(function* ({ id, olds, news, output }) {
|
|
66
|
+
if (!isResolved(news))
|
|
67
|
+
return undefined;
|
|
68
|
+
if ((output?.accountId ?? accountId) !== accountId) {
|
|
69
|
+
return { action: "replace" };
|
|
70
|
+
}
|
|
71
|
+
const oldName = output?.name ?? (yield* resolveName(id, olds?.name));
|
|
72
|
+
const newName = yield* resolveName(id, news.name);
|
|
73
|
+
const oldPolicyFp = policyFingerprint(resolvePolicies(olds?.policies ?? [], accountId));
|
|
74
|
+
const newPolicyFp = policyFingerprint(resolvePolicies(news.policies, accountId));
|
|
75
|
+
const oldCondFp = conditionFingerprint(olds?.condition);
|
|
76
|
+
const newCondFp = conditionFingerprint(news.condition);
|
|
77
|
+
if (oldName !== newName ||
|
|
78
|
+
oldPolicyFp !== newPolicyFp ||
|
|
79
|
+
oldCondFp !== newCondFp ||
|
|
80
|
+
(olds?.expiresOn ?? undefined) !== (news.expiresOn ?? undefined) ||
|
|
81
|
+
(olds?.notBefore ?? undefined) !== (news.notBefore ?? undefined)) {
|
|
82
|
+
return { action: "update" };
|
|
83
|
+
}
|
|
84
|
+
}),
|
|
85
|
+
create: Effect.fn(function* ({ id, news }) {
|
|
86
|
+
const name = yield* resolveName(id, news.name);
|
|
87
|
+
const policies = resolvePolicies(news.policies, accountId);
|
|
88
|
+
const result = yield* createToken({
|
|
89
|
+
accountId,
|
|
90
|
+
name,
|
|
91
|
+
policies,
|
|
92
|
+
condition: buildConditionPayload(news.condition),
|
|
93
|
+
expiresOn: news.expiresOn,
|
|
94
|
+
notBefore: news.notBefore,
|
|
95
|
+
});
|
|
96
|
+
if (!result.value) {
|
|
97
|
+
return yield* Effect.die(`Cloudflare did not return a value for token "${name}".`);
|
|
98
|
+
}
|
|
99
|
+
return buildAttributes(result, Redacted.make(result.value));
|
|
100
|
+
}),
|
|
101
|
+
update: Effect.fn(function* ({ id, news, output }) {
|
|
102
|
+
const name = yield* resolveName(id, news.name);
|
|
103
|
+
const policies = resolvePolicies(news.policies, accountId);
|
|
104
|
+
const result = yield* updateToken({
|
|
105
|
+
accountId,
|
|
106
|
+
tokenId: output.tokenId,
|
|
107
|
+
name,
|
|
108
|
+
policies,
|
|
109
|
+
condition: buildConditionPayload(news.condition),
|
|
110
|
+
expiresOn: news.expiresOn,
|
|
111
|
+
notBefore: news.notBefore,
|
|
112
|
+
});
|
|
113
|
+
// Cloudflare doesn't return the value on update; preserve the
|
|
114
|
+
// value captured at creation.
|
|
115
|
+
return buildAttributes(result, output.value);
|
|
116
|
+
}),
|
|
117
|
+
delete: Effect.fn(function* ({ output }) {
|
|
118
|
+
yield* deleteToken({
|
|
119
|
+
accountId: output.accountId,
|
|
120
|
+
tokenId: output.tokenId,
|
|
121
|
+
}).pipe(
|
|
122
|
+
// Already gone — Cloudflare may report this as either an
|
|
123
|
+
// `InvalidRoute` (token-id no longer routable) or a generic
|
|
124
|
+
// `TokenNotFound`. Either is fine; we just want the resource gone.
|
|
125
|
+
Effect.catchTag("InvalidRoute", () => Effect.void), Effect.catchTag("TokenNotFound", () => Effect.void));
|
|
126
|
+
}),
|
|
127
|
+
read: Effect.fn(function* ({ output }) {
|
|
128
|
+
if (!output?.tokenId)
|
|
129
|
+
return undefined;
|
|
130
|
+
return yield* getToken({
|
|
131
|
+
accountId: output.accountId,
|
|
132
|
+
tokenId: output.tokenId,
|
|
133
|
+
}).pipe(Effect.map((token) => buildAttributes(token, output.value)), Effect.catchTag("InvalidRoute", () => Effect.succeed(undefined)), Effect.catchTag("TokenNotFound", () => Effect.succeed(undefined)));
|
|
134
|
+
}),
|
|
135
|
+
};
|
|
136
|
+
}));
|
|
137
|
+
//# sourceMappingURL=AccountApiToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccountApiToken.js","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/AccountApiToken.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { type PermissionGroupName } from "./PermissionGroups.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Resource keys recognized by Cloudflare API token policies.
|
|
4
|
+
*
|
|
5
|
+
* The literal `"com.cloudflare.api.account"` is rewritten by the account-scoped
|
|
6
|
+
* provider to `"com.cloudflare.api.account.${accountId}"` so callers don't have
|
|
7
|
+
* to splice the account ID themselves.
|
|
8
|
+
*
|
|
9
|
+
* @see https://developers.cloudflare.com/fundamentals/api/reference/permissions/
|
|
10
|
+
*/
|
|
11
|
+
export type ApiTokenResourceKey = "com.cloudflare.api.account" | `com.cloudflare.api.account.${string}` | `com.cloudflare.api.account.zone.${string}` | `com.cloudflare.edge.r2.bucket.${string}` | (string & {});
|
|
12
|
+
/**
|
|
13
|
+
* A permission group reference: either a typed Cloudflare permission-group
|
|
14
|
+
* name (resolved against the static catalog) or an explicit `{ id }` for
|
|
15
|
+
* names that aren't in the catalog or have multiple scopes.
|
|
16
|
+
*/
|
|
17
|
+
export type ApiTokenPermissionGroupRef = PermissionGroupName | {
|
|
18
|
+
id: string;
|
|
19
|
+
meta?: {
|
|
20
|
+
key?: string;
|
|
21
|
+
value?: string;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export interface ApiTokenPolicy {
|
|
25
|
+
effect: "allow" | "deny";
|
|
26
|
+
permissionGroups: ApiTokenPermissionGroupRef[];
|
|
27
|
+
resources: {
|
|
28
|
+
[K in ApiTokenResourceKey]?: string;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface ApiTokenCondition {
|
|
32
|
+
requestIp?: {
|
|
33
|
+
in?: string[];
|
|
34
|
+
notIn?: string[];
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export type BaseApiTokenProps = {
|
|
38
|
+
/**
|
|
39
|
+
* Token name. Defaults to a generated physical name based on the
|
|
40
|
+
* resource's logical id, app name, and stage.
|
|
41
|
+
*/
|
|
42
|
+
name?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Access policies attached to the token. At least one policy is required
|
|
45
|
+
* by Cloudflare.
|
|
46
|
+
*/
|
|
47
|
+
policies: ApiTokenPolicy[];
|
|
48
|
+
/** ISO 8601 expiration timestamp. */
|
|
49
|
+
expiresOn?: string;
|
|
50
|
+
/** ISO 8601 "not before" timestamp. */
|
|
51
|
+
notBefore?: string;
|
|
52
|
+
/** Optional usage conditions (e.g. IP allowlist). */
|
|
53
|
+
condition?: ApiTokenCondition;
|
|
54
|
+
};
|
|
55
|
+
export type ResolvedPolicy = {
|
|
56
|
+
effect: "allow" | "deny";
|
|
57
|
+
permissionGroups: {
|
|
58
|
+
id: string;
|
|
59
|
+
meta?: {
|
|
60
|
+
key?: string;
|
|
61
|
+
value?: string;
|
|
62
|
+
};
|
|
63
|
+
}[];
|
|
64
|
+
resources: Record<string, unknown>;
|
|
65
|
+
};
|
|
66
|
+
export declare const resolvePermissionGroup: (ref: ApiTokenPermissionGroupRef) => {
|
|
67
|
+
id: string;
|
|
68
|
+
meta?: undefined;
|
|
69
|
+
} | {
|
|
70
|
+
id: string;
|
|
71
|
+
meta: {
|
|
72
|
+
key?: string;
|
|
73
|
+
value?: string;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Rewrite the bare `"com.cloudflare.api.account"` key to the
|
|
78
|
+
* account-scoped form. Pass `accountId: undefined` to leave keys unchanged
|
|
79
|
+
* (e.g. for user-owned tokens whose policies don't carry an account scope).
|
|
80
|
+
*/
|
|
81
|
+
export declare const resolveResources: (resources: ApiTokenPolicy["resources"], accountId: string | undefined) => Record<string, string>;
|
|
82
|
+
export declare const resolvePolicies: (policies: ApiTokenPolicy[], accountId: string | undefined) => ResolvedPolicy[];
|
|
83
|
+
export declare const policyFingerprint: (policies: ResolvedPolicy[]) => string;
|
|
84
|
+
export declare const conditionFingerprint: (condition: ApiTokenCondition | undefined) => string;
|
|
85
|
+
export declare const buildConditionPayload: (condition: ApiTokenCondition | undefined) => {
|
|
86
|
+
requestIp: {
|
|
87
|
+
in: string[] | undefined;
|
|
88
|
+
notIn: string[] | undefined;
|
|
89
|
+
} | undefined;
|
|
90
|
+
} | undefined;
|
|
91
|
+
//# sourceMappingURL=Common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Common.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/Common.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAC3B,4BAA4B,GAC5B,8BAA8B,MAAM,EAAE,GACtC,mCAAmC,MAAM,EAAE,GAC3C,iCAAiC,MAAM,EAAE,GACzC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAClC,mBAAmB,GACnB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,gBAAgB,EAAE,0BAA0B,EAAE,CAAC;IAC/C,SAAS,EAAE;SAAG,CAAC,IAAI,mBAAmB,CAAC,CAAC,EAAE,MAAM;KAAE,CAAC;CACpD;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE;QACV,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CACH;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,gBAAgB,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE,CAAC;IAC5E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,KAAK,0BAA0B;;;;;;cAxCrC,MAAM;gBAAU,MAAM;;CAqDtD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,WAAW,cAAc,CAAC,WAAW,CAAC,EACtC,WAAW,MAAM,GAAG,SAAS,KAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,CAWvB,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAU,cAAc,EAAE,EAC1B,WAAW,MAAM,GAAG,SAAS,KAC5B,cAAc,EAKZ,CAAC;AAEN,eAAO,MAAM,iBAAiB,GAAI,UAAU,cAAc,EAAE,KAAG,MAW5D,CAAC;AAEJ,eAAO,MAAM,oBAAoB,GAC/B,WAAW,iBAAiB,GAAG,SAAS,KACvC,MAIC,CAAC;AAEL,eAAO,MAAM,qBAAqB,GAChC,WAAW,iBAAiB,GAAG,SAAS;;;;;aAW3B,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { PERMISSION_GROUPS_BY_NAME, } from "./PermissionGroups.js";
|
|
2
|
+
export const resolvePermissionGroup = (ref) => {
|
|
3
|
+
if (typeof ref === "string") {
|
|
4
|
+
const group = PERMISSION_GROUPS_BY_NAME[ref];
|
|
5
|
+
if (!group) {
|
|
6
|
+
// Should be unreachable due to the typed union, but guard anyway in
|
|
7
|
+
// case Cloudflare retires a name we still have in the catalog.
|
|
8
|
+
throw new Error(`Unknown Cloudflare permission group: "${ref}". Pass an explicit { id } instead.`);
|
|
9
|
+
}
|
|
10
|
+
return { id: group.id };
|
|
11
|
+
}
|
|
12
|
+
return ref.meta ? { id: ref.id, meta: ref.meta } : { id: ref.id };
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Rewrite the bare `"com.cloudflare.api.account"` key to the
|
|
16
|
+
* account-scoped form. Pass `accountId: undefined` to leave keys unchanged
|
|
17
|
+
* (e.g. for user-owned tokens whose policies don't carry an account scope).
|
|
18
|
+
*/
|
|
19
|
+
export const resolveResources = (resources, accountId) => {
|
|
20
|
+
const out = {};
|
|
21
|
+
for (const [key, value] of Object.entries(resources)) {
|
|
22
|
+
if (value === undefined)
|
|
23
|
+
continue;
|
|
24
|
+
if (key === "com.cloudflare.api.account" && accountId) {
|
|
25
|
+
out[`com.cloudflare.api.account.${accountId}`] = value;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
out[key] = value;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return out;
|
|
32
|
+
};
|
|
33
|
+
export const resolvePolicies = (policies, accountId) => policies.map((policy) => ({
|
|
34
|
+
effect: policy.effect,
|
|
35
|
+
permissionGroups: policy.permissionGroups.map(resolvePermissionGroup),
|
|
36
|
+
resources: resolveResources(policy.resources, accountId),
|
|
37
|
+
}));
|
|
38
|
+
export const policyFingerprint = (policies) => JSON.stringify(policies.map((p) => ({
|
|
39
|
+
effect: p.effect,
|
|
40
|
+
permissionGroups: [...p.permissionGroups]
|
|
41
|
+
.map((g) => ({ id: g.id, meta: g.meta ?? null }))
|
|
42
|
+
.sort((a, b) => a.id.localeCompare(b.id)),
|
|
43
|
+
resources: Object.keys(p.resources)
|
|
44
|
+
.sort()
|
|
45
|
+
.map((k) => [k, p.resources[k]]),
|
|
46
|
+
})));
|
|
47
|
+
export const conditionFingerprint = (condition) => JSON.stringify({
|
|
48
|
+
in: [...(condition?.requestIp?.in ?? [])].sort(),
|
|
49
|
+
notIn: [...(condition?.requestIp?.notIn ?? [])].sort(),
|
|
50
|
+
});
|
|
51
|
+
export const buildConditionPayload = (condition) => condition
|
|
52
|
+
? {
|
|
53
|
+
requestIp: condition.requestIp
|
|
54
|
+
? {
|
|
55
|
+
in: condition.requestIp.in,
|
|
56
|
+
notIn: condition.requestIp.notIn,
|
|
57
|
+
}
|
|
58
|
+
: undefined,
|
|
59
|
+
}
|
|
60
|
+
: undefined;
|
|
61
|
+
//# sourceMappingURL=Common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Common.js","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/Common.ts"],"names":[],"mappings":"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"}
|