alchemy 2.0.0-beta.15 → 2.0.0-beta.17
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 +1661 -710
- package/bin/alchemy.js.map +1 -1
- package/bin/alchemy.ts +2 -0
- package/bin/cli.js +9 -7
- package/bin/commands/deploy.ts +11 -2
- package/bin/commands/login.ts +6 -3
- package/bin/commands/profile.ts +106 -0
- package/bin/commands/state.ts +91 -1
- package/lib/Auth/Credentials.d.ts +6 -0
- package/lib/Auth/Credentials.d.ts.map +1 -1
- package/lib/Auth/Credentials.js +12 -1
- package/lib/Auth/Credentials.js.map +1 -1
- package/lib/Auth/Profile.d.ts +5 -0
- package/lib/Auth/Profile.d.ts.map +1 -1
- package/lib/Auth/Profile.js +11 -0
- package/lib/Auth/Profile.js.map +1 -1
- package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts +4 -4
- package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts.map +1 -1
- package/lib/Cloudflare/ApiToken/AccountApiToken.js +16 -11
- package/lib/Cloudflare/ApiToken/AccountApiToken.js.map +1 -1
- package/lib/Cloudflare/ApiToken/Common.d.ts +11 -12
- package/lib/Cloudflare/ApiToken/Common.d.ts.map +1 -1
- package/lib/Cloudflare/ApiToken/Common.js +4 -14
- package/lib/Cloudflare/ApiToken/Common.js.map +1 -1
- package/lib/Cloudflare/ApiToken/UserApiToken.d.ts +2 -3
- package/lib/Cloudflare/ApiToken/UserApiToken.d.ts.map +1 -1
- package/lib/Cloudflare/ApiToken/UserApiToken.js +4 -4
- package/lib/Cloudflare/ApiToken/UserApiToken.js.map +1 -1
- package/lib/Cloudflare/Artifacts/Artifacts.d.ts +101 -0
- package/lib/Cloudflare/Artifacts/Artifacts.d.ts.map +1 -0
- package/lib/Cloudflare/Artifacts/Artifacts.js +92 -0
- package/lib/Cloudflare/Artifacts/Artifacts.js.map +1 -0
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.d.ts +83 -0
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.d.ts.map +1 -0
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.js +65 -0
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.js.map +1 -0
- package/lib/Cloudflare/Artifacts/index.d.ts +3 -0
- package/lib/Cloudflare/Artifacts/index.d.ts.map +1 -0
- package/lib/Cloudflare/Artifacts/index.js +3 -0
- package/lib/Cloudflare/Artifacts/index.js.map +1 -0
- package/lib/Cloudflare/Container/ContainerBinding.d.ts +1 -1
- package/lib/Cloudflare/Providers.d.ts.map +1 -1
- package/lib/Cloudflare/Providers.js +3 -1
- package/lib/Cloudflare/Providers.js.map +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/InferEnv.js +0 -1
- package/lib/Cloudflare/Workers/InferEnv.js.map +1 -1
- package/lib/Cloudflare/Workers/Worker.d.ts +2 -1
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +25 -18
- package/lib/Cloudflare/Workers/Worker.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/GitHub/AuthProvider.d.ts +37 -0
- package/lib/GitHub/AuthProvider.d.ts.map +1 -0
- package/lib/GitHub/AuthProvider.js +154 -0
- package/lib/GitHub/AuthProvider.js.map +1 -0
- package/lib/GitHub/Comment.d.ts +2 -1
- package/lib/GitHub/Comment.d.ts.map +1 -1
- package/lib/GitHub/Comment.js +1 -0
- package/lib/GitHub/Comment.js.map +1 -1
- package/lib/GitHub/Credentials.d.ts +29 -0
- package/lib/GitHub/Credentials.d.ts.map +1 -0
- package/lib/GitHub/Credentials.js +54 -0
- package/lib/GitHub/Credentials.js.map +1 -0
- package/lib/GitHub/Providers.d.ts +12 -1
- package/lib/GitHub/Providers.d.ts.map +1 -1
- package/lib/GitHub/Providers.js +14 -3
- package/lib/GitHub/Providers.js.map +1 -1
- package/lib/GitHub/Secret.d.ts +8 -10
- package/lib/GitHub/Secret.d.ts.map +1 -1
- package/lib/GitHub/Secret.js +16 -14
- package/lib/GitHub/Secret.js.map +1 -1
- package/lib/GitHub/Variable.d.ts +8 -10
- package/lib/GitHub/Variable.d.ts.map +1 -1
- package/lib/GitHub/Variable.js +12 -13
- package/lib/GitHub/Variable.js.map +1 -1
- package/lib/GitHub/index.d.ts +2 -0
- package/lib/GitHub/index.d.ts.map +1 -1
- package/lib/GitHub/index.js +2 -0
- package/lib/GitHub/index.js.map +1 -1
- package/package.json +4 -4
- package/src/Auth/Credentials.ts +17 -1
- package/src/Auth/Profile.ts +15 -0
- package/src/Cloudflare/ApiToken/AccountApiToken.ts +25 -14
- package/src/Cloudflare/ApiToken/Common.ts +12 -19
- package/src/Cloudflare/ApiToken/UserApiToken.ts +6 -8
- package/src/Cloudflare/Artifacts/Artifacts.ts +139 -0
- package/src/Cloudflare/Artifacts/ArtifactsBinding.ts +188 -0
- package/src/Cloudflare/Artifacts/index.ts +2 -0
- package/src/Cloudflare/Providers.ts +3 -0
- package/src/Cloudflare/Workers/InferEnv.ts +5 -4
- package/src/Cloudflare/Workers/Worker.ts +12 -1
- package/src/Cloudflare/index.ts +1 -0
- package/src/GitHub/AuthProvider.ts +309 -0
- package/src/GitHub/Comment.ts +4 -1
- package/src/GitHub/Credentials.ts +99 -0
- package/src/GitHub/Providers.ts +29 -3
- package/src/GitHub/Secret.ts +22 -24
- package/src/GitHub/Variable.ts +16 -23
- package/src/GitHub/index.ts +2 -0
|
@@ -2,13 +2,13 @@ import { type PermissionGroupName } from "./PermissionGroups.ts";
|
|
|
2
2
|
/**
|
|
3
3
|
* Resource keys recognized by Cloudflare API token policies.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Cloudflare requires the account ID to be embedded directly in the resource
|
|
6
|
+
* key (e.g. `com.cloudflare.api.account.<accountId>`); pass the fully-qualified
|
|
7
|
+
* key — no rewriting is performed.
|
|
8
8
|
*
|
|
9
9
|
* @see https://developers.cloudflare.com/fundamentals/api/reference/permissions/
|
|
10
10
|
*/
|
|
11
|
-
export type ApiTokenResourceKey =
|
|
11
|
+
export type ApiTokenResourceKey = `com.cloudflare.api.account.${string}` | `com.cloudflare.api.account.zone.${string}` | `com.cloudflare.edge.r2.bucket.${string}` | (string & {});
|
|
12
12
|
/**
|
|
13
13
|
* A permission group reference: either a typed Cloudflare permission-group
|
|
14
14
|
* name (resolved against the static catalog) or an explicit `{ id }` for
|
|
@@ -34,12 +34,17 @@ export interface ApiTokenCondition {
|
|
|
34
34
|
notIn?: string[];
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
|
-
export type
|
|
37
|
+
export type ApiTokenProps = {
|
|
38
38
|
/**
|
|
39
39
|
* Token name. Defaults to a generated physical name based on the
|
|
40
40
|
* resource's logical id, app name, and stage.
|
|
41
41
|
*/
|
|
42
42
|
name?: string;
|
|
43
|
+
/**
|
|
44
|
+
* The Cloudflare account ID that owns this token. Defaults to the
|
|
45
|
+
* account ID resolved from the ambient {@link CloudflareEnvironment}.
|
|
46
|
+
*/
|
|
47
|
+
accountId?: string;
|
|
43
48
|
/**
|
|
44
49
|
* Access policies attached to the token. At least one policy is required
|
|
45
50
|
* by Cloudflare.
|
|
@@ -73,13 +78,7 @@ export declare const resolvePermissionGroup: (ref: ApiTokenPermissionGroupRef) =
|
|
|
73
78
|
value?: string;
|
|
74
79
|
};
|
|
75
80
|
};
|
|
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[];
|
|
81
|
+
export declare const resolvePolicies: (policies: ApiTokenPolicy[]) => ResolvedPolicy[];
|
|
83
82
|
export declare const policyFingerprint: (policies: ResolvedPolicy[]) => string;
|
|
84
83
|
export declare const conditionFingerprint: (condition: ApiTokenCondition | undefined) => string;
|
|
85
84
|
export declare const buildConditionPayload: (condition: ApiTokenCondition | undefined) => {
|
|
@@ -1 +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,
|
|
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,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,aAAa,GAAG;IAC1B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;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;;;;;;cA7CrC,MAAM;gBAAU,MAAM;;CA0DtD,CAAC;AAaF,eAAO,MAAM,eAAe,GAC1B,UAAU,cAAc,EAAE,KACzB,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"}
|
|
@@ -11,29 +11,19 @@ export const resolvePermissionGroup = (ref) => {
|
|
|
11
11
|
}
|
|
12
12
|
return ref.meta ? { id: ref.id, meta: ref.meta } : { id: ref.id };
|
|
13
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) => {
|
|
14
|
+
const resolveResources = (resources) => {
|
|
20
15
|
const out = {};
|
|
21
16
|
for (const [key, value] of Object.entries(resources)) {
|
|
22
17
|
if (value === undefined)
|
|
23
18
|
continue;
|
|
24
|
-
|
|
25
|
-
out[`com.cloudflare.api.account.${accountId}`] = value;
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
out[key] = value;
|
|
29
|
-
}
|
|
19
|
+
out[key] = value;
|
|
30
20
|
}
|
|
31
21
|
return out;
|
|
32
22
|
};
|
|
33
|
-
export const resolvePolicies = (policies
|
|
23
|
+
export const resolvePolicies = (policies) => policies.map((policy) => ({
|
|
34
24
|
effect: policy.effect,
|
|
35
25
|
permissionGroups: policy.permissionGroups.map(resolvePermissionGroup),
|
|
36
|
-
resources: resolveResources(policy.resources
|
|
26
|
+
resources: resolveResources(policy.resources),
|
|
37
27
|
}));
|
|
38
28
|
export const policyFingerprint = (policies) => JSON.stringify(policies.map((p) => ({
|
|
39
29
|
effect: p.effect,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Common.js","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/Common.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,GAE1B,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"Common.js","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/Common.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,8 @@ import * as Redacted from "effect/Redacted";
|
|
|
2
2
|
import * as Provider from "../../Provider.ts";
|
|
3
3
|
import { Resource } from "../../Resource.ts";
|
|
4
4
|
import type { Providers } from "../Providers.ts";
|
|
5
|
-
import { type
|
|
6
|
-
export type
|
|
7
|
-
export type UserApiToken = Resource<"Cloudflare.UserApiToken", UserApiTokenProps, {
|
|
5
|
+
import { type ApiTokenProps } from "./Common.ts";
|
|
6
|
+
export type UserApiToken = Resource<"Cloudflare.UserApiToken", ApiTokenProps, {
|
|
8
7
|
tokenId: string;
|
|
9
8
|
name: string;
|
|
10
9
|
status: "active" | "disabled" | "expired";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserApiToken.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/UserApiToken.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,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAKL,KAAK,
|
|
1
|
+
{"version":3,"file":"UserApiToken.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/UserApiToken.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,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,YAAY,GAAG,QAAQ,CACjC,yBAAyB,EACzB,aAAa,EACb;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C;;;OAGG;IACH,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAClC,EACD,KAAK,EACL,SAAS,CACV,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,YAAY,yDAAoD,CAAC;AAS9E,eAAO,MAAM,oBAAoB,wPA6F9B,CAAC"}
|
|
@@ -58,8 +58,8 @@ export const UserApiTokenProvider = () => Provider.effect(UserApiToken, Effect.g
|
|
|
58
58
|
return undefined;
|
|
59
59
|
const oldName = output?.name ?? (yield* resolveName(id, olds?.name));
|
|
60
60
|
const newName = yield* resolveName(id, news.name);
|
|
61
|
-
const oldPolicyFp = policyFingerprint(resolvePolicies(olds?.policies ?? []
|
|
62
|
-
const newPolicyFp = policyFingerprint(resolvePolicies(news.policies
|
|
61
|
+
const oldPolicyFp = policyFingerprint(resolvePolicies(olds?.policies ?? []));
|
|
62
|
+
const newPolicyFp = policyFingerprint(resolvePolicies(news.policies));
|
|
63
63
|
const oldCondFp = conditionFingerprint(olds?.condition);
|
|
64
64
|
const newCondFp = conditionFingerprint(news.condition);
|
|
65
65
|
if (oldName !== newName ||
|
|
@@ -72,7 +72,7 @@ export const UserApiTokenProvider = () => Provider.effect(UserApiToken, Effect.g
|
|
|
72
72
|
}),
|
|
73
73
|
create: Effect.fn(function* ({ id, news }) {
|
|
74
74
|
const name = yield* resolveName(id, news.name);
|
|
75
|
-
const policies = resolvePolicies(news.policies
|
|
75
|
+
const policies = resolvePolicies(news.policies);
|
|
76
76
|
const result = yield* createToken({
|
|
77
77
|
name,
|
|
78
78
|
policies,
|
|
@@ -87,7 +87,7 @@ export const UserApiTokenProvider = () => Provider.effect(UserApiToken, Effect.g
|
|
|
87
87
|
}),
|
|
88
88
|
update: Effect.fn(function* ({ id, news, output }) {
|
|
89
89
|
const name = yield* resolveName(id, news.name);
|
|
90
|
-
const policies = resolvePolicies(news.policies
|
|
90
|
+
const policies = resolvePolicies(news.policies);
|
|
91
91
|
const result = yield* updateToken({
|
|
92
92
|
tokenId: output.tokenId,
|
|
93
93
|
name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserApiToken.js","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/UserApiToken.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,kCAAkC,CAAC;AACzD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAEhB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"UserApiToken.js","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/UserApiToken.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { Stack } from "../../Stack.ts";
|
|
3
|
+
import { Stage } from "../../Stage.ts";
|
|
4
|
+
import { ArtifactsBinding } from "./ArtifactsBinding.ts";
|
|
5
|
+
type ArtifactsTypeId = typeof ArtifactsTypeId;
|
|
6
|
+
declare const ArtifactsTypeId: "Cloudflare.Artifacts";
|
|
7
|
+
export declare class InvalidArtifactsNamespaceError extends Error {
|
|
8
|
+
readonly namespace: string;
|
|
9
|
+
readonly _tag: "InvalidArtifactsNamespaceError";
|
|
10
|
+
constructor(namespace: string);
|
|
11
|
+
}
|
|
12
|
+
export type ArtifactsProps = {
|
|
13
|
+
/**
|
|
14
|
+
* Cloudflare namespace name. Namespaces are implicit on Cloudflare — the
|
|
15
|
+
* first repo created against this name conjures the namespace.
|
|
16
|
+
*
|
|
17
|
+
* Must be 3–63 lowercase alphanumeric characters or hyphens, and must start
|
|
18
|
+
* and end with a lowercase alphanumeric character. If omitted, a unique
|
|
19
|
+
* physical name is generated from the resource's logical id, app, and stage.
|
|
20
|
+
*/
|
|
21
|
+
namespace?: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Marker for a Cloudflare Artifacts namespace binding.
|
|
25
|
+
*
|
|
26
|
+
* Artifacts namespaces are implicit (created on first repo write) and require
|
|
27
|
+
* no deploy-time provisioning, so this is a pure binding marker rather than
|
|
28
|
+
* a full Resource. The Worker provider sees this object in `bindings: { ... }`
|
|
29
|
+
* and emits the corresponding `{ type: "artifacts", name, namespace }` binding
|
|
30
|
+
* to the script.
|
|
31
|
+
*/
|
|
32
|
+
export type Artifacts = {
|
|
33
|
+
kind: ArtifactsTypeId;
|
|
34
|
+
name: string;
|
|
35
|
+
namespace: string;
|
|
36
|
+
};
|
|
37
|
+
export declare const isArtifacts: (value: unknown) => value is Artifacts;
|
|
38
|
+
/**
|
|
39
|
+
* A Cloudflare Artifacts namespace — the top-level container for Git-compatible
|
|
40
|
+
* versioned repositories. See the
|
|
41
|
+
* {@link https://blog.cloudflare.com/artifacts-git-for-agents-beta/ | Artifacts launch post}
|
|
42
|
+
* and {@link https://developers.cloudflare.com/artifacts/concepts/namespaces/ | Namespaces docs}.
|
|
43
|
+
*
|
|
44
|
+
* Namespaces on Cloudflare are **implicit**: there is no `POST /namespaces`
|
|
45
|
+
* endpoint. The namespace is conjured the first time a repo is created against
|
|
46
|
+
* it (either via the REST API or the Worker binding). Because of that, the
|
|
47
|
+
* Alchemy "resource" is a thin binding marker — there is nothing to provision
|
|
48
|
+
* at deploy time. Repos themselves are typically created at runtime through
|
|
49
|
+
* the bound `Artifacts` API.
|
|
50
|
+
*
|
|
51
|
+
* @section Declaring a Namespace
|
|
52
|
+
* @example Default namespace (a unique physical name is generated)
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const Repos = Cloudflare.Artifacts("Repos");
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* @example Override the namespace name (must be lowercase, 3–63 chars)
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const Repos = Cloudflare.Artifacts("Repos", { namespace: "starter-repos" });
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @section Binding to a Worker
|
|
63
|
+
* @example Wiring it into a Worker
|
|
64
|
+
* ```typescript
|
|
65
|
+
* export const Worker = Cloudflare.Worker("Worker", {
|
|
66
|
+
* main: "./src/worker.ts",
|
|
67
|
+
* bindings: { Repos },
|
|
68
|
+
* });
|
|
69
|
+
*
|
|
70
|
+
* export type WorkerEnv = Cloudflare.InferEnv<typeof Worker>;
|
|
71
|
+
* // { Repos: Artifacts }
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* @example Async-style worker
|
|
75
|
+
* ```typescript
|
|
76
|
+
* export default {
|
|
77
|
+
* async fetch(request: Request, env: WorkerEnv) {
|
|
78
|
+
* const repo = await env.Repos.create("starter-repo");
|
|
79
|
+
* return Response.json({ remote: repo.remote, token: repo.token });
|
|
80
|
+
* },
|
|
81
|
+
* };
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* @example Effect-style worker
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const artifacts = yield* Cloudflare.Artifacts.bind(Repos);
|
|
87
|
+
* const repo = yield* artifacts.create("starter-repo", {
|
|
88
|
+
* setDefaultBranch: "main",
|
|
89
|
+
* });
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export declare const Artifacts: {
|
|
93
|
+
(name: string, props?: ArtifactsProps): Effect.Effect<Artifacts, never, Stack | Stage>;
|
|
94
|
+
/**
|
|
95
|
+
* Bind a Cloudflare Artifacts namespace to the surrounding Worker, returning
|
|
96
|
+
* an Effect-native client. See {@link ArtifactsBinding}.
|
|
97
|
+
*/
|
|
98
|
+
bind: typeof ArtifactsBinding.bind;
|
|
99
|
+
};
|
|
100
|
+
export {};
|
|
101
|
+
//# sourceMappingURL=Artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Artifacts.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Artifacts/Artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,KAAK,eAAe,GAAG,OAAO,eAAe,CAAC;AAC9C,QAAA,MAAM,eAAe,EAAG,sBAA+B,CAAC;AAQxD,qBAAa,8BAA+B,SAAQ,KAAK;aAE3B,SAAS,EAAE,MAAM;IAD7C,QAAQ,CAAC,IAAI,EAAG,gCAAgC,CAAU;gBAC9B,SAAS,EAAE,MAAM;CAK9C;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,SAIP,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,SAAS,EAAE;IACtB,CACE,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,cAAc,GACrB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC;IAClD;;;OAGG;IACH,IAAI,EAAE,OAAO,gBAAgB,CAAC,IAAI,CAAC;CAmBpC,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { Stack } from "../../Stack.js";
|
|
3
|
+
import { Stage } from "../../Stage.js";
|
|
4
|
+
import { ArtifactsBinding } from "./ArtifactsBinding.js";
|
|
5
|
+
const ArtifactsTypeId = "Cloudflare.Artifacts";
|
|
6
|
+
/**
|
|
7
|
+
* Cloudflare validation: 3–63 chars, lowercase alphanumeric and hyphens, must
|
|
8
|
+
* start and end with a lowercase alphanumeric character.
|
|
9
|
+
*/
|
|
10
|
+
const ARTIFACTS_NAMESPACE_REGEX = /^[a-z0-9](?:[a-z0-9-]{1,61}[a-z0-9])?$/;
|
|
11
|
+
export class InvalidArtifactsNamespaceError extends Error {
|
|
12
|
+
namespace;
|
|
13
|
+
_tag = "InvalidArtifactsNamespaceError";
|
|
14
|
+
constructor(namespace) {
|
|
15
|
+
super(`Invalid artifacts namespace name '${namespace}'. Must be 3-63 characters, start and end with a lowercase alphanumeric character, and contain only lowercase alphanumeric characters and hyphens.`);
|
|
16
|
+
this.namespace = namespace;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export const isArtifacts = (value) => typeof value === "object" &&
|
|
20
|
+
value !== null &&
|
|
21
|
+
"kind" in value &&
|
|
22
|
+
value.kind === ArtifactsTypeId;
|
|
23
|
+
/**
|
|
24
|
+
* A Cloudflare Artifacts namespace — the top-level container for Git-compatible
|
|
25
|
+
* versioned repositories. See the
|
|
26
|
+
* {@link https://blog.cloudflare.com/artifacts-git-for-agents-beta/ | Artifacts launch post}
|
|
27
|
+
* and {@link https://developers.cloudflare.com/artifacts/concepts/namespaces/ | Namespaces docs}.
|
|
28
|
+
*
|
|
29
|
+
* Namespaces on Cloudflare are **implicit**: there is no `POST /namespaces`
|
|
30
|
+
* endpoint. The namespace is conjured the first time a repo is created against
|
|
31
|
+
* it (either via the REST API or the Worker binding). Because of that, the
|
|
32
|
+
* Alchemy "resource" is a thin binding marker — there is nothing to provision
|
|
33
|
+
* at deploy time. Repos themselves are typically created at runtime through
|
|
34
|
+
* the bound `Artifacts` API.
|
|
35
|
+
*
|
|
36
|
+
* @section Declaring a Namespace
|
|
37
|
+
* @example Default namespace (a unique physical name is generated)
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const Repos = Cloudflare.Artifacts("Repos");
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @example Override the namespace name (must be lowercase, 3–63 chars)
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const Repos = Cloudflare.Artifacts("Repos", { namespace: "starter-repos" });
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @section Binding to a Worker
|
|
48
|
+
* @example Wiring it into a Worker
|
|
49
|
+
* ```typescript
|
|
50
|
+
* export const Worker = Cloudflare.Worker("Worker", {
|
|
51
|
+
* main: "./src/worker.ts",
|
|
52
|
+
* bindings: { Repos },
|
|
53
|
+
* });
|
|
54
|
+
*
|
|
55
|
+
* export type WorkerEnv = Cloudflare.InferEnv<typeof Worker>;
|
|
56
|
+
* // { Repos: Artifacts }
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* @example Async-style worker
|
|
60
|
+
* ```typescript
|
|
61
|
+
* export default {
|
|
62
|
+
* async fetch(request: Request, env: WorkerEnv) {
|
|
63
|
+
* const repo = await env.Repos.create("starter-repo");
|
|
64
|
+
* return Response.json({ remote: repo.remote, token: repo.token });
|
|
65
|
+
* },
|
|
66
|
+
* };
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* @example Effect-style worker
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const artifacts = yield* Cloudflare.Artifacts.bind(Repos);
|
|
72
|
+
* const repo = yield* artifacts.create("starter-repo", {
|
|
73
|
+
* setDefaultBranch: "main",
|
|
74
|
+
* });
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export const Artifacts = Object.assign(Effect.fn(function* (name, props) {
|
|
78
|
+
const namespace = props?.namespace
|
|
79
|
+
? props.namespace
|
|
80
|
+
: name.toLocaleLowerCase();
|
|
81
|
+
if (!ARTIFACTS_NAMESPACE_REGEX.test(namespace)) {
|
|
82
|
+
return yield* Effect.die(new InvalidArtifactsNamespaceError(namespace));
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
kind: ArtifactsTypeId,
|
|
86
|
+
name,
|
|
87
|
+
namespace,
|
|
88
|
+
};
|
|
89
|
+
}), {
|
|
90
|
+
bind: (...args) => ArtifactsBinding.bind(...args),
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=Artifacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Artifacts.js","sourceRoot":"","sources":["../../../src/Cloudflare/Artifacts/Artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,MAAM,eAAe,GAAG,sBAA+B,CAAC;AAExD;;;GAGG;AACH,MAAM,yBAAyB,GAAG,wCAAwC,CAAC;AAE3E,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAE3B;IADnB,IAAI,GAAG,gCAAyC,CAAC;IAC1D,YAA4B,SAAiB;QAC3C,KAAK,CACH,qCAAqC,SAAS,oJAAoJ,CACnM,CAAC;QAHwB,cAAS,GAAT,SAAS,CAAQ;IAI7C,CAAC;CACF;AA6BD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAsB,EAAE,CAChE,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACd,MAAM,IAAI,KAAK;IACd,KAAmB,CAAC,IAAI,KAAK,eAAe,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAM,CAAC,MAAM,SAAS,GAUlB,MAAM,CAAC,MAAM,CACf,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAY,EAAE,KAAsB;IACvD,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS;QAChC,CAAC,CAAC,KAAK,CAAC,SAAS;QACjB,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,8BAA8B,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,IAAI;QACJ,SAAS;KACU,CAAC;AACxB,CAAC,CAAC,EACF;IACE,IAAI,EAAE,CAAC,GAAG,IAA8C,EAAE,EAAE,CAC1D,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACjC,CACF,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Layer from "effect/Layer";
|
|
3
|
+
import * as Binding from "../../Binding.ts";
|
|
4
|
+
import { WorkerEnvironment } from "../Workers/Worker.ts";
|
|
5
|
+
import { type Artifacts as ArtifactsLike } from "./Artifacts.ts";
|
|
6
|
+
declare const ArtifactsError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
7
|
+
readonly _tag: "ArtifactsError";
|
|
8
|
+
} & Readonly<A>;
|
|
9
|
+
export declare class ArtifactsError extends ArtifactsError_base<{
|
|
10
|
+
message: string;
|
|
11
|
+
cause: Error;
|
|
12
|
+
}> {
|
|
13
|
+
}
|
|
14
|
+
export type Scope = "read" | "write";
|
|
15
|
+
export type ArtifactsCreateOptions = {
|
|
16
|
+
readOnly?: boolean;
|
|
17
|
+
description?: string;
|
|
18
|
+
setDefaultBranch?: string;
|
|
19
|
+
};
|
|
20
|
+
export type ArtifactsImportOptions = {
|
|
21
|
+
source: {
|
|
22
|
+
url: string;
|
|
23
|
+
branch?: string;
|
|
24
|
+
depth?: number;
|
|
25
|
+
};
|
|
26
|
+
target: {
|
|
27
|
+
name: string;
|
|
28
|
+
opts?: {
|
|
29
|
+
description?: string;
|
|
30
|
+
readOnly?: boolean;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export type ArtifactsListOptions = {
|
|
35
|
+
limit?: number;
|
|
36
|
+
cursor?: string;
|
|
37
|
+
};
|
|
38
|
+
export type ArtifactsForkOptions = {
|
|
39
|
+
description?: string;
|
|
40
|
+
readOnly?: boolean;
|
|
41
|
+
defaultBranchOnly?: boolean;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Effect-native handle to a single Artifacts repo. Wraps the runtime
|
|
45
|
+
* {@link ArtifactsRepo} so each method returns an Effect.
|
|
46
|
+
*/
|
|
47
|
+
export interface ArtifactsRepoClient {
|
|
48
|
+
/** Underlying Cloudflare runtime handle. */
|
|
49
|
+
raw: ArtifactsRepo;
|
|
50
|
+
createToken(scope?: Scope, ttl?: number): Effect.Effect<ArtifactsCreateTokenResult, ArtifactsError>;
|
|
51
|
+
listTokens(): Effect.Effect<ArtifactsTokenListResult, ArtifactsError>;
|
|
52
|
+
revokeToken(tokenOrId: string): Effect.Effect<boolean, ArtifactsError>;
|
|
53
|
+
fork(name: string, opts?: ArtifactsForkOptions): Effect.Effect<ArtifactsCreateRepoResult, ArtifactsError>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Effect-native client for a Cloudflare Artifacts namespace binding.
|
|
57
|
+
*
|
|
58
|
+
* Wraps the runtime {@link Artifacts} binding so each method returns an
|
|
59
|
+
* Effect tagged with {@link ArtifactsError}. Use
|
|
60
|
+
* `Cloudflare.ArtifactsBinding.bind(Repos)` inside a Worker's init phase.
|
|
61
|
+
*/
|
|
62
|
+
export interface ArtifactsClient {
|
|
63
|
+
/** Effect resolving to the raw Cloudflare runtime binding. */
|
|
64
|
+
raw: Effect.Effect<Artifacts, never, WorkerEnvironment>;
|
|
65
|
+
create(name: string, opts?: ArtifactsCreateOptions): Effect.Effect<ArtifactsCreateRepoResult, ArtifactsError, WorkerEnvironment>;
|
|
66
|
+
/** Look up an existing repo by name. Fails with `ArtifactsError` if missing. */
|
|
67
|
+
get(name: string): Effect.Effect<ArtifactsRepoClient, ArtifactsError, WorkerEnvironment>;
|
|
68
|
+
list(opts?: ArtifactsListOptions): Effect.Effect<ArtifactsRepoListResult, ArtifactsError, WorkerEnvironment>;
|
|
69
|
+
delete(name: string): Effect.Effect<boolean, ArtifactsError, WorkerEnvironment>;
|
|
70
|
+
import(opts: ArtifactsImportOptions): Effect.Effect<ArtifactsCreateRepoResult, ArtifactsError, WorkerEnvironment>;
|
|
71
|
+
}
|
|
72
|
+
declare const ArtifactsBinding_base: Binding.Service<ArtifactsBinding, "Cloudflare.Artifacts.Binding", (artifacts: ArtifactsLike) => Effect.Effect<ArtifactsClient>> & {
|
|
73
|
+
bind: (artifacts: ArtifactsLike) => Effect.Effect<any, any, any>;
|
|
74
|
+
};
|
|
75
|
+
export declare class ArtifactsBinding extends ArtifactsBinding_base {
|
|
76
|
+
}
|
|
77
|
+
export declare const ArtifactsBindingLive: Layer.Layer<ArtifactsBinding, never, import("../../ExecutionContext.ts").ExecutionContext<import("../../ExecutionContext.ts").BaseExecutionContext> | ArtifactsBindingPolicy>;
|
|
78
|
+
declare const ArtifactsBindingPolicy_base: Binding.Policy<ArtifactsBindingPolicy, "Policy<Cloudflare.Artifacts.Binding>", (artifacts: ArtifactsLike) => Effect.Effect<void>>;
|
|
79
|
+
export declare class ArtifactsBindingPolicy extends ArtifactsBindingPolicy_base {
|
|
80
|
+
}
|
|
81
|
+
export declare const ArtifactsBindingPolicyLive: Layer.Layer<ArtifactsBindingPolicy, never, never>;
|
|
82
|
+
export {};
|
|
83
|
+
//# sourceMappingURL=ArtifactsBinding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArtifactsBinding.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Artifacts/ArtifactsBinding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as Data from "effect/Data";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
import * as Binding from "../../Binding.js";
|
|
5
|
+
import { isWorker, WorkerEnvironment } from "../Workers/Worker.js";
|
|
6
|
+
import {} from "./Artifacts.js";
|
|
7
|
+
export class ArtifactsError extends Data.TaggedError("ArtifactsError") {
|
|
8
|
+
}
|
|
9
|
+
export class ArtifactsBinding extends Binding.Service()("Cloudflare.Artifacts.Binding") {
|
|
10
|
+
}
|
|
11
|
+
export const ArtifactsBindingLive = Layer.effect(ArtifactsBinding, Effect.gen(function* () {
|
|
12
|
+
const Policy = yield* ArtifactsBindingPolicy;
|
|
13
|
+
return Effect.fn(function* (artifacts) {
|
|
14
|
+
yield* Policy(artifacts);
|
|
15
|
+
const env = WorkerEnvironment.asEffect();
|
|
16
|
+
const raw = env.pipe(Effect.map((env) => env[artifacts.name]));
|
|
17
|
+
const use = (fn) => raw.pipe(Effect.flatMap((raw) => tryPromise(() => fn(raw))));
|
|
18
|
+
return {
|
|
19
|
+
raw,
|
|
20
|
+
create: (name, opts) => use((raw) => raw.create(name, opts)),
|
|
21
|
+
get: (name) => use((raw) => raw.get(name)).pipe(Effect.flatMap((repo) => repo == null
|
|
22
|
+
? Effect.fail(new ArtifactsError({
|
|
23
|
+
message: `Artifacts repo '${name}' not found`,
|
|
24
|
+
cause: new Error("not_found"),
|
|
25
|
+
}))
|
|
26
|
+
: Effect.succeed(wrapRepo(repo)))),
|
|
27
|
+
list: (opts) => use((raw) => raw.list(opts)),
|
|
28
|
+
delete: (name) => use((raw) => raw.delete(name)),
|
|
29
|
+
import: (opts) => use((raw) => raw.import(opts)),
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
}));
|
|
33
|
+
export class ArtifactsBindingPolicy extends Binding.Policy()("Cloudflare.Artifacts.Binding") {
|
|
34
|
+
}
|
|
35
|
+
export const ArtifactsBindingPolicyLive = ArtifactsBindingPolicy.layer.succeed(Effect.fn(function* (host, artifacts) {
|
|
36
|
+
if (isWorker(host)) {
|
|
37
|
+
yield* host.bind(artifacts.name, {
|
|
38
|
+
bindings: [
|
|
39
|
+
{
|
|
40
|
+
type: "artifacts",
|
|
41
|
+
name: artifacts.name,
|
|
42
|
+
namespace: artifacts.namespace,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
return yield* Effect.die(new Error(`ArtifactsBinding does not support runtime '${host.Type}'`));
|
|
49
|
+
}
|
|
50
|
+
}));
|
|
51
|
+
const tryPromise = (fn) => Effect.tryPromise({
|
|
52
|
+
try: fn,
|
|
53
|
+
catch: (error) => new ArtifactsError({
|
|
54
|
+
message: error?.message ?? "Unknown error",
|
|
55
|
+
cause: error,
|
|
56
|
+
}),
|
|
57
|
+
});
|
|
58
|
+
const wrapRepo = (raw) => ({
|
|
59
|
+
raw,
|
|
60
|
+
createToken: (scope, ttl) => tryPromise(() => raw.createToken(scope, ttl)),
|
|
61
|
+
listTokens: () => tryPromise(() => raw.listTokens()),
|
|
62
|
+
revokeToken: (tokenOrId) => tryPromise(() => raw.revokeToken(tokenOrId)),
|
|
63
|
+
fork: (name, opts) => tryPromise(() => raw.fork(name, opts)),
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=ArtifactsBinding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArtifactsBinding.js","sourceRoot":"","sources":["../../../src/Cloudflare/Artifacts/ArtifactsBinding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Artifacts/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Cloudflare/Artifacts/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
|
@@ -3,5 +3,5 @@ import { type Rpc } from "../../Platform.ts";
|
|
|
3
3
|
import { DurableObjectNamespace } from "../Workers/DurableObjectNamespace.ts";
|
|
4
4
|
import { DurableObjectState } from "../Workers/DurableObjectState.ts";
|
|
5
5
|
import type { ContainerApplication } from "./ContainerApplication.ts";
|
|
6
|
-
export declare const bindContainer: <Shape, Req = never>(containerEff: (ContainerApplication<unknown> & Rpc<Shape>) | Effect.Effect<ContainerApplication<unknown> & Rpc<Shape>, never, Req>) => Effect.Effect<Effect.Effect<Shape, never, DurableObjectState>, never, import("../../Platform.ts").PlatformServices |
|
|
6
|
+
export declare const bindContainer: <Shape, Req = never>(containerEff: (ContainerApplication<unknown> & Rpc<Shape>) | Effect.Effect<ContainerApplication<unknown> & Rpc<Shape>, never, Req>) => Effect.Effect<Effect.Effect<Shape, never, DurableObjectState>, never, import("../../Platform.ts").PlatformServices | import("../index.ts").WorkerServices | DurableObjectNamespace<unknown>>;
|
|
7
7
|
//# sourceMappingURL=ContainerBinding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Providers.d.ts","sourceRoot":"","sources":["../../src/Cloudflare/Providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAkB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Providers.d.ts","sourceRoot":"","sources":["../../src/Cloudflare/Providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAkB,MAAM,cAAc,CAAC;AAItD,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,UAAU,MAAM,sBAAsB,CAAC;AAUnD,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;;AAEtE,qBAAa,SAAU,SAAQ,cAE9B;CAAG;AAEJ,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,SAAS,0iBA2DnB,CAAC"}
|
|
@@ -4,6 +4,7 @@ import * as Build from "../Build/index.js";
|
|
|
4
4
|
import * as Provider from "../Provider.js";
|
|
5
5
|
import { Random, RandomProvider } from "../Random.js";
|
|
6
6
|
import * as ApiToken from "./ApiToken/index.js";
|
|
7
|
+
import * as Artifacts from "./Artifacts/index.js";
|
|
7
8
|
import { CloudflareAuth } from "./Auth/AuthProvider.js";
|
|
8
9
|
import * as CloudflareEnvironment from "./CloudflareEnvironment.js";
|
|
9
10
|
import * as Containers from "./Container/index.js";
|
|
@@ -24,6 +25,7 @@ export class Providers extends Provider.ProviderCollection()("Cloudflare") {
|
|
|
24
25
|
export const providers = () => Layer.effect(Providers, Provider.collection([
|
|
25
26
|
ApiToken.AccountApiToken,
|
|
26
27
|
ApiToken.UserApiToken,
|
|
28
|
+
Artifacts.ArtifactsBindingPolicy,
|
|
27
29
|
Command,
|
|
28
30
|
Containers.Container,
|
|
29
31
|
D1.D1ConnectionPolicy,
|
|
@@ -43,5 +45,5 @@ export const providers = () => Layer.effect(Providers, Provider.collection([
|
|
|
43
45
|
Workers.FetchPolicy,
|
|
44
46
|
Workers.Worker,
|
|
45
47
|
Workflows.WorkflowResource,
|
|
46
|
-
])).pipe(Layer.provide(Layer.mergeAll(ApiToken.AccountApiTokenProvider(), ApiToken.UserApiTokenProvider(), Containers.ContainerProvider(), D1.D1ConnectionPolicyLive, D1.DatabaseProvider(), KV.KVNamespaceBindingPolicyLive, KV.KVNamespaceProvider(), Queue.QueueBindingPolicyLive, Queue.QueueProvider(), Queue.QueueConsumerProvider(), R2.R2BucketBindingPolicyLive, R2.R2BucketProvider(), SecretsStore.SecretBindingPolicyLive, SecretsStore.SecretsStoreProvider(), SecretsStore.StoreSecretProvider(), Workers.BindWorkerPolicyLive, Workers.FetchPolicyLive, Workers.WorkerProvider(), Workflows.WorkflowProvider())), Layer.provideMerge(Layer.mergeAll(Build.CommandProvider(), RandomProvider())), Layer.provideMerge(Credentials.fromAuthProvider()), Layer.provideMerge(CloudflareEnvironment.fromProfile()), Layer.provideMerge(CloudflareAuth), Layer.orDie);
|
|
48
|
+
])).pipe(Layer.provide(Layer.mergeAll(ApiToken.AccountApiTokenProvider(), ApiToken.UserApiTokenProvider(), Artifacts.ArtifactsBindingPolicyLive, Containers.ContainerProvider(), D1.D1ConnectionPolicyLive, D1.DatabaseProvider(), KV.KVNamespaceBindingPolicyLive, KV.KVNamespaceProvider(), Queue.QueueBindingPolicyLive, Queue.QueueProvider(), Queue.QueueConsumerProvider(), R2.R2BucketBindingPolicyLive, R2.R2BucketProvider(), SecretsStore.SecretBindingPolicyLive, SecretsStore.SecretsStoreProvider(), SecretsStore.StoreSecretProvider(), Workers.BindWorkerPolicyLive, Workers.FetchPolicyLive, Workers.WorkerProvider(), Workflows.WorkflowProvider())), Layer.provideMerge(Layer.mergeAll(Build.CommandProvider(), RandomProvider())), Layer.provideMerge(Credentials.fromAuthProvider()), Layer.provideMerge(CloudflareEnvironment.fromProfile()), Layer.provideMerge(CloudflareAuth), Layer.orDie);
|
|
47
49
|
//# sourceMappingURL=Providers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Providers.js","sourceRoot":"","sources":["../../src/Cloudflare/Providers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Providers.js","sourceRoot":"","sources":["../../src/Cloudflare/Providers.ts"],"names":[],"mappings":"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"}
|