@astrale-os/adapter-cloudflare 0.5.0-beta.2 → 0.5.0-beta.3
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/worker/index.d.ts +13 -2
- package/dist/worker/index.d.ts.map +1 -1
- package/dist/worker/index.js +32 -9
- package/dist/worker/index.js.map +1 -1
- package/package.json +1 -1
- package/src/worker/index.ts +50 -14
package/dist/worker/index.d.ts
CHANGED
|
@@ -25,8 +25,7 @@ export interface CloudflareAdapterBindings {
|
|
|
25
25
|
get(name: string): Fetcher;
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
readonly definition: DomainDefinition<S>;
|
|
28
|
+
interface CloudflareWorkerSharedConfig<Bindings extends CloudflareAdapterBindings, Environment> {
|
|
30
29
|
readonly privateKey: RemoteIdentityInput['privateKey'] | ((bindings: Bindings) => RemoteIdentityInput['privateKey']);
|
|
31
30
|
/** Compose provider bindings into the exact Domain environment once per deployment generation. */
|
|
32
31
|
readonly resolveEnvironment?: (bindings: Bindings) => Environment | Promise<Environment>;
|
|
@@ -35,6 +34,17 @@ export interface CloudflareWorkerConfig<S extends schema.DomainSchema, Bindings
|
|
|
35
34
|
readonly selfBinding?: (bindings: Bindings) => Fetcher | null | undefined;
|
|
36
35
|
readonly routeSubrequest?: (url: URL, bindings: Bindings) => Fetcher | null | undefined;
|
|
37
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Resolve a Domain lazily when its module graph is too expensive for provider startup admission.
|
|
39
|
+
* The adapter resolves at most once concurrently and retries after a rejected resolution.
|
|
40
|
+
*/
|
|
41
|
+
export type CloudflareWorkerConfig<S extends schema.DomainSchema, Bindings extends CloudflareAdapterBindings, Environment> = CloudflareWorkerSharedConfig<Bindings, Environment> & ({
|
|
42
|
+
readonly definition: DomainDefinition<S>;
|
|
43
|
+
readonly resolveDefinition?: never;
|
|
44
|
+
} | {
|
|
45
|
+
readonly definition?: never;
|
|
46
|
+
readonly resolveDefinition: () => DomainDefinition<S> | Promise<DomainDefinition<S>>;
|
|
47
|
+
});
|
|
38
48
|
export interface CloudflareWorker<Environment> {
|
|
39
49
|
fetch(request: Request, environment: Environment, executionContext?: ExecutionContext): Response | Promise<Response>;
|
|
40
50
|
}
|
|
@@ -45,4 +55,5 @@ export interface CloudflareWorker<Environment> {
|
|
|
45
55
|
export declare function cloudflareWorkerEntry<Bindings extends CloudflareAdapterBindings, Environment = Bindings>(): <const S extends schema.DomainSchema>(config: CloudflareWorkerConfig<S, Bindings, Environment>) => CloudflareWorker<Bindings>;
|
|
46
56
|
/** Close an evicted Application before its environment bindings leave the cache. */
|
|
47
57
|
export declare function closeEvictedApplication(application: Pick<Application, 'close'>, now?: () => number): Promise<void>;
|
|
58
|
+
export {};
|
|
48
59
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,iBAAiB,CAAA;AACtE,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAQ,MAAM,MAAM,CAAA;AASlD,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAA;AAE/E,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CACtD;AAED,yEAAyE;AACzE,MAAM,WAAW,yBAAyB;IACxC,2EAA2E;IAC3E,QAAQ,CAAC,wBAAwB,CAAC,EAAE;QAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;QACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAC3B,CAAA;IACD,iFAAiF;IACjF,QAAQ,CAAC,0BAA0B,CAAC,EAAE,MAAM,CAAA;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CACrD;AAED,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"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"}
|
package/dist/worker/index.js
CHANGED
|
@@ -10,7 +10,29 @@ const APPLICATION_CLOSE_TIMEOUT_MS = 5_000;
|
|
|
10
10
|
export function cloudflareWorkerEntry() {
|
|
11
11
|
return function (config) {
|
|
12
12
|
const applications = new Map();
|
|
13
|
-
|
|
13
|
+
let resolvedDefinition = config.definition;
|
|
14
|
+
let pendingDefinition;
|
|
15
|
+
const definitionFor = async () => {
|
|
16
|
+
if (resolvedDefinition !== undefined)
|
|
17
|
+
return resolvedDefinition;
|
|
18
|
+
if (pendingDefinition !== undefined)
|
|
19
|
+
return pendingDefinition;
|
|
20
|
+
const resolve = config.resolveDefinition;
|
|
21
|
+
if (resolve === undefined)
|
|
22
|
+
throw new TypeError('Cloudflare Worker Domain definition is unavailable.');
|
|
23
|
+
const current = Promise.resolve().then(resolve);
|
|
24
|
+
pendingDefinition = current;
|
|
25
|
+
try {
|
|
26
|
+
const definition = await current;
|
|
27
|
+
resolvedDefinition = definition;
|
|
28
|
+
return definition;
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
if (pendingDefinition === current)
|
|
32
|
+
pendingDefinition = undefined;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const applicationFor = async (url, bindings, definition) => {
|
|
14
36
|
const version = deploymentVersion(bindings);
|
|
15
37
|
const key = `${url}\u0000${version}`;
|
|
16
38
|
const cached = applications.get(key);
|
|
@@ -35,17 +57,17 @@ export function cloudflareWorkerEntry() {
|
|
|
35
57
|
const issuerId = issuer.accept(url);
|
|
36
58
|
const host = new HonoApplication();
|
|
37
59
|
host.get('/meta', (context) => context.json({
|
|
38
|
-
origin:
|
|
60
|
+
origin: definition.schema.origin,
|
|
39
61
|
issuer: issuerId,
|
|
40
|
-
schemaRevision:
|
|
62
|
+
schemaRevision: definition.domain.$.revision,
|
|
41
63
|
deploymentVersion: version,
|
|
42
64
|
}));
|
|
43
65
|
const serving = createRemoteApplication({
|
|
44
|
-
definition
|
|
66
|
+
definition,
|
|
45
67
|
environment,
|
|
46
68
|
identity: {
|
|
47
69
|
issuer: issuerId,
|
|
48
|
-
subject:
|
|
70
|
+
subject: definition.schema.origin,
|
|
49
71
|
privateKey: typeof config.privateKey === 'function'
|
|
50
72
|
? config.privateKey(bindings)
|
|
51
73
|
: config.privateKey,
|
|
@@ -55,7 +77,7 @@ export function cloudflareWorkerEntry() {
|
|
|
55
77
|
deployment: {
|
|
56
78
|
bundleHref: `${url}/.well-known/astrale/domain.bundle.json?${deploymentQuery}`,
|
|
57
79
|
endpoint: { http: `${url}/invoke` },
|
|
58
|
-
...(
|
|
80
|
+
...(definition.frontend === undefined
|
|
59
81
|
? {}
|
|
60
82
|
: { frontendBaseHref: url, frontendCacheKey: version }),
|
|
61
83
|
...(config.manifest === undefined ? {} : { manifest: config.manifest }),
|
|
@@ -107,15 +129,16 @@ export function cloudflareWorkerEntry() {
|
|
|
107
129
|
return Object.freeze({
|
|
108
130
|
async fetch(request, bindings, executionContext) {
|
|
109
131
|
const requestUrl = new URL(request.url);
|
|
110
|
-
|
|
111
|
-
|
|
132
|
+
const definition = await definitionFor();
|
|
133
|
+
if (definition.frontend !== undefined) {
|
|
134
|
+
const asset = await frontendAsset(definition, bindings, requestUrl, request);
|
|
112
135
|
if (asset !== undefined)
|
|
113
136
|
return asset;
|
|
114
137
|
}
|
|
115
138
|
const publicUrl = canonicalServingUrl(config.resolveUrl?.(bindings, requestOrigin(requestUrl, request)) ??
|
|
116
139
|
bindings.WORKER_URL ??
|
|
117
140
|
requestOrigin(requestUrl, request));
|
|
118
|
-
const serving = await applicationFor(publicUrl, bindings);
|
|
141
|
+
const serving = await applicationFor(publicUrl, bindings, definition);
|
|
119
142
|
return serving.application.app.fetch(request, serving.environment, executionContext);
|
|
120
143
|
},
|
|
121
144
|
});
|
package/dist/worker/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,MAAM,CAAA;AAE9C,MAAM,2BAA2B,GAAG,CAAC,CAAA;AACrC,MAAM,4BAA4B,GAAG,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/worker/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/worker/index.ts
CHANGED
|
@@ -38,12 +38,7 @@ export interface CloudflareAdapterBindings {
|
|
|
38
38
|
readonly DISPATCHER?: { get(name: string): Fetcher }
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
S extends schema.DomainSchema,
|
|
43
|
-
Bindings extends CloudflareAdapterBindings,
|
|
44
|
-
Environment,
|
|
45
|
-
> {
|
|
46
|
-
readonly definition: DomainDefinition<S>
|
|
41
|
+
interface CloudflareWorkerSharedConfig<Bindings extends CloudflareAdapterBindings, Environment> {
|
|
47
42
|
readonly privateKey:
|
|
48
43
|
| RemoteIdentityInput['privateKey']
|
|
49
44
|
| ((bindings: Bindings) => RemoteIdentityInput['privateKey'])
|
|
@@ -55,6 +50,26 @@ export interface CloudflareWorkerConfig<
|
|
|
55
50
|
readonly routeSubrequest?: (url: URL, bindings: Bindings) => Fetcher | null | undefined
|
|
56
51
|
}
|
|
57
52
|
|
|
53
|
+
/**
|
|
54
|
+
* Resolve a Domain lazily when its module graph is too expensive for provider startup admission.
|
|
55
|
+
* The adapter resolves at most once concurrently and retries after a rejected resolution.
|
|
56
|
+
*/
|
|
57
|
+
export type CloudflareWorkerConfig<
|
|
58
|
+
S extends schema.DomainSchema,
|
|
59
|
+
Bindings extends CloudflareAdapterBindings,
|
|
60
|
+
Environment,
|
|
61
|
+
> = CloudflareWorkerSharedConfig<Bindings, Environment> &
|
|
62
|
+
(
|
|
63
|
+
| {
|
|
64
|
+
readonly definition: DomainDefinition<S>
|
|
65
|
+
readonly resolveDefinition?: never
|
|
66
|
+
}
|
|
67
|
+
| {
|
|
68
|
+
readonly definition?: never
|
|
69
|
+
readonly resolveDefinition: () => DomainDefinition<S> | Promise<DomainDefinition<S>>
|
|
70
|
+
}
|
|
71
|
+
)
|
|
72
|
+
|
|
58
73
|
export interface CloudflareWorker<Environment> {
|
|
59
74
|
fetch(
|
|
60
75
|
request: Request,
|
|
@@ -81,10 +96,30 @@ export function cloudflareWorkerEntry<
|
|
|
81
96
|
config: CloudflareWorkerConfig<S, Bindings, Environment>,
|
|
82
97
|
): CloudflareWorker<Bindings> {
|
|
83
98
|
const applications = new Map<string, CachedApplication<Environment>>()
|
|
99
|
+
let resolvedDefinition: DomainDefinition<S> | undefined = config.definition
|
|
100
|
+
let pendingDefinition: Promise<DomainDefinition<S>> | undefined
|
|
101
|
+
|
|
102
|
+
const definitionFor = async (): Promise<DomainDefinition<S>> => {
|
|
103
|
+
if (resolvedDefinition !== undefined) return resolvedDefinition
|
|
104
|
+
if (pendingDefinition !== undefined) return pendingDefinition
|
|
105
|
+
const resolve = config.resolveDefinition
|
|
106
|
+
if (resolve === undefined)
|
|
107
|
+
throw new TypeError('Cloudflare Worker Domain definition is unavailable.')
|
|
108
|
+
const current = Promise.resolve().then(resolve)
|
|
109
|
+
pendingDefinition = current
|
|
110
|
+
try {
|
|
111
|
+
const definition = await current
|
|
112
|
+
resolvedDefinition = definition
|
|
113
|
+
return definition
|
|
114
|
+
} finally {
|
|
115
|
+
if (pendingDefinition === current) pendingDefinition = undefined
|
|
116
|
+
}
|
|
117
|
+
}
|
|
84
118
|
|
|
85
119
|
const applicationFor = async (
|
|
86
120
|
url: string,
|
|
87
121
|
bindings: Bindings,
|
|
122
|
+
definition: DomainDefinition<S>,
|
|
88
123
|
): Promise<CachedApplication<Environment>> => {
|
|
89
124
|
const version = deploymentVersion(bindings)
|
|
90
125
|
const key = `${url}\u0000${version}`
|
|
@@ -112,18 +147,18 @@ export function cloudflareWorkerEntry<
|
|
|
112
147
|
const host = new HonoApplication()
|
|
113
148
|
host.get('/meta', (context) =>
|
|
114
149
|
context.json({
|
|
115
|
-
origin:
|
|
150
|
+
origin: definition.schema.origin,
|
|
116
151
|
issuer: issuerId,
|
|
117
|
-
schemaRevision:
|
|
152
|
+
schemaRevision: definition.domain.$.revision,
|
|
118
153
|
deploymentVersion: version,
|
|
119
154
|
}),
|
|
120
155
|
)
|
|
121
156
|
const serving: Application<Hono> = createRemoteApplication({
|
|
122
|
-
definition
|
|
157
|
+
definition,
|
|
123
158
|
environment,
|
|
124
159
|
identity: {
|
|
125
160
|
issuer: issuerId,
|
|
126
|
-
subject:
|
|
161
|
+
subject: definition.schema.origin,
|
|
127
162
|
privateKey:
|
|
128
163
|
typeof config.privateKey === 'function'
|
|
129
164
|
? config.privateKey(bindings)
|
|
@@ -134,7 +169,7 @@ export function cloudflareWorkerEntry<
|
|
|
134
169
|
deployment: {
|
|
135
170
|
bundleHref: `${url}/.well-known/astrale/domain.bundle.json?${deploymentQuery}`,
|
|
136
171
|
endpoint: { http: `${url}/invoke` },
|
|
137
|
-
...(
|
|
172
|
+
...(definition.frontend === undefined
|
|
138
173
|
? {}
|
|
139
174
|
: { frontendBaseHref: url, frontendCacheKey: version }),
|
|
140
175
|
...(config.manifest === undefined ? {} : { manifest: config.manifest }),
|
|
@@ -186,8 +221,9 @@ export function cloudflareWorkerEntry<
|
|
|
186
221
|
return Object.freeze({
|
|
187
222
|
async fetch(request: Request, bindings: Bindings, executionContext?: ExecutionContext) {
|
|
188
223
|
const requestUrl = new URL(request.url)
|
|
189
|
-
|
|
190
|
-
|
|
224
|
+
const definition = await definitionFor()
|
|
225
|
+
if (definition.frontend !== undefined) {
|
|
226
|
+
const asset = await frontendAsset(definition, bindings, requestUrl, request)
|
|
191
227
|
if (asset !== undefined) return asset
|
|
192
228
|
}
|
|
193
229
|
const publicUrl = canonicalServingUrl(
|
|
@@ -195,7 +231,7 @@ export function cloudflareWorkerEntry<
|
|
|
195
231
|
bindings.WORKER_URL ??
|
|
196
232
|
requestOrigin(requestUrl, request),
|
|
197
233
|
)
|
|
198
|
-
const serving = await applicationFor(publicUrl, bindings)
|
|
234
|
+
const serving = await applicationFor(publicUrl, bindings, definition)
|
|
199
235
|
return serving.application.app.fetch(request, serving.environment, executionContext)
|
|
200
236
|
},
|
|
201
237
|
})
|