effect-cf 0.33.0 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +31 -1079
- package/dist/{Artifacts-DnHQA-Ax.d.mts → Artifacts-B3r3RuTB.d.mts} +1 -48
- package/dist/{Artifacts-CSIk1Oml.mjs → Artifacts-CBxWGeZB.mjs} +2 -7
- package/dist/{Binding-pfilNJmP.mjs → Binding-C82jRhdr.mjs} +1 -2
- package/dist/{Binding-xJJJPmiD.d.mts → Binding-DKcLrQCM.d.mts} +0 -45
- package/dist/ComputerArtifacts.d.mts +1 -3
- package/dist/ComputerArtifacts.mjs +1 -2
- package/dist/ComputerWorkspace.d.mts +11 -12
- package/dist/ComputerWorkspace.mjs +31 -10
- package/dist/ComputerWorkspaceHost.d.mts +1 -9
- package/dist/{ContainerNamespace-CFjiLw8b.d.mts → ContainerNamespace-DbLaeFhN.d.mts} +1 -14
- package/dist/{DurableObjectState-CVLLse69.mjs → DurableObjectState-DcqElJ4e.mjs} +82 -89
- package/dist/{DurableObjectState-BpRjz6-q.d.mts → DurableObjectState-DpYdNZgT.d.mts} +102 -266
- package/dist/{ErrorMessage-BM0K-Nik.mjs → ErrorMessage-Byx2OgNd.mjs} +0 -1
- package/dist/{Hyperdrive-z-9fFz15.d.mts → Hyperdrive-HrwFlZ6x.d.mts} +1 -4
- package/dist/HyperdrivePg.d.mts +2 -11
- package/dist/HyperdrivePg.mjs +0 -8
- package/dist/Sandbox.d.mts +2 -32
- package/dist/Sandbox.mjs +2 -11
- package/dist/Vitest.d.mts +3 -31
- package/dist/Vitest.mjs +8 -26
- package/dist/{WorkflowBinding-lBR4_-op.d.mts → WorkflowBinding-Cn3AuUyP.d.mts} +2 -5
- package/dist/index.d.mts +42 -480
- package/dist/index.mjs +267 -380
- package/package.json +1 -1
- package/src/AiGateway.ts +0 -6
- package/src/AnalyticsEngine.ts +8 -10
- package/src/Artifacts.ts +0 -47
- package/src/Binding.ts +0 -8
- package/src/BrowserRendering.ts +0 -4
- package/src/Cache.ts +0 -19
- package/src/CloudflareOtlp.ts +6 -39
- package/src/ComputerArtifacts.ts +0 -2
- package/src/ComputerWorkspace.ts +53 -35
- package/src/ComputerWorkspaceHost.ts +0 -8
- package/src/ContainerNamespace.ts +0 -13
- package/src/D1.ts +0 -22
- package/src/DurableObject.ts +51 -32
- package/src/DurableObjectAlarm.ts +6 -210
- package/src/DurableObjectDefinition.ts +8 -20
- package/src/DurableObjectNamespace.ts +88 -115
- package/src/DurableObjectRpcWebSocket.ts +5 -46
- package/src/DurableObjectSqlite.ts +0 -12
- package/src/DurableObjectState.ts +18 -38
- package/src/DurableObjectStorage.ts +55 -70
- package/src/DurableObjectWebSocket.ts +23 -72
- package/src/Email.ts +0 -12
- package/src/Environment.ts +0 -37
- package/src/Hyperdrive.ts +0 -3
- package/src/HyperdrivePg.ts +0 -9
- package/src/Images.ts +0 -5
- package/src/Kv.ts +0 -15
- package/src/QueueBinding.ts +0 -2
- package/src/R2.ts +0 -5
- package/src/RpcDefinition.ts +5 -17
- package/src/RpcTracing.ts +133 -0
- package/src/Sandbox.ts +0 -30
- package/src/ServiceBinding.ts +83 -128
- package/src/Vectorize.ts +0 -5
- package/src/Vitest.ts +18 -43
- package/src/WebTransport.ts +0 -15
- package/src/Worker.ts +140 -108
- package/src/WorkerDefinition.ts +5 -14
- package/src/WorkersAi.ts +21 -18
- package/src/Workflow.ts +45 -54
- package/src/WorkflowBinding.ts +0 -3
- package/src/index.ts +1 -0
- package/src/internal/Entrypoint.ts +23 -4
- package/src/internal/ErrorMessage.ts +0 -1
- package/src/internal/NativeCallback.ts +55 -0
- package/src/internal/RpcInvocation.ts +18 -1
- package/src/internal/Runtime.ts +12 -7
- package/src/internal/WorkerContext.ts +5 -14
package/package.json
CHANGED
package/src/AiGateway.ts
CHANGED
|
@@ -8,7 +8,6 @@ import * as ErrorMessage from "./internal/ErrorMessage";
|
|
|
8
8
|
|
|
9
9
|
const expectedAiGatewayBinding = "Workers AI binding with gateway()";
|
|
10
10
|
|
|
11
|
-
/** Error raised when an AI Gateway operation fails. */
|
|
12
11
|
export class AiGatewayOperationError extends Data.TaggedError("AiGatewayOperationError")<{
|
|
13
12
|
readonly binding: string;
|
|
14
13
|
readonly operation: string;
|
|
@@ -19,13 +18,9 @@ export class AiGatewayOperationError extends Data.TaggedError("AiGatewayOperatio
|
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
20
|
|
|
22
|
-
/** Typed AI Gateway client definition. */
|
|
23
21
|
export interface AiGatewayDefinition {
|
|
24
|
-
/** Binding name as configured in `wrangler.jsonc`. */
|
|
25
22
|
readonly binding: string;
|
|
26
|
-
/** Gateway id/name passed to `env.AI.gateway(id)`. */
|
|
27
23
|
readonly gatewayId: string;
|
|
28
|
-
/** Optional account id used by the HTTP-only helper. */
|
|
29
24
|
readonly accountId?: string;
|
|
30
25
|
}
|
|
31
26
|
|
|
@@ -104,7 +99,6 @@ export interface AiGatewayClient {
|
|
|
104
99
|
|
|
105
100
|
declare const AiGatewayServiceTypeId: unique symbol;
|
|
106
101
|
|
|
107
|
-
/** Nominal service marker for AI Gateway services created with {@link make}. */
|
|
108
102
|
export interface AiGatewayService<Id extends string> {
|
|
109
103
|
readonly [AiGatewayServiceTypeId]: {
|
|
110
104
|
readonly id: Id;
|
package/src/AnalyticsEngine.ts
CHANGED
|
@@ -65,7 +65,6 @@ export const AnalyticsEngineDataPointSchema = S.Struct({
|
|
|
65
65
|
const decodeQueryResponse = S.decodeUnknownEffect(queryResponseSchema);
|
|
66
66
|
const decodeDataPoint = S.decodeUnknownEffect(AnalyticsEngineDataPointSchema);
|
|
67
67
|
|
|
68
|
-
/** Error raised when an Analytics Engine operation fails. */
|
|
69
68
|
export class AnalyticsEngineOperationError extends Data.TaggedError(
|
|
70
69
|
"AnalyticsEngineOperationError",
|
|
71
70
|
)<{
|
|
@@ -85,7 +84,6 @@ export interface AnalyticsEngineWriteViolation {
|
|
|
85
84
|
readonly actual?: number;
|
|
86
85
|
}
|
|
87
86
|
|
|
88
|
-
/** Error raised when an Analytics Engine write input violates Cloudflare limits. */
|
|
89
87
|
export class AnalyticsEngineWriteValidationError extends Data.TaggedError(
|
|
90
88
|
"AnalyticsEngineWriteValidationError",
|
|
91
89
|
)<{
|
|
@@ -99,7 +97,6 @@ export class AnalyticsEngineWriteValidationError extends Data.TaggedError(
|
|
|
99
97
|
}
|
|
100
98
|
}
|
|
101
99
|
|
|
102
|
-
/** Error raised when an Analytics Engine SQL API query fails. */
|
|
103
100
|
export class AnalyticsEngineQueryError extends Data.TaggedError("AnalyticsEngineQueryError")<{
|
|
104
101
|
readonly operation: string;
|
|
105
102
|
readonly accountId: string;
|
|
@@ -109,9 +106,7 @@ export class AnalyticsEngineQueryError extends Data.TaggedError("AnalyticsEngine
|
|
|
109
106
|
readonly cause?: unknown;
|
|
110
107
|
}> {}
|
|
111
108
|
|
|
112
|
-
/** Typed Analytics Engine dataset binding definition. */
|
|
113
109
|
export interface AnalyticsEngineDefinition {
|
|
114
|
-
/** Binding name as configured in `wrangler.jsonc`. */
|
|
115
110
|
readonly binding: string;
|
|
116
111
|
}
|
|
117
112
|
|
|
@@ -142,11 +137,9 @@ export interface AnalyticsEngineQueryResult<Row = AnalyticsEngineQueryRow> {
|
|
|
142
137
|
}
|
|
143
138
|
|
|
144
139
|
export interface AnalyticsEngineQueryDefinition {
|
|
145
|
-
/** Cloudflare account id that owns the Analytics Engine datasets. */
|
|
146
140
|
readonly accountId: string;
|
|
147
141
|
/** API token with Account Analytics Read permission. */
|
|
148
142
|
readonly apiToken: Redacted.Redacted<string>;
|
|
149
|
-
/** Base Cloudflare API URL. Defaults to `https://api.cloudflare.com/client/v4`. */
|
|
150
143
|
readonly apiBaseUrl?: string | URL;
|
|
151
144
|
}
|
|
152
145
|
|
|
@@ -202,14 +195,12 @@ export interface AnalyticsEngineQueryClient {
|
|
|
202
195
|
declare const AnalyticsEngineServiceTypeId: unique symbol;
|
|
203
196
|
declare const AnalyticsEngineQueryServiceTypeId: unique symbol;
|
|
204
197
|
|
|
205
|
-
/** Nominal service marker for Analytics Engine services created with {@link make}. */
|
|
206
198
|
export interface AnalyticsEngineService<Id extends string> {
|
|
207
199
|
readonly [AnalyticsEngineServiceTypeId]: {
|
|
208
200
|
readonly id: Id;
|
|
209
201
|
};
|
|
210
202
|
}
|
|
211
203
|
|
|
212
|
-
/** Nominal service marker for Analytics Engine query services created with {@link makeQuery}. */
|
|
213
204
|
export interface AnalyticsEngineQueryService<Id extends string> {
|
|
214
205
|
readonly [AnalyticsEngineQueryServiceTypeId]: {
|
|
215
206
|
readonly id: Id;
|
|
@@ -581,7 +572,14 @@ const executeQueryRequest = (
|
|
|
581
572
|
options?: AnalyticsEngineQueryOptions,
|
|
582
573
|
) =>
|
|
583
574
|
Effect.gen(function* () {
|
|
584
|
-
const
|
|
575
|
+
const request = yield* Effect.try({
|
|
576
|
+
try: () => queryRequest(definition, sql, options),
|
|
577
|
+
catch: (cause) =>
|
|
578
|
+
analyticsEngineQueryError(definition, "query", "Invalid Analytics Engine SQL API URL", {
|
|
579
|
+
cause,
|
|
580
|
+
}),
|
|
581
|
+
});
|
|
582
|
+
const response = yield* httpClient.execute(request).pipe(
|
|
585
583
|
Effect.mapError((cause) =>
|
|
586
584
|
analyticsEngineQueryError(definition, "query", "Analytics Engine SQL API request failed", {
|
|
587
585
|
cause,
|
package/src/Artifacts.ts
CHANGED
|
@@ -18,7 +18,6 @@ const expectedArtifactsBinding =
|
|
|
18
18
|
const expectedArtifactsRepo =
|
|
19
19
|
"Artifacts repo handle with createToken(), listTokens(), revokeToken(), fork(), log(), readCommit(), and readTree()";
|
|
20
20
|
|
|
21
|
-
/** Artifacts operation represented by {@link ArtifactsOperationError}. */
|
|
22
21
|
export type ArtifactsOperation =
|
|
23
22
|
| "createClient"
|
|
24
23
|
| "create"
|
|
@@ -37,7 +36,6 @@ export type ArtifactsOperation =
|
|
|
37
36
|
| "readTree"
|
|
38
37
|
| "cli";
|
|
39
38
|
|
|
40
|
-
/** Documented string error codes returned by Cloudflare Artifacts. */
|
|
41
39
|
export const artifactsErrorCodes = [
|
|
42
40
|
"ALREADY_EXISTS",
|
|
43
41
|
"NOT_FOUND",
|
|
@@ -53,7 +51,6 @@ export const artifactsErrorCodes = [
|
|
|
53
51
|
"INTERNAL_ERROR",
|
|
54
52
|
] as const satisfies ReadonlyArray<CloudflareArtifactsErrorCode>;
|
|
55
53
|
|
|
56
|
-
/** Documented numeric error codes returned by Cloudflare Artifacts. */
|
|
57
54
|
export const artifactsErrorNumericCodes = {
|
|
58
55
|
ALREADY_EXISTS: 10201,
|
|
59
56
|
NOT_FOUND: 10200,
|
|
@@ -69,17 +66,13 @@ export const artifactsErrorNumericCodes = {
|
|
|
69
66
|
INTERNAL_ERROR: 10400,
|
|
70
67
|
} as const satisfies Readonly<Record<CloudflareArtifactsErrorCode, number>>;
|
|
71
68
|
|
|
72
|
-
/** A documented Cloudflare Artifacts string error code. */
|
|
73
69
|
export type ArtifactsErrorCode = CloudflareArtifactsErrorCode;
|
|
74
70
|
|
|
75
|
-
/** Error raised when a Cloudflare Artifacts operation fails. */
|
|
76
71
|
export class ArtifactsOperationError extends Data.TaggedError("ArtifactsOperationError")<{
|
|
77
72
|
readonly binding: string;
|
|
78
73
|
readonly operation: ArtifactsOperation;
|
|
79
74
|
readonly cause: unknown;
|
|
80
|
-
/** Cloudflare string error code, when retained by the runtime. */
|
|
81
75
|
readonly code?: ArtifactsErrorCode | (string & {});
|
|
82
|
-
/** Cloudflare REST-compatible numeric error code, when retained by the runtime. */
|
|
83
76
|
readonly numericCode?: number;
|
|
84
77
|
}> {
|
|
85
78
|
override get message(): string {
|
|
@@ -89,16 +82,12 @@ export class ArtifactsOperationError extends Data.TaggedError("ArtifactsOperatio
|
|
|
89
82
|
}
|
|
90
83
|
}
|
|
91
84
|
|
|
92
|
-
/** Typed Cloudflare Artifacts binding definition. */
|
|
93
85
|
export interface ArtifactsDefinition {
|
|
94
|
-
/** Binding name from an `artifacts` entry in `wrangler.jsonc`. */
|
|
95
86
|
readonly binding: string;
|
|
96
87
|
}
|
|
97
88
|
|
|
98
|
-
/** Repository name containing alphanumeric characters, dots, hyphens, or underscores. */
|
|
99
89
|
export type RepoName = string;
|
|
100
90
|
|
|
101
|
-
/** Cursor used by repository list pagination. */
|
|
102
91
|
export type Cursor = string;
|
|
103
92
|
|
|
104
93
|
/** Scope granted to a repository token. */
|
|
@@ -107,21 +96,16 @@ export type ArtifactsTokenScope = "read" | "write";
|
|
|
107
96
|
/** Lifecycle state of a repository token. */
|
|
108
97
|
export type ArtifactsTokenState = "active" | "expired" | "revoked";
|
|
109
98
|
|
|
110
|
-
/** Lifecycle state included with repositories returned by `list()`. */
|
|
111
99
|
export type ArtifactsRepoStatus = "ready" | "importing" | "forking";
|
|
112
100
|
|
|
113
|
-
/** Stable repository metadata returned by Cloudflare Artifacts. */
|
|
114
101
|
export type ArtifactsRepoInfo = CloudflareArtifactsRepoInfo;
|
|
115
102
|
|
|
116
|
-
/** Result of creating, importing, or forking a repository. */
|
|
117
103
|
export type ArtifactsCreateRepoResult = Readonly<CloudflareArtifactsCreateRepoResult>;
|
|
118
104
|
|
|
119
|
-
/** Repository metadata returned by `list()`. */
|
|
120
105
|
export interface ArtifactsRepoListEntry extends ArtifactsRepoInfo {
|
|
121
106
|
readonly status: ArtifactsRepoStatus;
|
|
122
107
|
}
|
|
123
108
|
|
|
124
|
-
/** Cursor-paginated repository list result. */
|
|
125
109
|
export interface ArtifactsRepoListResult {
|
|
126
110
|
readonly repos: ReadonlyArray<ArtifactsRepoListEntry>;
|
|
127
111
|
readonly total: number;
|
|
@@ -151,13 +135,10 @@ export interface ArtifactsCommit {
|
|
|
151
135
|
readonly author: ArtifactsCommitIdentity;
|
|
152
136
|
readonly committer: ArtifactsCommitIdentity;
|
|
153
137
|
readonly parents: ReadonlyArray<string>;
|
|
154
|
-
/** Unix timestamp in seconds. */
|
|
155
138
|
readonly authoredAt: number;
|
|
156
|
-
/** Unix timestamp in seconds. */
|
|
157
139
|
readonly committedAt: number;
|
|
158
140
|
}
|
|
159
141
|
|
|
160
|
-
/** Bare commit array returned by `log()`. */
|
|
161
142
|
export type ArtifactsLogResult = ReadonlyArray<ArtifactsCommit>;
|
|
162
143
|
|
|
163
144
|
/**
|
|
@@ -170,20 +151,14 @@ export interface ArtifactsTree<Field = unknown> {
|
|
|
170
151
|
readonly [field: string]: Field;
|
|
171
152
|
}
|
|
172
153
|
|
|
173
|
-
/** Options for `Artifacts.create()`. */
|
|
174
154
|
export interface ArtifactsCreateOptions {
|
|
175
|
-
/** Prevent pushes to the repository. */
|
|
176
155
|
readonly readOnly?: boolean;
|
|
177
156
|
readonly description?: string;
|
|
178
|
-
/** Initial default branch name. */
|
|
179
157
|
readonly setDefaultBranch?: string;
|
|
180
158
|
}
|
|
181
159
|
|
|
182
|
-
/** Options for cursor-paginating `Artifacts.list()`. */
|
|
183
160
|
export interface ArtifactsListOptions {
|
|
184
|
-
/** Page size from 1 through 200. Defaults to 50. */
|
|
185
161
|
readonly limit?: number;
|
|
186
|
-
/** Cursor returned by a previous list result. */
|
|
187
162
|
readonly cursor?: Cursor;
|
|
188
163
|
}
|
|
189
164
|
|
|
@@ -191,47 +166,37 @@ export interface ArtifactsListOptions {
|
|
|
191
166
|
export interface ArtifactsImportSource {
|
|
192
167
|
/** Full HTTPS URL of the Git repository. */
|
|
193
168
|
readonly url: string;
|
|
194
|
-
/** Source branch. Defaults to the remote's default branch. */
|
|
195
169
|
readonly branch?: string;
|
|
196
|
-
/** Shallow clone depth. */
|
|
197
170
|
readonly depth?: number;
|
|
198
171
|
}
|
|
199
172
|
|
|
200
|
-
/** Options for the target of `Artifacts.import()`. */
|
|
201
173
|
export interface ArtifactsImportTargetOptions {
|
|
202
174
|
readonly description?: string;
|
|
203
175
|
readonly readOnly?: boolean;
|
|
204
176
|
}
|
|
205
177
|
|
|
206
|
-
/** Target repository used by `Artifacts.import()`. */
|
|
207
178
|
export interface ArtifactsImportTarget {
|
|
208
179
|
readonly name: RepoName;
|
|
209
180
|
readonly opts?: ArtifactsImportTargetOptions;
|
|
210
181
|
}
|
|
211
182
|
|
|
212
|
-
/** Parameters for `Artifacts.import()`. */
|
|
213
183
|
export interface ArtifactsImportParams {
|
|
214
184
|
readonly source: ArtifactsImportSource;
|
|
215
185
|
readonly target: ArtifactsImportTarget;
|
|
216
186
|
}
|
|
217
187
|
|
|
218
|
-
/** Options for `ArtifactsRepoClient.fork()`. */
|
|
219
188
|
export interface ArtifactsForkOptions {
|
|
220
189
|
readonly description?: string;
|
|
221
190
|
readonly readOnly?: boolean;
|
|
222
|
-
/** Only copy the default branch. Defaults to `true`. */
|
|
223
191
|
readonly defaultBranchOnly?: boolean;
|
|
224
192
|
}
|
|
225
193
|
|
|
226
|
-
/** Options for `ArtifactsRepoClient.log()`. */
|
|
227
194
|
export interface ArtifactsLogOptions {
|
|
228
|
-
/** Branch, tag, or commit hash. */
|
|
229
195
|
readonly ref?: string;
|
|
230
196
|
readonly limit?: number;
|
|
231
197
|
readonly offset?: number;
|
|
232
198
|
}
|
|
233
199
|
|
|
234
|
-
/** Runtime repository handle, including methods absent from current shipped Workers types. */
|
|
235
200
|
export interface ArtifactsRepoBinding extends Partial<ArtifactsRepoInfo> {
|
|
236
201
|
/**
|
|
237
202
|
* Read repository metadata.
|
|
@@ -262,7 +227,6 @@ export interface ArtifactsRepoBinding extends Partial<ArtifactsRepoInfo> {
|
|
|
262
227
|
readonly readTree: (hash: string) => Promise<ArtifactsTree>;
|
|
263
228
|
}
|
|
264
229
|
|
|
265
|
-
/** Cloudflare Artifacts namespace binding. */
|
|
266
230
|
export interface ArtifactsBinding {
|
|
267
231
|
readonly create: (
|
|
268
232
|
name: RepoName,
|
|
@@ -274,14 +238,7 @@ export interface ArtifactsBinding {
|
|
|
274
238
|
readonly delete: (name: RepoName) => Promise<boolean>;
|
|
275
239
|
}
|
|
276
240
|
|
|
277
|
-
/**
|
|
278
|
-
* Effect wrapper around a repository handle returned by `Artifacts.get()`.
|
|
279
|
-
*
|
|
280
|
-
* The inherited metadata is the snapshot read while resolving the client.
|
|
281
|
-
* Use `info()` to refresh it from the repository handle.
|
|
282
|
-
*/
|
|
283
241
|
export interface ArtifactsRepoClient extends ArtifactsRepoInfo {
|
|
284
|
-
/** Read and validate the repository's current metadata. */
|
|
285
242
|
readonly info: () => Effect.Effect<ArtifactsRepoInfo, ArtifactsOperationError>;
|
|
286
243
|
/**
|
|
287
244
|
* Create a Git token for the repository.
|
|
@@ -307,7 +264,6 @@ export interface ArtifactsRepoClient extends ArtifactsRepoInfo {
|
|
|
307
264
|
readonly raw: ArtifactsRepoBinding;
|
|
308
265
|
}
|
|
309
266
|
|
|
310
|
-
/** Effect wrapper around a Cloudflare Artifacts namespace binding. */
|
|
311
267
|
export interface ArtifactsClient {
|
|
312
268
|
readonly create: (
|
|
313
269
|
name: RepoName,
|
|
@@ -327,7 +283,6 @@ export interface ArtifactsClient {
|
|
|
327
283
|
|
|
328
284
|
declare const ArtifactsServiceTypeId: unique symbol;
|
|
329
285
|
|
|
330
|
-
/** Nominal service marker for Artifacts services created with {@link make}. */
|
|
331
286
|
export interface ArtifactsService<Id extends string> {
|
|
332
287
|
readonly [ArtifactsServiceTypeId]: {
|
|
333
288
|
readonly id: Id;
|
|
@@ -440,7 +395,6 @@ const readRepoInfo = (
|
|
|
440
395
|
);
|
|
441
396
|
};
|
|
442
397
|
|
|
443
|
-
/** Tests whether a value exposes the complete documented Artifacts repo handle API. */
|
|
444
398
|
export const isArtifactsRepoBinding = <Candidate>(
|
|
445
399
|
value: Candidate,
|
|
446
400
|
): value is Candidate & ArtifactsRepoBinding =>
|
|
@@ -452,7 +406,6 @@ export const isArtifactsRepoBinding = <Candidate>(
|
|
|
452
406
|
hasFunction(value, "readCommit") &&
|
|
453
407
|
hasFunction(value, "readTree");
|
|
454
408
|
|
|
455
|
-
/** Tests whether a value exposes the complete documented Artifacts namespace API. */
|
|
456
409
|
export const isArtifactsBinding = <Candidate>(
|
|
457
410
|
value: Candidate,
|
|
458
411
|
): value is Candidate & ArtifactsBinding =>
|
package/src/Binding.ts
CHANGED
|
@@ -2,10 +2,8 @@ import { Context, Data, Effect, Layer, Predicate } from "effect";
|
|
|
2
2
|
|
|
3
3
|
import { WorkerEnvironment, type WorkerEnv } from "./Environment";
|
|
4
4
|
|
|
5
|
-
/** Internal type id marker used by binding helper services. */
|
|
6
5
|
export const TypeId = "~effect-cf/Binding" as const;
|
|
7
6
|
|
|
8
|
-
/** Internal type id marker used by binding helper services. */
|
|
9
7
|
export type TypeId = typeof TypeId;
|
|
10
8
|
|
|
11
9
|
/** Error raised when a configured binding does not exist on `env`. */
|
|
@@ -171,12 +169,6 @@ const getBinding = <Resource>(
|
|
|
171
169
|
return resource;
|
|
172
170
|
});
|
|
173
171
|
|
|
174
|
-
/**
|
|
175
|
-
* Creates a Context tag + layer for reading and validating a Cloudflare binding.
|
|
176
|
-
*
|
|
177
|
-
* The Context key is namespaced as `effect-cf/Binding/<id>`; `id` stays the
|
|
178
|
-
* bare user-supplied identifier.
|
|
179
|
-
*/
|
|
180
172
|
export interface BindingService<Self, Id extends string, Service> extends Context.ServiceClass<
|
|
181
173
|
Self,
|
|
182
174
|
`effect-cf/Binding/${Id}`,
|
package/src/BrowserRendering.ts
CHANGED
|
@@ -6,7 +6,6 @@ import * as ErrorMessage from "./internal/ErrorMessage";
|
|
|
6
6
|
|
|
7
7
|
const expectedBrowserRenderingBinding = "Browser Rendering binding resource";
|
|
8
8
|
|
|
9
|
-
/** Error raised when a Browser Rendering operation fails. */
|
|
10
9
|
export class BrowserRenderingOperationError extends Data.TaggedError(
|
|
11
10
|
"BrowserRenderingOperationError",
|
|
12
11
|
)<{
|
|
@@ -19,9 +18,7 @@ export class BrowserRenderingOperationError extends Data.TaggedError(
|
|
|
19
18
|
}
|
|
20
19
|
}
|
|
21
20
|
|
|
22
|
-
/** Typed Browser Rendering binding definition. */
|
|
23
21
|
export interface BrowserRenderingDefinition {
|
|
24
|
-
/** Binding name as configured in `wrangler.jsonc`. */
|
|
25
22
|
readonly binding: string;
|
|
26
23
|
}
|
|
27
24
|
|
|
@@ -132,7 +129,6 @@ export interface BrowserRenderingClient<
|
|
|
132
129
|
|
|
133
130
|
declare const BrowserRenderingServiceTypeId: unique symbol;
|
|
134
131
|
|
|
135
|
-
/** Nominal service marker for Browser Rendering services created with {@link make}. */
|
|
136
132
|
export interface BrowserRenderingService<Id extends string> {
|
|
137
133
|
readonly [BrowserRenderingServiceTypeId]: {
|
|
138
134
|
readonly id: Id;
|
package/src/Cache.ts
CHANGED
|
@@ -8,16 +8,12 @@ import { Context, Data, Effect, Layer, Option } from "effect";
|
|
|
8
8
|
|
|
9
9
|
import * as ErrorMessage from "./internal/ErrorMessage";
|
|
10
10
|
|
|
11
|
-
/** Request key accepted by Cloudflare's Cache API. */
|
|
12
11
|
export type CacheRequest = CloudflareRequestInfo | URL;
|
|
13
12
|
|
|
14
|
-
/** Query options supported by Cloudflare's Cache API. */
|
|
15
13
|
export type CacheQueryOptions = CloudflareCacheQueryOptions;
|
|
16
14
|
|
|
17
|
-
/** Cache operation represented by {@link CacheOperationError}. */
|
|
18
15
|
export type CacheOperation = "open" | "match" | "put" | "delete";
|
|
19
16
|
|
|
20
|
-
/** Error raised when a Cloudflare Cache API operation fails. */
|
|
21
17
|
export class CacheOperationError extends Data.TaggedError("CacheOperationError")<{
|
|
22
18
|
readonly cache: string;
|
|
23
19
|
readonly operation: CacheOperation;
|
|
@@ -28,40 +24,29 @@ export class CacheOperationError extends Data.TaggedError("CacheOperationError")
|
|
|
28
24
|
}
|
|
29
25
|
}
|
|
30
26
|
|
|
31
|
-
/** Effect wrapper around one Cloudflare `Cache` instance. */
|
|
32
27
|
export interface CacheClient {
|
|
33
|
-
/** Cache name (`default` for `caches.default`). */
|
|
34
28
|
readonly name: string;
|
|
35
|
-
/** Finds a cached response, mapping cache misses to `Option.none()`. */
|
|
36
29
|
readonly match: (
|
|
37
30
|
request: CacheRequest,
|
|
38
31
|
options?: CacheQueryOptions,
|
|
39
32
|
) => Effect.Effect<Option.Option<Response>, CacheOperationError>;
|
|
40
|
-
/** Stores a response under the request key. */
|
|
41
33
|
readonly put: (
|
|
42
34
|
request: CacheRequest,
|
|
43
35
|
response: Response,
|
|
44
36
|
) => Effect.Effect<void, CacheOperationError>;
|
|
45
|
-
/** Deletes a cached response and reports whether it existed. */
|
|
46
37
|
readonly delete: (
|
|
47
38
|
request: CacheRequest,
|
|
48
39
|
options?: CacheQueryOptions,
|
|
49
40
|
) => Effect.Effect<boolean, CacheOperationError>;
|
|
50
|
-
/** Access to the native Cloudflare `Cache` instance. */
|
|
51
41
|
readonly rawUnsafe: Effect.Effect<CloudflareCache>;
|
|
52
42
|
}
|
|
53
43
|
|
|
54
|
-
/** Effect wrapper around Cloudflare's global `caches` object. */
|
|
55
44
|
export interface CacheStorageClient {
|
|
56
|
-
/** Cloudflare's shared default cache. */
|
|
57
45
|
readonly default: CacheClient;
|
|
58
|
-
/** Opens a named cache. */
|
|
59
46
|
readonly open: (name: string) => Effect.Effect<CacheClient, CacheOperationError>;
|
|
60
|
-
/** Access to the native Cloudflare `CacheStorage` instance. */
|
|
61
47
|
readonly rawUnsafe: Effect.Effect<CloudflareCacheStorage>;
|
|
62
48
|
}
|
|
63
49
|
|
|
64
|
-
/** Service for Cloudflare's global Cache API. */
|
|
65
50
|
export class CacheStorage extends Context.Service<CacheStorage, CacheStorageClient>()(
|
|
66
51
|
"effect-cf/CacheStorage",
|
|
67
52
|
) {}
|
|
@@ -83,7 +68,6 @@ const spanOptions = (cache: string, operation: CacheOperation) => ({
|
|
|
83
68
|
attributes: { cache, operation },
|
|
84
69
|
});
|
|
85
70
|
|
|
86
|
-
/** Wraps a native Cloudflare `Cache` instance. */
|
|
87
71
|
export const makeCacheClient = (cache: CloudflareCache, name = "default"): CacheClient => ({
|
|
88
72
|
name,
|
|
89
73
|
match: Effect.fn(
|
|
@@ -109,7 +93,6 @@ export const makeCacheClient = (cache: CloudflareCache, name = "default"): Cache
|
|
|
109
93
|
rawUnsafe: Effect.succeed(cache),
|
|
110
94
|
});
|
|
111
95
|
|
|
112
|
-
/** Wraps a native Cloudflare `CacheStorage` instance. */
|
|
113
96
|
export const makeClient = (storage: CloudflareCacheStorage): CacheStorageClient => ({
|
|
114
97
|
default: makeCacheClient(storage.default),
|
|
115
98
|
open: (name) =>
|
|
@@ -120,9 +103,7 @@ export const makeClient = (storage: CloudflareCacheStorage): CacheStorageClient
|
|
|
120
103
|
rawUnsafe: Effect.succeed(storage),
|
|
121
104
|
});
|
|
122
105
|
|
|
123
|
-
/** Provides Cache API services from an explicit native `CacheStorage` instance. */
|
|
124
106
|
export const layerFrom = (storage: CloudflareCacheStorage): Layer.Layer<CacheStorage> =>
|
|
125
107
|
Layer.succeed(CacheStorage, makeClient(storage));
|
|
126
108
|
|
|
127
|
-
/** Provides Cache API services from Cloudflare's global `caches` object. */
|
|
128
109
|
export const layer: Layer.Layer<CacheStorage> = Layer.sync(CacheStorage, () => makeClient(caches));
|
package/src/CloudflareOtlp.ts
CHANGED
|
@@ -1,28 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* export interval fires. Effect-backed Worker fetch handlers, Worker or
|
|
7
|
-
* Durable Object native RPC handlers, and Durable Object alarm handlers
|
|
8
|
-
* schedule this flusher automatically. These automatic flushes are capped at
|
|
9
|
-
* two seconds and silently discard timeouts and failures so telemetry cannot
|
|
10
|
-
* extend or fail the user event, or recursively log through an unhealthy
|
|
11
|
-
* exporter.
|
|
12
|
-
*
|
|
13
|
-
* Other entrypoint lifecycles, including queue handlers, do not flush
|
|
14
|
-
* automatically. Applications can flush explicitly or hand the flush to their
|
|
15
|
-
* `waitUntil` mechanism, and own the timeout and failure policy at that call
|
|
16
|
-
* site:
|
|
17
|
-
*
|
|
18
|
-
* ```ts
|
|
19
|
-
* const flusher = yield* OtlpExporter.Flusher;
|
|
20
|
-
*
|
|
21
|
-
* yield* flusher.flush.pipe(
|
|
22
|
-
* Effect.timeoutOption("2 seconds"),
|
|
23
|
-
* Effect.ignoreCause,
|
|
24
|
-
* );
|
|
25
|
-
* ```
|
|
2
|
+
* Worker fetch/queue/RPC and Durable Object alarm/RPC handlers schedule a
|
|
3
|
+
* best-effort flusher. It settles within two seconds; other lifecycles must
|
|
4
|
+
* flush explicitly. Scheduled flush failures cannot fail user events. Exporter
|
|
5
|
+
* layer finalizers run separately and follow their configured shutdown timeout.
|
|
26
6
|
*/
|
|
27
7
|
import { ConfigProvider, Effect, Layer, Option } from "effect";
|
|
28
8
|
import type * as Tracer from "effect/Tracer";
|
|
@@ -76,32 +56,18 @@ export interface LayerOptions {
|
|
|
76
56
|
readonly signals?: ReadonlyArray<Signal>;
|
|
77
57
|
/** OTLP payload serialization. Defaults to protobuf. */
|
|
78
58
|
readonly serialization?: Serialization;
|
|
79
|
-
/** Resource metadata forwarded to Effect's OTLP resource resolver. */
|
|
80
59
|
readonly resource?: ResourceOptions;
|
|
81
|
-
/**
|
|
82
|
-
* Explicit headers for every selected signal.
|
|
83
|
-
*
|
|
84
|
-
* When omitted, Effect reads `OTEL_EXPORTER_OTLP_HEADERS` and the
|
|
85
|
-
* signal-specific `OTEL_EXPORTER_OTLP_*_HEADERS` variables.
|
|
86
|
-
*/
|
|
87
60
|
readonly headers?: Headers.Input;
|
|
88
|
-
/** Exclude log records emitted for spans when exporting logs. */
|
|
89
61
|
readonly loggerExcludeLogSpans?: boolean;
|
|
90
|
-
/** Merge the OTLP logger with existing loggers instead of replacing them. */
|
|
91
62
|
readonly loggerMergeWithExisting?: boolean;
|
|
92
|
-
/** Custom trace context lookup used by the Effect OTLP tracer. */
|
|
93
63
|
readonly tracerContext?: <X>(primitive: Tracer.EffectPrimitive<X>, span: Tracer.AnySpan) => X;
|
|
94
64
|
}
|
|
95
65
|
|
|
96
|
-
/** Resource metadata specific to Cloudflare Workers. */
|
|
97
66
|
export interface WorkerLayerOptions extends LayerOptions {
|
|
98
|
-
/** Cloudflare Worker name to attach as `cloudflare.worker.name`. */
|
|
99
67
|
readonly workerName?: string;
|
|
100
68
|
}
|
|
101
69
|
|
|
102
|
-
/** Resource metadata specific to Cloudflare Durable Objects. */
|
|
103
70
|
export interface DurableObjectLayerOptions extends LayerOptions {
|
|
104
|
-
/** Durable Object class name to attach as `cloudflare.durable_object.class`. */
|
|
105
71
|
readonly className?: string;
|
|
106
72
|
/**
|
|
107
73
|
* Include the Durable Object id as `cloudflare.durable_object.id`.
|
|
@@ -154,7 +120,6 @@ const serializationLayer = (serialization: Serialization | undefined) =>
|
|
|
154
120
|
|
|
155
121
|
type SignalLayer = ReturnType<typeof OtlpLogger.layerFromConfig>;
|
|
156
122
|
|
|
157
|
-
/** Merges a non-empty signal layer list; callers handle the empty case. */
|
|
158
123
|
const mergeSignalLayers = (layers: ReadonlyArray<SignalLayer>): SignalLayer => {
|
|
159
124
|
let merged = layers[0]!;
|
|
160
125
|
|
|
@@ -243,6 +208,8 @@ export const layerProtobuf = (
|
|
|
243
208
|
*
|
|
244
209
|
* Provide this layer at runtime scope for long-lived metrics aggregation, or at
|
|
245
210
|
* handler scope when traces/logs should flush as the Cloudflare event finishes.
|
|
211
|
+
* A handler-scoped exporter can delay scope closure while its own finalizer
|
|
212
|
+
* flushes; the two-second background flush limit does not bound layer shutdown.
|
|
246
213
|
*/
|
|
247
214
|
export const layerWorker = (options: WorkerLayerOptions = {}): Layer.Layer<OtlpExporter.Flusher> =>
|
|
248
215
|
makeLayer(options, {
|
package/src/ComputerArtifacts.ts
CHANGED
|
@@ -35,7 +35,6 @@ export type ComputerArtifactsCliResult = Readonly<CloudflareComputerArtifactsCli
|
|
|
35
35
|
|
|
36
36
|
/** Options used when wrapping a session-scoped Artifacts client. */
|
|
37
37
|
export interface ComputerArtifactsClientOptions {
|
|
38
|
-
/** Binding name attached to errors and tracing spans. Defaults to `ARTIFACTS`. */
|
|
39
38
|
readonly binding?: string;
|
|
40
39
|
}
|
|
41
40
|
|
|
@@ -136,7 +135,6 @@ const spanOptions = (
|
|
|
136
135
|
operation: Artifacts.ArtifactsOperation,
|
|
137
136
|
) => ({ attributes: { binding, sessionId, operation } });
|
|
138
137
|
|
|
139
|
-
/** Wraps an already-created upstream session client. */
|
|
140
138
|
export const fromClient = (
|
|
141
139
|
client: CloudflareComputerArtifactClient,
|
|
142
140
|
options: ComputerArtifactsClientOptions = {},
|