@revojs/cloudflare 0.2.65 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +10 -1
- package/dist/index.js +30 -7
- package/dist/package.js +4 -4
- package/dist/server/index.d.ts +4 -4
- package/dist/server/index.js +17 -12
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DurableObjectNamespace, SecretsStoreSecret, Workflow } from "@cloudflare/workers-types";
|
|
1
|
+
import type { DurableObjectNamespace, ExecutionContext, SecretsStoreSecret, Workflow } from "@cloudflare/workers-types";
|
|
2
2
|
import { type Scope } from "revojs";
|
|
3
3
|
import type { Awaitable } from "revojs/shared";
|
|
4
4
|
export type ScreamingSnake<Value extends string> = Value extends `${infer Head}${infer Next}${infer Tail}` ? `${Uppercase<Head>}${Head extends Lowercase<Head> ? (Next extends Lowercase<Next> ? "" : "_") : ""}${ScreamingSnake<`${Next}${Tail}`>}` : Uppercase<Value>;
|
|
@@ -11,6 +11,14 @@ export type Workflows = {
|
|
|
11
11
|
export declare function useDurableObjects(scope: Scope): DurableObjects;
|
|
12
12
|
export declare function useWorkflows(scope: Scope): Workflows;
|
|
13
13
|
export declare function resolveSecrets<T extends object>(variables: T): Promise<T>;
|
|
14
|
+
export declare function createEnvironmentScope(variables: object, context?: ExecutionContext): Promise<{
|
|
15
|
+
hooks?: {
|
|
16
|
+
[x: string]: ArrayLike<import("revojs").Hook<any, any>> | undefined;
|
|
17
|
+
} | undefined;
|
|
18
|
+
context?: {
|
|
19
|
+
[x: string]: {} | undefined;
|
|
20
|
+
} | undefined;
|
|
21
|
+
} & Scope>;
|
|
14
22
|
export declare function isSecretsStoreSecret(value: unknown): value is SecretsStoreSecret;
|
|
15
23
|
export interface ReceivedEmail {
|
|
16
24
|
from: string;
|
|
@@ -33,6 +41,7 @@ export interface LocalPlatform {
|
|
|
33
41
|
export interface LocalMigrationOptions {
|
|
34
42
|
reset?: boolean;
|
|
35
43
|
}
|
|
44
|
+
export declare const SECRET_MAX_AGE = 60000;
|
|
36
45
|
export declare const PLATFORM_CONTEXT: import("revojs").Descriptor<Partial<LocalPlatform>>;
|
|
37
46
|
export declare const LOCAL_DIRECTORY = ".wrangler/revojs";
|
|
38
47
|
export declare const LOCAL_STATE = ".wrangler/state";
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import config from "#config/cloudflare";
|
|
2
|
-
import {
|
|
2
|
+
import { WAIT_UNTIL_CONTEXT } from "@revojs/server";
|
|
3
|
+
import { VARIABLE_CONTEXT, createScope, defineContext, defineHook, getContext, setContext, useVariables } from "revojs";
|
|
3
4
|
//#region src/index.ts
|
|
4
5
|
function useDurableObjects(scope) {
|
|
5
6
|
return useVariables(scope);
|
|
@@ -9,21 +10,43 @@ function useWorkflows(scope) {
|
|
|
9
10
|
}
|
|
10
11
|
async function resolveSecrets(variables) {
|
|
11
12
|
const resolved = { ...variables };
|
|
13
|
+
const pending = new Array();
|
|
12
14
|
for (const { binding } of SECRETS) {
|
|
13
15
|
const secret = resolved[binding];
|
|
14
|
-
if (isSecretsStoreSecret(secret))
|
|
15
|
-
resolved[binding] = await secret
|
|
16
|
-
}
|
|
17
|
-
resolved[binding] = void 0;
|
|
18
|
-
}
|
|
16
|
+
if (isSecretsStoreSecret(secret)) pending.push((async () => {
|
|
17
|
+
resolved[binding] = await readSecret(binding, secret);
|
|
18
|
+
})());
|
|
19
19
|
}
|
|
20
|
+
await Promise.all(pending);
|
|
20
21
|
return resolved;
|
|
21
22
|
}
|
|
23
|
+
async function createEnvironmentScope(variables, context) {
|
|
24
|
+
const scope = await createScope({ context: { [VARIABLE_CONTEXT]: await resolveSecrets(variables) } });
|
|
25
|
+
if (context) setContext(scope, WAIT_UNTIL_CONTEXT, (promise) => context.waitUntil(promise));
|
|
26
|
+
return scope;
|
|
27
|
+
}
|
|
28
|
+
async function readSecret(binding, secret) {
|
|
29
|
+
const cached = secretValues.get(binding);
|
|
30
|
+
if (cached && Date.now() - cached.loadedAt < 6e4) return cached.value;
|
|
31
|
+
try {
|
|
32
|
+
const value = await secret.get();
|
|
33
|
+
secretValues.set(binding, {
|
|
34
|
+
value,
|
|
35
|
+
loadedAt: Date.now()
|
|
36
|
+
});
|
|
37
|
+
return value;
|
|
38
|
+
} catch {
|
|
39
|
+
secretValues.delete(binding);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
22
43
|
function isSecretsStoreSecret(value) {
|
|
23
44
|
return typeof value === "object" && value !== null && typeof value.get === "function";
|
|
24
45
|
}
|
|
25
46
|
var EMAIL_RECEIVED_HOOK = defineHook("EMAIL_RECEIVED_HOOK");
|
|
26
47
|
var SECRETS = (typeof config.config === "object" ? config.config.secrets_store_secrets : void 0) ?? [];
|
|
48
|
+
var SECRET_MAX_AGE = 6e4;
|
|
49
|
+
var secretValues = /* @__PURE__ */ new Map();
|
|
27
50
|
var PLATFORM_CONTEXT = defineContext("PLATFORM_CONTEXT");
|
|
28
51
|
var LOCAL_DIRECTORY = ".wrangler/revojs";
|
|
29
52
|
var LOCAL_STATE = ".wrangler/state";
|
|
@@ -123,4 +146,4 @@ function writeLocalConfig() {
|
|
|
123
146
|
return path;
|
|
124
147
|
}
|
|
125
148
|
//#endregion
|
|
126
|
-
export { EMAIL_RECEIVED_HOOK, LOCAL_DIRECTORY, LOCAL_STATE, PLATFORM_CONTEXT, SECRETS, isLocalRuntime, isSecretsStoreSecret, migrateLocalDatabases, resolveSecrets, startLocalPlatform, useDurableObjects, useWorkflows };
|
|
149
|
+
export { EMAIL_RECEIVED_HOOK, LOCAL_DIRECTORY, LOCAL_STATE, PLATFORM_CONTEXT, SECRETS, SECRET_MAX_AGE, createEnvironmentScope, isLocalRuntime, isSecretsStoreSecret, migrateLocalDatabases, resolveSecrets, startLocalPlatform, useDurableObjects, useWorkflows };
|
package/dist/package.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region package.json
|
|
2
2
|
var name = "@revojs/cloudflare";
|
|
3
|
-
var version = "0.
|
|
3
|
+
var version = "0.3.1";
|
|
4
4
|
var repository = {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/tellua/revojs.git"
|
|
@@ -28,11 +28,11 @@ var scripts = {
|
|
|
28
28
|
var dependencies = {
|
|
29
29
|
"@cloudflare/vite-plugin": "^1.63.1",
|
|
30
30
|
"@cloudflare/workers-types": "^5.20261009.1",
|
|
31
|
-
"@revojs/server": "
|
|
32
|
-
"revojs": "
|
|
31
|
+
"@revojs/server": "0.3.1",
|
|
32
|
+
"revojs": "0.3.1",
|
|
33
33
|
"wrangler": "^4.149.0"
|
|
34
34
|
};
|
|
35
|
-
var devDependencies = { "@revojs/tsconfig": "
|
|
35
|
+
var devDependencies = { "@revojs/tsconfig": "0.3.1" };
|
|
36
36
|
var package_default = {
|
|
37
37
|
name,
|
|
38
38
|
version,
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ScheduledEvent } from "@cloudflare/workers-types";
|
|
1
|
+
import { type ExecutionContext, type ScheduledEvent } from "@cloudflare/workers-types";
|
|
2
2
|
export * from "#durable-objects";
|
|
3
3
|
export * from "#entrypoints";
|
|
4
4
|
export * from "#workflows";
|
|
@@ -11,8 +11,8 @@ interface ForwardableEmailMessage {
|
|
|
11
11
|
setReject: (reason: string) => void;
|
|
12
12
|
}
|
|
13
13
|
declare const _default: {
|
|
14
|
-
fetch(request: Request, variables: Cloudflare.Env): Promise<Response | undefined>;
|
|
15
|
-
scheduled(event: ScheduledEvent, variables: Cloudflare.Env): Promise<void>;
|
|
16
|
-
email(message: ForwardableEmailMessage, variables: Cloudflare.Env): Promise<void>;
|
|
14
|
+
fetch(request: Request, variables: Cloudflare.Env, context: ExecutionContext): Promise<Response | undefined>;
|
|
15
|
+
scheduled(event: ScheduledEvent, variables: Cloudflare.Env, context: ExecutionContext): Promise<void>;
|
|
16
|
+
email(message: ForwardableEmailMessage, variables: Cloudflare.Env, context: ExecutionContext): Promise<void>;
|
|
17
17
|
};
|
|
18
18
|
export default _default;
|
package/dist/server/index.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { EMAIL_RECEIVED_HOOK, resolveSecrets } from "../index.js";
|
|
2
|
-
import {
|
|
1
|
+
import { EMAIL_RECEIVED_HOOK, createEnvironmentScope, resolveSecrets } from "../index.js";
|
|
2
|
+
import { SCHEDULE_CONTEXT, WAIT_UNTIL_CONTEXT, createServerScope, invokeWebSocket, isResponse, isWebSocket, sendResponse } from "@revojs/server";
|
|
3
|
+
import { dispatchHook, setContext } from "revojs";
|
|
3
4
|
import "@cloudflare/workers-types";
|
|
4
|
-
import { SCHEDULE_CONTEXT, createServerScope, invokeWebSocket, isResponse, isWebSocket, sendResponse } from "@revojs/server";
|
|
5
5
|
export * from "#durable-objects";
|
|
6
6
|
export * from "#entrypoints";
|
|
7
7
|
export * from "#workflows";
|
|
8
8
|
//#region src/server/index.ts
|
|
9
9
|
var server_default = {
|
|
10
|
-
async fetch(request, variables) {
|
|
10
|
+
async fetch(request, variables, context) {
|
|
11
11
|
const server = await import("#server").then((module) => module.default);
|
|
12
12
|
const scope = await createServerScope(request, await resolveSecrets(variables));
|
|
13
|
+
setContext(scope, WAIT_UNTIL_CONTEXT, (promise) => context.waitUntil(promise));
|
|
13
14
|
const result = await server.fetch(scope);
|
|
14
15
|
if (isResponse(result)) return result;
|
|
15
16
|
if (isWebSocket(result)) {
|
|
@@ -29,7 +30,11 @@ var server_default = {
|
|
|
29
30
|
await invokeWebSocket(result, connection, () => result.message(connection, event.data));
|
|
30
31
|
});
|
|
31
32
|
serverSocket.addEventListener("error", async (event) => {
|
|
32
|
-
|
|
33
|
+
try {
|
|
34
|
+
await result.error(connection, event.error);
|
|
35
|
+
} catch (error) {
|
|
36
|
+
console.error(error);
|
|
37
|
+
}
|
|
33
38
|
});
|
|
34
39
|
serverSocket.addEventListener("close", async (event) => {
|
|
35
40
|
await invokeWebSocket(result, connection, () => result.close(connection, event.code, event.reason));
|
|
@@ -41,14 +46,14 @@ var server_default = {
|
|
|
41
46
|
});
|
|
42
47
|
}
|
|
43
48
|
},
|
|
44
|
-
async scheduled(event, variables) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
async scheduled(event, variables, context) {
|
|
50
|
+
const server = await import("#server").then((module) => module.default);
|
|
51
|
+
const scope = await createEnvironmentScope(variables, context);
|
|
52
|
+
setContext(scope, SCHEDULE_CONTEXT, { when: event.cron });
|
|
53
|
+
await server.schedule(scope);
|
|
49
54
|
},
|
|
50
|
-
async email(message, variables) {
|
|
51
|
-
await dispatchHook(await
|
|
55
|
+
async email(message, variables, context) {
|
|
56
|
+
await dispatchHook(await createEnvironmentScope(variables, context), EMAIL_RECEIVED_HOOK, {
|
|
52
57
|
from: message.from,
|
|
53
58
|
to: message.to,
|
|
54
59
|
headers: message.headers,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revojs/cloudflare",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -31,11 +31,11 @@
|
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@cloudflare/vite-plugin": "^1.63.1",
|
|
33
33
|
"@cloudflare/workers-types": "^5.20261009.1",
|
|
34
|
-
"@revojs/server": "
|
|
35
|
-
"revojs": "
|
|
34
|
+
"@revojs/server": "0.3.1",
|
|
35
|
+
"revojs": "0.3.1",
|
|
36
36
|
"wrangler": "^4.149.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@revojs/tsconfig": "
|
|
39
|
+
"@revojs/tsconfig": "0.3.1"
|
|
40
40
|
}
|
|
41
41
|
}
|