@cloudflare/containers 0.0.28 → 0.0.30
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/README.md +170 -72
- package/dist/lib/container.d.ts +55 -62
- package/dist/lib/container.js +140 -140
- package/dist/lib/container.js.map +1 -1
- package/dist/lib/utils.d.ts +2 -2
- package/dist/lib/utils.js +4 -4
- package/dist/lib/utils.js.map +1 -1
- package/dist/types/index.d.ts +15 -3
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -19,11 +19,12 @@ npm install @cloudflare/containers
|
|
|
19
19
|
## Basic Example
|
|
20
20
|
|
|
21
21
|
```typescript
|
|
22
|
-
import { Container, getRandom } from '@cloudflare/containers';
|
|
22
|
+
import { Container, getContainer, getRandom } from '@cloudflare/containers';
|
|
23
23
|
|
|
24
24
|
export class MyContainer extends Container {
|
|
25
25
|
// Configure default port for the container
|
|
26
26
|
defaultPort = 8080;
|
|
27
|
+
// After 1 minute of no new activity, shutdown the container
|
|
27
28
|
sleepAfter = '1m';
|
|
28
29
|
}
|
|
29
30
|
|
|
@@ -36,16 +37,13 @@ export default {
|
|
|
36
37
|
|
|
37
38
|
if (pathname.startsWith('/specific/')) {
|
|
38
39
|
// In this case, each unique pathname will spawn a new container
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return await stub.fetch(request);
|
|
40
|
+
const container = env.MY_CONTAINER.getByName(pathname);
|
|
41
|
+
return await container.fetch(request);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
// If you want to route to one of many containers (in this case 5),
|
|
48
|
-
// use the getRandom helper
|
|
44
|
+
// Note: this is a temporary method until built-in autoscaling and load balancing are added.
|
|
45
|
+
// If you want to route to one of many containers (in this case 5), use the getRandom helper.
|
|
46
|
+
// This load balances incoming requests across these container instances.
|
|
49
47
|
let container = await getRandom(env.MY_CONTAINER, 5);
|
|
50
48
|
return await container.fetch(request);
|
|
51
49
|
},
|
|
@@ -60,59 +58,97 @@ The `Container` class that extends a container-enbled Durable Object to provide
|
|
|
60
58
|
|
|
61
59
|
#### Properties
|
|
62
60
|
|
|
63
|
-
- `defaultPort
|
|
64
|
-
- `requiredPorts?`: Array of ports that should be checked for availability during container startup. Used by startAndWaitForPorts when no specific ports are provided.
|
|
65
|
-
- `sleepAfter`: How long to keep the container alive without activity (format: number for seconds, or string like "5m", "30s", "1h")
|
|
66
|
-
- `env`: Environment variables to pass to the container (Record<string, string>)
|
|
67
|
-
- `entrypoint?`: Custom entrypoint to override container default (string[])
|
|
68
|
-
- `enableInternet`: Whether to enable internet access for the container (boolean, default: true)
|
|
69
|
-
- Lifecycle methods: `onStart`, `onStop`, `onError`, `onActivityExpired`
|
|
61
|
+
- `defaultPort?`
|
|
70
62
|
|
|
71
|
-
|
|
63
|
+
Optional default port to use when communicating with the container. If this is not set, or you want to target a specific port on your container, you can specify the port with `fetch(switchPort(req, 8080))` or `containerFetch(req, 8080)`.
|
|
72
64
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
65
|
+
- `requiredPorts?`
|
|
66
|
+
|
|
67
|
+
Array of ports that should be checked for availability during container startup. Used by `startAndWaitForPorts` when no specific ports are provided.
|
|
68
|
+
|
|
69
|
+
- `sleepAfter`
|
|
70
|
+
|
|
71
|
+
How long to keep the container alive without activity (format: number for seconds, or string like "5m", "30s", "1h").
|
|
72
|
+
|
|
73
|
+
Defaults to "10m", meaning that after the Container class Durable Object receives no requests for 10 minutes, it will shut down the container.
|
|
74
|
+
|
|
75
|
+
The following properties are used to set defaults when starting the container, but can be overriden on a per-instance basis by passing in values to `startAndWaitForPorts()` or `start()`.
|
|
76
|
+
|
|
77
|
+
- `env?: Record<string, string>`
|
|
78
|
+
|
|
79
|
+
Environment variables to pass to the container when starting up.
|
|
80
|
+
|
|
81
|
+
- `entrypoint?: string[]`
|
|
82
|
+
|
|
83
|
+
Specify an entrypoint to override image default.
|
|
84
|
+
|
|
85
|
+
- `enableInternet: boolean`
|
|
86
|
+
|
|
87
|
+
Whether to enable internet access for the container.
|
|
88
|
+
|
|
89
|
+
Defaults to `true`.
|
|
82
90
|
|
|
83
91
|
#### Methods
|
|
84
92
|
|
|
85
|
-
##### Lifecycle
|
|
93
|
+
##### Lifecycle Hooks
|
|
94
|
+
|
|
95
|
+
These lifecycle methods are automatically called when the container state transitions. Override these methods to use these hooks.
|
|
96
|
+
|
|
97
|
+
See [this example](#http-example-with-lifecycle-hooks).
|
|
98
|
+
|
|
99
|
+
- `onStart()`
|
|
86
100
|
|
|
87
|
-
|
|
101
|
+
Called when container starts successfully.
|
|
88
102
|
|
|
89
|
-
-
|
|
90
|
-
- `onStop()`: Called when container shuts down - override to add custom behavior
|
|
91
|
-
- `onError(error)`: Called when container encounters an error - override to add custom behavior
|
|
92
|
-
- `onActivityExpired()`: Called when the activity is expired - override to add custom behavior, like communicating with the container to see if it should be shutdown.
|
|
103
|
+
- called when states transition from `stopped` -> `running`, `running` -> `healthy`
|
|
93
104
|
|
|
94
|
-
|
|
95
|
-
|
|
105
|
+
- `onStop()`
|
|
106
|
+
|
|
107
|
+
Called when container shuts down.
|
|
108
|
+
|
|
109
|
+
- `onError(error)`
|
|
110
|
+
|
|
111
|
+
Called when container encounters an error, and by default logs and throws the error.
|
|
112
|
+
|
|
113
|
+
- `onActivityExpired()`
|
|
114
|
+
|
|
115
|
+
Called when the activity is expired. The container will run continue to run for some time after the last activity - this length of time is configured by `sleepAfter`.
|
|
116
|
+
By default, this stops the container with a `SIGTERM`, but you can override this behaviour, as with other lifecycle hooks. However, if you don't stop the container here, the activity tracker will be renewed, and this lifecycle hook will be called again when the timer re-expires.
|
|
96
117
|
|
|
97
118
|
##### Container Methods
|
|
98
119
|
|
|
99
|
-
- `fetch(
|
|
100
|
-
|
|
120
|
+
- `fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>`
|
|
121
|
+
|
|
122
|
+
Forwards HTTP requests to the container.
|
|
123
|
+
|
|
124
|
+
If you want to target a specific port on the container, rather than the default port, you should use `switchPort` like so:
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
const container = env.MY_CONTAINER.getByName('id');
|
|
128
|
+
await container.fetch(switchPort(request, 8080));
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Make sure you provide a port with switchPort or specify a port with the `defaultPort` property.
|
|
132
|
+
|
|
133
|
+
You must use `fetch` rather than `containerFetch` if you want to forward websockets.
|
|
134
|
+
|
|
135
|
+
Note that when you call any of the fetch functions, the activity will be automatically renewed (sleepAfter time starts after last activity), and the container will be started if not already running.
|
|
136
|
+
|
|
137
|
+
- `containerFetch(...)`
|
|
138
|
+
|
|
139
|
+
Note: `containerFetch` does not work with websockets.
|
|
140
|
+
|
|
141
|
+
Sends an HTTP request to the container. Supports both standard fetch API signatures:
|
|
101
142
|
|
|
102
143
|
- `containerFetch(request, port?)`: Traditional signature with Request object
|
|
103
144
|
- `containerFetch(url, init?, port?)`: Standard fetch-like signature with URL string/object and RequestInit options
|
|
104
|
-
Either port parameter or defaultPort must be specified.
|
|
105
|
-
When you call any of the fetch functions, the activity will be automatically renewed, and if the container will be started if not already running.
|
|
106
|
-
\*\*Do not use 'containerFetch' when trying to send a Request object with a websocket, until [this issue is addressed](https://github.com/cloudflare/workerd/issues/2319).
|
|
107
|
-
You can overcome this limitation by doing:
|
|
108
|
-
`container.fetch(switchPort(request, port))`
|
|
109
145
|
|
|
110
146
|
- `startAndWaitForPorts(args: StartAndWaitForPortsOptions): Promise<void>`
|
|
111
147
|
|
|
112
148
|
Starts the container and then waits for specified ports to be ready. Prioritises `ports` passed in to the function, then `requiredPorts` if set, then `defaultPort`.
|
|
113
149
|
|
|
114
150
|
```typescript
|
|
115
|
-
|
|
151
|
+
interface StartAndWaitForPortsOptions {
|
|
116
152
|
startOptions?: {
|
|
117
153
|
/** Environment variables to pass to the container */
|
|
118
154
|
envVars?: Record<string, string>;
|
|
@@ -136,17 +172,96 @@ If you don't stop the container here, the activity tracker will be renewed, and
|
|
|
136
172
|
}
|
|
137
173
|
```
|
|
138
174
|
|
|
139
|
-
- `start(
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
-
|
|
175
|
+
- `start(startOptions?: ContainerStartConfigOptions, waitOptions?: WaitOptions)`
|
|
176
|
+
|
|
177
|
+
Starts the container, without waiting for any ports to be ready.
|
|
178
|
+
|
|
179
|
+
You might want to use this instead of `startAndWaitForPorts` if you want to:
|
|
180
|
+
|
|
181
|
+
- Start a container without blocking until a port is available
|
|
182
|
+
- Initialize a container that doesn't expose ports
|
|
183
|
+
- Perform custom port availability checks separately
|
|
184
|
+
|
|
185
|
+
Options:
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
interface ContainerStartConfigOptions {
|
|
189
|
+
/** Environment variables to pass to the container */
|
|
190
|
+
envVars?: Record<string, string>;
|
|
191
|
+
/** Custom entrypoint to override container default */
|
|
192
|
+
entrypoint?: string[];
|
|
193
|
+
/** Whether to enable internet access for the container */
|
|
194
|
+
enableInternet?: boolean;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
interface WaitOptions {
|
|
198
|
+
/** The port number to check for readiness */
|
|
199
|
+
portToCheck: number;
|
|
200
|
+
/** Optional AbortSignal, use this to abort waiting for ports */
|
|
201
|
+
signal?: AbortSignal;
|
|
202
|
+
/** Number of attempts to wait for port to be ready */
|
|
203
|
+
retries?: number;
|
|
204
|
+
/** Time to wait in between polling port for readiness, in milliseconds */
|
|
205
|
+
waitInterval?: number;
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
- `stop(signal = SIGTERM): Promise<void>`
|
|
210
|
+
|
|
211
|
+
Sends the specified signal to the container. Triggers `onStop`.
|
|
212
|
+
|
|
213
|
+
- `destroy(): Promise<void>`
|
|
214
|
+
|
|
215
|
+
Forcefully destroys the container (sends `SIGKILL`). Triggers `onStop`.
|
|
216
|
+
|
|
217
|
+
- `getState(): Promise<State>`
|
|
218
|
+
|
|
219
|
+
Get the current container state.
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
type State = {
|
|
223
|
+
lastChange: number;
|
|
224
|
+
} & (
|
|
225
|
+
| {
|
|
226
|
+
// 'running' means that the container is trying to start and is transitioning to a healthy status.
|
|
227
|
+
// onStop might be triggered if there is an exit code, and it will transition to 'stopped'.
|
|
228
|
+
status: 'running' | 'stopping' | 'stopped' | 'healthy';
|
|
229
|
+
}
|
|
230
|
+
| {
|
|
231
|
+
status: 'stopped_with_code';
|
|
232
|
+
exitCode?: number;
|
|
233
|
+
}
|
|
234
|
+
);
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
- `renewActivityTimeout()`
|
|
238
|
+
|
|
239
|
+
Manually renews the container activity timeout (extends container lifetime).
|
|
240
|
+
|
|
241
|
+
- `schedule<T = string>(when: Date | number, callback: string, payload?: T): Promise<Schedule<T>>`
|
|
242
|
+
|
|
243
|
+
Options:
|
|
244
|
+
|
|
245
|
+
- `when`: When to execute the task (Date object or number of seconds delay)
|
|
246
|
+
- `callback`: Name of the function to call as a string
|
|
247
|
+
- `payload`: Data to pass to the callback
|
|
248
|
+
|
|
249
|
+
Instead of using the default alarm handler, use `schedule()` instead. The default alarm handler is in charge of renewing the container activity and keeping the durable object alive. You can override `alarm()`, but because its functionality is currently vital to managing the container lifecycle, we recommend calling `schedule` to schedule tasks instead.
|
|
146
250
|
|
|
147
251
|
### Utility Functions
|
|
148
252
|
|
|
149
|
-
- `getRandom(binding, instances
|
|
253
|
+
- `getRandom(binding, instances?: number)`
|
|
254
|
+
|
|
255
|
+
Get a random container instances across N instances. This is useful for load balancing.
|
|
256
|
+
Returns a stub for the container.
|
|
257
|
+
See [example](#using-load-balancing).
|
|
258
|
+
|
|
259
|
+
- `getContainer(binding, name?: string)`
|
|
260
|
+
Helper to get a particular container instance stub.
|
|
261
|
+
|
|
262
|
+
e.g. `const container = getContainer(env.CONTAINER, "unique-id")`
|
|
263
|
+
|
|
264
|
+
If no name is provided, "cf-singleton-container" is used.
|
|
150
265
|
|
|
151
266
|
## Examples
|
|
152
267
|
|
|
@@ -196,13 +311,6 @@ export class MyContainer extends Container {
|
|
|
196
311
|
console.log('Container activity timeout extended');
|
|
197
312
|
}
|
|
198
313
|
|
|
199
|
-
// Handle incoming requests
|
|
200
|
-
async fetch(request: Request): Promise<Response> {
|
|
201
|
-
// Default implementation forwards requests to the container
|
|
202
|
-
// This will automatically renew the activity timeout
|
|
203
|
-
return await this.containerFetch(request);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
314
|
// Additional methods can be implemented as needed
|
|
207
315
|
}
|
|
208
316
|
```
|
|
@@ -211,18 +319,16 @@ export class MyContainer extends Container {
|
|
|
211
319
|
|
|
212
320
|
The Container class automatically supports proxying WebSocket connections to your container. WebSocket connections are bi-directionally proxied, with messages forwarded in both directions. The Container also automatically renews the activity timeout when WebSocket messages are sent or received.
|
|
213
321
|
|
|
214
|
-
You can call the `containerFetch` method directly to establish WebSocket connections:
|
|
215
|
-
|
|
216
322
|
```typescript
|
|
217
323
|
// Connect to a WebSocket on port 9000
|
|
218
|
-
const response = await container.
|
|
324
|
+
const response = await container.fetch(switchPort(request, 9000));
|
|
219
325
|
```
|
|
220
326
|
|
|
221
|
-
|
|
327
|
+
Note websockets are not supported with `containerFetch`.
|
|
222
328
|
|
|
223
329
|
### Container Configuration Example
|
|
224
330
|
|
|
225
|
-
You can configure how the container starts by setting the instance properties for environment variables, entrypoint, and network access:
|
|
331
|
+
You can configure defaults for how the container starts by setting the instance properties for environment variables, entrypoint, and network access:
|
|
226
332
|
|
|
227
333
|
```typescript
|
|
228
334
|
import { Container } from '@cloudflare/containers';
|
|
@@ -252,6 +358,8 @@ export class ConfiguredContainer extends Container {
|
|
|
252
358
|
}
|
|
253
359
|
```
|
|
254
360
|
|
|
361
|
+
You can also set these on a per-instance basis with `start` or `startAnbdWaitForPorts`
|
|
362
|
+
|
|
255
363
|
### Multiple Ports and Custom Routing
|
|
256
364
|
|
|
257
365
|
You can create a container that doesn't use a default port and instead routes traffic to different ports based on request path or other factors:
|
|
@@ -414,13 +522,3 @@ export default {
|
|
|
414
522
|
},
|
|
415
523
|
};
|
|
416
524
|
```
|
|
417
|
-
|
|
418
|
-
### Using getContainer
|
|
419
|
-
|
|
420
|
-
This package includes a `getContainer` helper which returns a container instance
|
|
421
|
-
stub.
|
|
422
|
-
|
|
423
|
-
The first argument is the Container's Durable Object namespace. The second argument is
|
|
424
|
-
optional and is a "name" for the Durable Object. This will be used to generate an ID,
|
|
425
|
-
then return a specific Container instance (Durable Object instance). If no second argument
|
|
426
|
-
is given, the name "cf-singleton-container" is used.
|
package/dist/lib/container.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ContainerOptions, ContainerStartOptions, ContainerStartConfigOptions, Schedule, StopParams, State, CancellationOptions, StartAndWaitForPortsOptions } from '../types';
|
|
1
|
+
import type { ContainerOptions, ContainerStartOptions, ContainerStartConfigOptions, Schedule, StopParams, State, WaitOptions, CancellationOptions, StartAndWaitForPortsOptions } from '../types';
|
|
2
2
|
import { DurableObject } from 'cloudflare:workers';
|
|
3
3
|
export type Signal = 'SIGKILL' | 'SIGINT' | 'SIGTERM';
|
|
4
4
|
export type SignalInteger = number;
|
|
@@ -16,81 +16,59 @@ export declare class Container<Env = unknown> extends DurableObject<Env> {
|
|
|
16
16
|
*/
|
|
17
17
|
getState(): Promise<State>;
|
|
18
18
|
/**
|
|
19
|
-
* Start the container if it's not running and set up monitoring
|
|
19
|
+
* Start the container if it's not running and set up monitoring and lifecycle hooks,
|
|
20
|
+
* without waiting for ports to be ready.
|
|
20
21
|
*
|
|
21
|
-
*
|
|
22
|
-
* It will automatically retry if the container fails to start, up to maxTries attempts.
|
|
22
|
+
* It will automatically retry if the container fails to start, using the specified waitOptions
|
|
23
23
|
*
|
|
24
|
-
* It's useful when you need to:
|
|
25
|
-
* - Start a container without blocking until a port is available
|
|
26
|
-
* - Initialize a container that doesn't expose ports
|
|
27
|
-
* - Perform custom port availability checks separately
|
|
28
|
-
*
|
|
29
|
-
* The method applies the container configuration from your instance properties by default, but allows
|
|
30
|
-
* overriding these values for this specific startup:
|
|
31
|
-
* - Environment variables (defaults to this.envVars)
|
|
32
|
-
* - Custom entrypoint commands (defaults to this.entrypoint)
|
|
33
|
-
* - Internet access settings (defaults to this.enableInternet)
|
|
34
|
-
*
|
|
35
|
-
* It also sets up monitoring to track container lifecycle events and automatically
|
|
36
|
-
* calls the onStop handler when the container terminates.
|
|
37
24
|
*
|
|
38
25
|
* @example
|
|
39
|
-
* // Basic usage in a custom Container implementation
|
|
40
|
-
* async customInitialize() {
|
|
41
|
-
* // Start the container without waiting for a port
|
|
42
|
-
* await this.start();
|
|
43
|
-
*
|
|
44
|
-
* // Perform additional initialization steps
|
|
45
|
-
* // that don't require port access
|
|
46
|
-
* }
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* // Start with custom configuration
|
|
50
26
|
* await this.start({
|
|
51
27
|
* envVars: { DEBUG: 'true', NODE_ENV: 'development' },
|
|
52
28
|
* entrypoint: ['npm', 'run', 'dev'],
|
|
53
29
|
* enableInternet: false
|
|
54
30
|
* });
|
|
55
31
|
*
|
|
56
|
-
* @param
|
|
57
|
-
* @param waitOptions - Optional wait configuration with abort signal for cancellation
|
|
32
|
+
* @param startOptions - Override `envVars`, `entrypoint` and `enableInternet` on a per-instance basis
|
|
33
|
+
* @param waitOptions - Optional wait configuration with abort signal for cancellation. Default ~8s timeout.
|
|
58
34
|
* @returns A promise that resolves when the container start command has been issued
|
|
59
35
|
* @throws Error if no container context is available or if all start attempts fail
|
|
60
36
|
*/
|
|
61
|
-
start(
|
|
62
|
-
signal?: AbortSignal;
|
|
63
|
-
}): Promise<void>;
|
|
37
|
+
start(startOptions?: ContainerStartConfigOptions, waitOptions?: WaitOptions): Promise<void>;
|
|
64
38
|
/**
|
|
65
|
-
* Start the container and wait for ports to be available
|
|
39
|
+
* Start the container and wait for ports to be available.
|
|
66
40
|
*
|
|
67
|
-
*
|
|
68
|
-
* 1. Calls start() to ensure the container is running
|
|
69
|
-
* 2. If no ports are specified and requiredPorts is not set, it uses defaultPort (if set)
|
|
70
|
-
* 3. If no ports can be determined, it calls onStart and renewActivityTimeout immediately
|
|
71
|
-
* 4. For each specified port, it polls until the port is available or maxTries is reached
|
|
72
|
-
* 5. When all ports are available, it triggers onStart and renewActivityTimeout
|
|
73
|
-
*
|
|
74
|
-
* The method prioritizes port sources in this order:
|
|
75
|
-
* 1. Ports specified directly in the method call
|
|
76
|
-
* 2. requiredPorts class property (if set)
|
|
77
|
-
* 3. defaultPort (if neither of the above is specified)
|
|
41
|
+
* For each specified port, it polls until the port is available or `cancellationOptions.portReadyTimeoutMS` is reached.
|
|
78
42
|
*
|
|
79
43
|
* @param ports - The ports to wait for (if undefined, uses requiredPorts or defaultPort)
|
|
80
|
-
* @param cancellationOptions
|
|
81
|
-
* @param startOptions Override configuration on a per
|
|
82
|
-
* @
|
|
44
|
+
* @param cancellationOptions - Options to configure timeouts, polling intereva, and abort signal
|
|
45
|
+
* @param startOptions Override configuration on a per-instance basis for env vars, entrypoint command and internet access
|
|
46
|
+
* @returns A promise that resolves when the container has been started and the ports are listening
|
|
47
|
+
* @throws Error if port checks fail after the specified timeout or if the container fails to start.
|
|
83
48
|
*/
|
|
84
49
|
startAndWaitForPorts(args: StartAndWaitForPortsOptions): Promise<void>;
|
|
85
50
|
startAndWaitForPorts(ports?: number | number[], cancellationOptions?: CancellationOptions, startOptions?: ContainerStartConfigOptions): Promise<void>;
|
|
86
51
|
startAndWaitForPorts(portsOrArgs?: number | number[] | StartAndWaitForPortsOptions, cancellationOptions?: CancellationOptions, startOptions?: ContainerStartConfigOptions): Promise<void>;
|
|
87
52
|
/**
|
|
88
|
-
*
|
|
53
|
+
*
|
|
54
|
+
* Waits for a specified port to be ready
|
|
55
|
+
*
|
|
56
|
+
* Returns the number of tries used to get the port, or throws if it couldn't get the port within the specified retry limits.
|
|
57
|
+
*
|
|
58
|
+
* @param waitOptions -
|
|
59
|
+
* - `portToCheck`: The port number to check
|
|
60
|
+
* - `abort`: Optional AbortSignal to cancel waiting
|
|
61
|
+
* - `retries`: Number of retries before giving up (default: TRIES_TO_GET_PORTS)
|
|
62
|
+
* - `waitInterval`: Interval between retries in milliseconds (default: INSTANCE_POLL_INTERVAL_MS)
|
|
63
|
+
*/
|
|
64
|
+
waitForPort(waitOptions: WaitOptions): Promise<number>;
|
|
65
|
+
/**
|
|
66
|
+
* Send a signal to the container.
|
|
89
67
|
* @param signal - The signal to send to the container (default: 15 for SIGTERM)
|
|
90
68
|
*/
|
|
91
69
|
stop(signal?: Signal | SignalInteger): Promise<void>;
|
|
92
70
|
/**
|
|
93
|
-
* Destroys the container
|
|
71
|
+
* Destroys the container with a SIGKILL. Triggers onStop.
|
|
94
72
|
*/
|
|
95
73
|
destroy(): Promise<void>;
|
|
96
74
|
/**
|
|
@@ -106,7 +84,7 @@ export declare class Container<Env = unknown> extends DurableObject<Env> {
|
|
|
106
84
|
onStop(_: StopParams): void | Promise<void>;
|
|
107
85
|
/**
|
|
108
86
|
* Lifecycle method called when the container is running, and the activity timeout
|
|
109
|
-
* expiration has been reached.
|
|
87
|
+
* expiration (set by `sleepAfter`) has been reached.
|
|
110
88
|
*
|
|
111
89
|
* If you want to shutdown the container, you should call this.stop() here
|
|
112
90
|
*
|
|
@@ -127,7 +105,10 @@ export declare class Container<Env = unknown> extends DurableObject<Env> {
|
|
|
127
105
|
*/
|
|
128
106
|
renewActivityTimeout(): void;
|
|
129
107
|
/**
|
|
130
|
-
* Schedule a task to be executed in the future
|
|
108
|
+
* Schedule a task to be executed in the future.
|
|
109
|
+
*
|
|
110
|
+
* We strongly recommend using this instead of the `alarm` handler.
|
|
111
|
+
*
|
|
131
112
|
* @template T Type of the payload data
|
|
132
113
|
* @param when When to execute the task (Date object or number of seconds delay)
|
|
133
114
|
* @param callback Name of the method to call
|
|
@@ -137,26 +118,26 @@ export declare class Container<Env = unknown> extends DurableObject<Env> {
|
|
|
137
118
|
schedule<T = string>(when: Date | number, callback: string, payload?: T): Promise<Schedule<T>>;
|
|
138
119
|
/**
|
|
139
120
|
* Send a request to the container (HTTP or WebSocket) using standard fetch API signature
|
|
140
|
-
* Based on containers-starter-go implementation
|
|
141
121
|
*
|
|
142
|
-
* This method handles HTTP requests to the container.
|
|
143
|
-
*
|
|
122
|
+
* This method handles HTTP requests to the container.
|
|
123
|
+
*
|
|
124
|
+
* WebSocket requests done outside the DO won't work until https://github.com/cloudflare/workerd/issues/2319 is addressed.
|
|
125
|
+
* Until then, please use `switchPort` + `fetch()`.
|
|
144
126
|
*
|
|
145
127
|
* Method supports multiple signatures to match standard fetch API:
|
|
146
128
|
* - containerFetch(request: Request, port?: number)
|
|
147
129
|
* - containerFetch(url: string | URL, init?: RequestInit, port?: number)
|
|
148
130
|
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
* @
|
|
152
|
-
* @returns A Response from the container, or WebSocket connection
|
|
131
|
+
* Starts the container if not already running, and waits for the target port to be ready.
|
|
132
|
+
*
|
|
133
|
+
* @returns A Response from the container
|
|
153
134
|
*/
|
|
154
135
|
containerFetch(requestOrUrl: Request | string | URL, portOrInit?: number | RequestInit, portParam?: number): Promise<Response>;
|
|
155
136
|
/**
|
|
156
|
-
* Handle fetch requests to the Container
|
|
157
|
-
* Default implementation forwards all HTTP and WebSocket requests to the container
|
|
158
|
-
* Override this in your subclass to specify a port or implement custom request handling
|
|
159
137
|
*
|
|
138
|
+
* Fetch handler on the Container class.
|
|
139
|
+
* By default this forwards all requests to the container by calling `containerFetch`.
|
|
140
|
+
* Use `switchPort` to specify which port on the container to target, or this will use `defaultPort`.
|
|
160
141
|
* @param request The request to handle
|
|
161
142
|
*/
|
|
162
143
|
fetch(request: Request): Promise<Response>;
|
|
@@ -171,7 +152,19 @@ export declare class Container<Env = unknown> extends DurableObject<Env> {
|
|
|
171
152
|
*/
|
|
172
153
|
private sql;
|
|
173
154
|
private requestAndPortFromContainerFetchArgs;
|
|
155
|
+
/**
|
|
156
|
+
*
|
|
157
|
+
* The method prioritizes port sources in this order:
|
|
158
|
+
* 1. Ports specified directly in the method call
|
|
159
|
+
* 2. `requiredPorts` class property (if set)
|
|
160
|
+
* 3. `defaultPort` (if neither of the above is specified)
|
|
161
|
+
* 4. Falls back to port 33 if none of the above are set
|
|
162
|
+
*/
|
|
174
163
|
private getPortsToCheck;
|
|
164
|
+
/**
|
|
165
|
+
* Tries to start a container if it's not already running
|
|
166
|
+
* Returns the number of tries used
|
|
167
|
+
*/
|
|
175
168
|
private startContainerIfNotRunning;
|
|
176
169
|
private setupMonitorCallbacks;
|
|
177
170
|
deleteSchedules(name: string): void;
|
package/dist/lib/container.js
CHANGED
|
@@ -20,20 +20,14 @@ const INSTANCE_POLL_INTERVAL_MS = 300; // Default interval for polling container
|
|
|
20
20
|
// Timeout for getting container instance and launching a VM
|
|
21
21
|
// Time to find an instance, attach a DO, call start, but NOT
|
|
22
22
|
// the time for the app the actually start
|
|
23
|
-
const
|
|
23
|
+
const TIMEOUT_TO_GET_CONTAINER_MS = 8_000;
|
|
24
24
|
// Timeout for getting a container instance and launching
|
|
25
25
|
// the actual application and have it listen for specific ports
|
|
26
26
|
// One day might be configurable by the end user in Container class attribute
|
|
27
|
-
const
|
|
28
|
-
// Number of tries based on polling interval
|
|
29
|
-
const TRIES_TO_GET_CONTAINER = Math.ceil((TIMEOUT_TO_GET_CONTAINER_SECONDS * 1000) / INSTANCE_POLL_INTERVAL_MS);
|
|
30
|
-
const TRIES_TO_GET_PORTS = Math.ceil((TIMEOUT_TO_GET_PORTS * 1000) / INSTANCE_POLL_INTERVAL_MS);
|
|
27
|
+
const TIMEOUT_TO_GET_PORTS_MS = 20_000;
|
|
31
28
|
// If user has specified no ports and we need to check one
|
|
32
29
|
// to see if the container is up at all.
|
|
33
30
|
const FALLBACK_PORT_TO_CHECK = 33;
|
|
34
|
-
// Since the timing isn't working, hard coding a max attempts seems
|
|
35
|
-
// to be the only viable solution for now
|
|
36
|
-
const TEMPORARY_HARDCODED_ATTEMPT_MAX = 6;
|
|
37
31
|
const signalToNumbers = {
|
|
38
32
|
SIGINT: 2,
|
|
39
33
|
SIGTERM: 15,
|
|
@@ -222,56 +216,35 @@ export class Container extends DurableObject {
|
|
|
222
216
|
// CONTAINER STARTING
|
|
223
217
|
// ==========================
|
|
224
218
|
/**
|
|
225
|
-
* Start the container if it's not running and set up monitoring
|
|
219
|
+
* Start the container if it's not running and set up monitoring and lifecycle hooks,
|
|
220
|
+
* without waiting for ports to be ready.
|
|
226
221
|
*
|
|
227
|
-
*
|
|
228
|
-
* It will automatically retry if the container fails to start, up to maxTries attempts.
|
|
222
|
+
* It will automatically retry if the container fails to start, using the specified waitOptions
|
|
229
223
|
*
|
|
230
|
-
* It's useful when you need to:
|
|
231
|
-
* - Start a container without blocking until a port is available
|
|
232
|
-
* - Initialize a container that doesn't expose ports
|
|
233
|
-
* - Perform custom port availability checks separately
|
|
234
|
-
*
|
|
235
|
-
* The method applies the container configuration from your instance properties by default, but allows
|
|
236
|
-
* overriding these values for this specific startup:
|
|
237
|
-
* - Environment variables (defaults to this.envVars)
|
|
238
|
-
* - Custom entrypoint commands (defaults to this.entrypoint)
|
|
239
|
-
* - Internet access settings (defaults to this.enableInternet)
|
|
240
|
-
*
|
|
241
|
-
* It also sets up monitoring to track container lifecycle events and automatically
|
|
242
|
-
* calls the onStop handler when the container terminates.
|
|
243
|
-
*
|
|
244
|
-
* @example
|
|
245
|
-
* // Basic usage in a custom Container implementation
|
|
246
|
-
* async customInitialize() {
|
|
247
|
-
* // Start the container without waiting for a port
|
|
248
|
-
* await this.start();
|
|
249
|
-
*
|
|
250
|
-
* // Perform additional initialization steps
|
|
251
|
-
* // that don't require port access
|
|
252
|
-
* }
|
|
253
224
|
*
|
|
254
225
|
* @example
|
|
255
|
-
* // Start with custom configuration
|
|
256
226
|
* await this.start({
|
|
257
227
|
* envVars: { DEBUG: 'true', NODE_ENV: 'development' },
|
|
258
228
|
* entrypoint: ['npm', 'run', 'dev'],
|
|
259
229
|
* enableInternet: false
|
|
260
230
|
* });
|
|
261
231
|
*
|
|
262
|
-
* @param
|
|
263
|
-
* @param waitOptions - Optional wait configuration with abort signal for cancellation
|
|
232
|
+
* @param startOptions - Override `envVars`, `entrypoint` and `enableInternet` on a per-instance basis
|
|
233
|
+
* @param waitOptions - Optional wait configuration with abort signal for cancellation. Default ~8s timeout.
|
|
264
234
|
* @returns A promise that resolves when the container start command has been issued
|
|
265
235
|
* @throws Error if no container context is available or if all start attempts fail
|
|
266
236
|
*/
|
|
267
|
-
async start(
|
|
268
|
-
const portToCheck =
|
|
237
|
+
async start(startOptions, waitOptions) {
|
|
238
|
+
const portToCheck = waitOptions?.portToCheck ??
|
|
239
|
+
this.defaultPort ??
|
|
240
|
+
(this.requiredPorts ? this.requiredPorts[0] : FALLBACK_PORT_TO_CHECK);
|
|
241
|
+
const pollInterval = waitOptions?.waitInterval ?? INSTANCE_POLL_INTERVAL_MS;
|
|
269
242
|
await this.startContainerIfNotRunning({
|
|
270
|
-
|
|
271
|
-
waitInterval:
|
|
272
|
-
retries:
|
|
243
|
+
signal: waitOptions?.signal,
|
|
244
|
+
waitInterval: pollInterval,
|
|
245
|
+
retries: waitOptions?.retries ?? Math.ceil(TIMEOUT_TO_GET_CONTAINER_MS / pollInterval),
|
|
273
246
|
portToCheck,
|
|
274
|
-
},
|
|
247
|
+
}, startOptions);
|
|
275
248
|
this.setupMonitorCallbacks();
|
|
276
249
|
// TODO: We should consider an onHealthy callback
|
|
277
250
|
await this.ctx.blockConcurrencyWhile(async () => {
|
|
@@ -296,85 +269,31 @@ export class Container extends DurableObject {
|
|
|
296
269
|
}
|
|
297
270
|
// Determine which ports to check
|
|
298
271
|
const portsToCheck = await this.getPortsToCheck(ports);
|
|
299
|
-
const state = await this.state.getState();
|
|
300
|
-
// if the container is already healthy and running, assume ports are ready
|
|
301
|
-
if (state.status === 'healthy' && this.container.running) {
|
|
302
|
-
if (this.container.running && !this.monitor) {
|
|
303
|
-
// This is needed to setup the monitoring
|
|
304
|
-
// Start the container if it's not running
|
|
305
|
-
this.monitor = this.container.monitor();
|
|
306
|
-
this.setupMonitorCallbacks();
|
|
307
|
-
}
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
272
|
// trigger all onStop that we didn't do yet
|
|
311
273
|
await this.syncPendingStoppedEvents();
|
|
312
274
|
// Prepare to start the container
|
|
313
275
|
resolvedCancellationOptions ??= {};
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
276
|
+
const containerGetTimeout = resolvedCancellationOptions.instanceGetTimeoutMS ?? TIMEOUT_TO_GET_CONTAINER_MS;
|
|
277
|
+
const pollInterval = resolvedCancellationOptions.waitInterval ?? INSTANCE_POLL_INTERVAL_MS;
|
|
278
|
+
let containerGetRetries = Math.ceil(containerGetTimeout / pollInterval);
|
|
317
279
|
const waitOptions = {
|
|
318
|
-
|
|
280
|
+
signal: resolvedCancellationOptions.abort,
|
|
319
281
|
retries: containerGetRetries,
|
|
320
|
-
waitInterval:
|
|
282
|
+
waitInterval: pollInterval,
|
|
321
283
|
portToCheck: portsToCheck[0],
|
|
322
284
|
};
|
|
323
|
-
const abortedSignal = new Promise(res => {
|
|
324
|
-
waitOptions.abort?.addEventListener('abort', () => {
|
|
325
|
-
res(true);
|
|
326
|
-
});
|
|
327
|
-
});
|
|
328
285
|
// Start the container if it's not running
|
|
329
286
|
const triesUsed = await this.startContainerIfNotRunning(waitOptions, resolvedStartOptions);
|
|
330
287
|
// Check each port
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
: TRIES_TO_GET_PORTS;
|
|
334
|
-
const triesLeft = totalPortReadyTries - triesUsed;
|
|
288
|
+
const totalPortReadyTries = Math.ceil(resolvedCancellationOptions.portReadyTimeoutMS ?? TIMEOUT_TO_GET_PORTS_MS / pollInterval);
|
|
289
|
+
let triesLeft = totalPortReadyTries - triesUsed;
|
|
335
290
|
for (const port of portsToCheck) {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
await tcpPort.fetch('http://ping', { signal: combinedSignal });
|
|
343
|
-
// Successfully connected to this port
|
|
344
|
-
portReady = true;
|
|
345
|
-
console.log(`Port ${port} is ready`);
|
|
346
|
-
}
|
|
347
|
-
catch (e) {
|
|
348
|
-
// Check for specific error messages that indicate we should keep retrying
|
|
349
|
-
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
350
|
-
console.debug(`Error checking ${port}: ${errorMessage}`);
|
|
351
|
-
// If not running, it means the container crashed
|
|
352
|
-
if (!this.container.running) {
|
|
353
|
-
try {
|
|
354
|
-
await this.onError(new Error(`Container crashed while checking for ports, did you setup the entrypoint correctly?`));
|
|
355
|
-
}
|
|
356
|
-
catch { }
|
|
357
|
-
throw e;
|
|
358
|
-
}
|
|
359
|
-
// If we're on the last attempt and the port is still not ready, fail
|
|
360
|
-
if (i === triesLeft - 1) {
|
|
361
|
-
try {
|
|
362
|
-
// TODO: Remove attempts, the end user doesn't care about this
|
|
363
|
-
await this.onError(`Failed to verify port ${port} is available after ${waitOptions.retries} attempts, last error: ${errorMessage}`);
|
|
364
|
-
}
|
|
365
|
-
catch { }
|
|
366
|
-
throw e;
|
|
367
|
-
}
|
|
368
|
-
// Wait a bit before trying again
|
|
369
|
-
await Promise.any([
|
|
370
|
-
new Promise(resolve => setTimeout(resolve, waitOptions.waitInterval)),
|
|
371
|
-
abortedSignal,
|
|
372
|
-
]);
|
|
373
|
-
if (waitOptions.abort?.aborted) {
|
|
374
|
-
throw new Error('Container request timed out.');
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
}
|
|
291
|
+
triesLeft = await this.waitForPort({
|
|
292
|
+
signal: resolvedCancellationOptions.abort,
|
|
293
|
+
waitInterval: pollInterval,
|
|
294
|
+
retries: triesLeft,
|
|
295
|
+
portToCheck: port,
|
|
296
|
+
});
|
|
378
297
|
}
|
|
379
298
|
this.setupMonitorCallbacks();
|
|
380
299
|
await this.ctx.blockConcurrencyWhile(async () => {
|
|
@@ -383,18 +302,85 @@ export class Container extends DurableObject {
|
|
|
383
302
|
await this.onStart();
|
|
384
303
|
});
|
|
385
304
|
}
|
|
305
|
+
/**
|
|
306
|
+
*
|
|
307
|
+
* Waits for a specified port to be ready
|
|
308
|
+
*
|
|
309
|
+
* Returns the number of tries used to get the port, or throws if it couldn't get the port within the specified retry limits.
|
|
310
|
+
*
|
|
311
|
+
* @param waitOptions -
|
|
312
|
+
* - `portToCheck`: The port number to check
|
|
313
|
+
* - `abort`: Optional AbortSignal to cancel waiting
|
|
314
|
+
* - `retries`: Number of retries before giving up (default: TRIES_TO_GET_PORTS)
|
|
315
|
+
* - `waitInterval`: Interval between retries in milliseconds (default: INSTANCE_POLL_INTERVAL_MS)
|
|
316
|
+
*/
|
|
317
|
+
async waitForPort(waitOptions) {
|
|
318
|
+
const port = waitOptions.portToCheck;
|
|
319
|
+
const tcpPort = this.container.getTcpPort(port);
|
|
320
|
+
const abortedSignal = new Promise(res => {
|
|
321
|
+
waitOptions.signal?.addEventListener('abort', () => {
|
|
322
|
+
res(true);
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
const pollInterval = waitOptions.waitInterval ?? INSTANCE_POLL_INTERVAL_MS;
|
|
326
|
+
let tries = waitOptions.retries ?? Math.ceil(TIMEOUT_TO_GET_PORTS_MS / pollInterval);
|
|
327
|
+
// Try to connect to the port multiple times
|
|
328
|
+
for (let i = 0; i < tries; i++) {
|
|
329
|
+
try {
|
|
330
|
+
const combinedSignal = addTimeoutSignal(waitOptions.signal, PING_TIMEOUT_MS);
|
|
331
|
+
await tcpPort.fetch('http://ping', { signal: combinedSignal });
|
|
332
|
+
// Successfully connected to this port
|
|
333
|
+
console.log(`Port ${port} is ready`);
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
catch (e) {
|
|
337
|
+
// Check for specific error messages that indicate we should keep retrying
|
|
338
|
+
const errorMessage = e instanceof Error ? e.message : String(e);
|
|
339
|
+
console.debug(`Error checking ${port}: ${errorMessage}`);
|
|
340
|
+
// If not running, it means the container crashed
|
|
341
|
+
if (!this.container.running) {
|
|
342
|
+
try {
|
|
343
|
+
await this.onError(new Error(`Container crashed while checking for ports, did you start the container and setup the entrypoint correctly?`));
|
|
344
|
+
}
|
|
345
|
+
catch { }
|
|
346
|
+
throw e;
|
|
347
|
+
}
|
|
348
|
+
// If we're on the last attempt and the port is still not ready, fail
|
|
349
|
+
if (i === tries - 1) {
|
|
350
|
+
try {
|
|
351
|
+
await this.onError(`Failed to verify port ${port} is available after ${(i + 1) * pollInterval}ms, last error: ${errorMessage}`);
|
|
352
|
+
}
|
|
353
|
+
catch { }
|
|
354
|
+
throw e;
|
|
355
|
+
}
|
|
356
|
+
// Wait a bit before trying again
|
|
357
|
+
await Promise.any([
|
|
358
|
+
new Promise(resolve => setTimeout(resolve, waitOptions.waitInterval)),
|
|
359
|
+
abortedSignal,
|
|
360
|
+
]);
|
|
361
|
+
if (waitOptions.signal?.aborted) {
|
|
362
|
+
throw new Error('Container request aborted.');
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return tries;
|
|
367
|
+
}
|
|
386
368
|
// =======================
|
|
387
369
|
// LIFECYCLE HOOKS
|
|
388
370
|
// =======================
|
|
389
371
|
/**
|
|
390
|
-
*
|
|
372
|
+
* Send a signal to the container.
|
|
391
373
|
* @param signal - The signal to send to the container (default: 15 for SIGTERM)
|
|
392
374
|
*/
|
|
393
375
|
async stop(signal = 'SIGTERM') {
|
|
376
|
+
if (!this.container.running) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
394
379
|
this.container.signal(typeof signal === 'string' ? signalToNumbers[signal] : signal);
|
|
380
|
+
// await this.syncPendingStoppedEvents();
|
|
395
381
|
}
|
|
396
382
|
/**
|
|
397
|
-
* Destroys the container
|
|
383
|
+
* Destroys the container with a SIGKILL. Triggers onStop.
|
|
398
384
|
*/
|
|
399
385
|
async destroy() {
|
|
400
386
|
await this.container.destroy();
|
|
@@ -416,7 +402,7 @@ export class Container extends DurableObject {
|
|
|
416
402
|
}
|
|
417
403
|
/**
|
|
418
404
|
* Lifecycle method called when the container is running, and the activity timeout
|
|
419
|
-
* expiration has been reached.
|
|
405
|
+
* expiration (set by `sleepAfter`) has been reached.
|
|
420
406
|
*
|
|
421
407
|
* If you want to shutdown the container, you should call this.stop() here
|
|
422
408
|
*
|
|
@@ -451,7 +437,10 @@ export class Container extends DurableObject {
|
|
|
451
437
|
// SCHEDULING
|
|
452
438
|
// ==================
|
|
453
439
|
/**
|
|
454
|
-
* Schedule a task to be executed in the future
|
|
440
|
+
* Schedule a task to be executed in the future.
|
|
441
|
+
*
|
|
442
|
+
* We strongly recommend using this instead of the `alarm` handler.
|
|
443
|
+
*
|
|
455
444
|
* @template T Type of the payload data
|
|
456
445
|
* @param when When to execute the task (Date object or number of seconds delay)
|
|
457
446
|
* @param callback Name of the method to call
|
|
@@ -509,19 +498,19 @@ export class Container extends DurableObject {
|
|
|
509
498
|
// ============
|
|
510
499
|
/**
|
|
511
500
|
* Send a request to the container (HTTP or WebSocket) using standard fetch API signature
|
|
512
|
-
* Based on containers-starter-go implementation
|
|
513
501
|
*
|
|
514
|
-
* This method handles HTTP requests to the container.
|
|
515
|
-
*
|
|
502
|
+
* This method handles HTTP requests to the container.
|
|
503
|
+
*
|
|
504
|
+
* WebSocket requests done outside the DO won't work until https://github.com/cloudflare/workerd/issues/2319 is addressed.
|
|
505
|
+
* Until then, please use `switchPort` + `fetch()`.
|
|
516
506
|
*
|
|
517
507
|
* Method supports multiple signatures to match standard fetch API:
|
|
518
508
|
* - containerFetch(request: Request, port?: number)
|
|
519
509
|
* - containerFetch(url: string | URL, init?: RequestInit, port?: number)
|
|
520
510
|
*
|
|
521
|
-
*
|
|
522
|
-
*
|
|
523
|
-
* @
|
|
524
|
-
* @returns A Response from the container, or WebSocket connection
|
|
511
|
+
* Starts the container if not already running, and waits for the target port to be ready.
|
|
512
|
+
*
|
|
513
|
+
* @returns A Response from the container
|
|
525
514
|
*/
|
|
526
515
|
async containerFetch(requestOrUrl, portOrInit, portParam) {
|
|
527
516
|
// Parse the arguments based on their types to handle different method signatures
|
|
@@ -562,10 +551,10 @@ export class Container extends DurableObject {
|
|
|
562
551
|
}
|
|
563
552
|
}
|
|
564
553
|
/**
|
|
565
|
-
* Handle fetch requests to the Container
|
|
566
|
-
* Default implementation forwards all HTTP and WebSocket requests to the container
|
|
567
|
-
* Override this in your subclass to specify a port or implement custom request handling
|
|
568
554
|
*
|
|
555
|
+
* Fetch handler on the Container class.
|
|
556
|
+
* By default this forwards all requests to the container by calling `containerFetch`.
|
|
557
|
+
* Use `switchPort` to specify which port on the container to target, or this will use `defaultPort`.
|
|
569
558
|
* @param request The request to handle
|
|
570
559
|
*/
|
|
571
560
|
async fetch(request) {
|
|
@@ -635,13 +624,21 @@ export class Container extends DurableObject {
|
|
|
635
624
|
// Create a Request object
|
|
636
625
|
request = new Request(url, init);
|
|
637
626
|
}
|
|
627
|
+
port ??= this.defaultPort;
|
|
638
628
|
// Require a port to be specified, either as a parameter or as a defaultPort property
|
|
639
|
-
if (port === undefined
|
|
629
|
+
if (port === undefined) {
|
|
640
630
|
throw new Error('No port specified for container fetch. Set defaultPort or specify a port parameter.');
|
|
641
631
|
}
|
|
642
|
-
port = port ?? this.defaultPort;
|
|
643
632
|
return { request, port };
|
|
644
633
|
}
|
|
634
|
+
/**
|
|
635
|
+
*
|
|
636
|
+
* The method prioritizes port sources in this order:
|
|
637
|
+
* 1. Ports specified directly in the method call
|
|
638
|
+
* 2. `requiredPorts` class property (if set)
|
|
639
|
+
* 3. `defaultPort` (if neither of the above is specified)
|
|
640
|
+
* 4. Falls back to port 33 if none of the above are set
|
|
641
|
+
*/
|
|
645
642
|
async getPortsToCheck(overridePorts) {
|
|
646
643
|
let portsToCheck = [];
|
|
647
644
|
if (overridePorts !== undefined) {
|
|
@@ -661,8 +658,10 @@ export class Container extends DurableObject {
|
|
|
661
658
|
// ===========================================
|
|
662
659
|
// CONTAINER INTERACTION & MONITORING
|
|
663
660
|
// ===========================================
|
|
664
|
-
|
|
665
|
-
|
|
661
|
+
/**
|
|
662
|
+
* Tries to start a container if it's not already running
|
|
663
|
+
* Returns the number of tries used
|
|
664
|
+
*/
|
|
666
665
|
async startContainerIfNotRunning(waitOptions, options) {
|
|
667
666
|
// Start the container if it's not running
|
|
668
667
|
if (this.container.running) {
|
|
@@ -672,12 +671,14 @@ export class Container extends DurableObject {
|
|
|
672
671
|
return 0;
|
|
673
672
|
}
|
|
674
673
|
const abortedSignal = new Promise(res => {
|
|
675
|
-
waitOptions.
|
|
674
|
+
waitOptions.signal?.addEventListener('abort', () => {
|
|
676
675
|
res(true);
|
|
677
676
|
});
|
|
678
677
|
});
|
|
678
|
+
const pollInterval = waitOptions.waitInterval ?? INSTANCE_POLL_INTERVAL_MS;
|
|
679
|
+
const totalTries = waitOptions.retries ?? Math.ceil(TIMEOUT_TO_GET_CONTAINER_MS / pollInterval);
|
|
679
680
|
await this.state.setRunning();
|
|
680
|
-
for (let tries = 0; tries <
|
|
681
|
+
for (let tries = 0; tries < totalTries; tries++) {
|
|
681
682
|
// Use provided options or fall back to instance properties
|
|
682
683
|
const envVars = options?.envVars ?? this.envVars;
|
|
683
684
|
const entrypoint = options?.entrypoint ?? this.entrypoint;
|
|
@@ -694,7 +695,7 @@ export class Container extends DurableObject {
|
|
|
694
695
|
const handleError = async () => {
|
|
695
696
|
const err = await this.monitor?.catch(err => err);
|
|
696
697
|
if (typeof err === 'number') {
|
|
697
|
-
const toThrow = new Error(`
|
|
698
|
+
const toThrow = new Error(`Container exited before we could determine the container health, exit code: ${err}`);
|
|
698
699
|
try {
|
|
699
700
|
await this.onError(toThrow);
|
|
700
701
|
}
|
|
@@ -709,11 +710,11 @@ export class Container extends DurableObject {
|
|
|
709
710
|
throw err;
|
|
710
711
|
}
|
|
711
712
|
};
|
|
713
|
+
if (tries > 0 && !this.container.running) {
|
|
714
|
+
await handleError();
|
|
715
|
+
}
|
|
716
|
+
await this.scheduleNextAlarm();
|
|
712
717
|
if (!this.container.running) {
|
|
713
|
-
if (tries > 0) {
|
|
714
|
-
await handleError();
|
|
715
|
-
}
|
|
716
|
-
await this.scheduleNextAlarm();
|
|
717
718
|
this.container.start(startConfig);
|
|
718
719
|
this.monitor = this.container.monitor();
|
|
719
720
|
}
|
|
@@ -724,7 +725,7 @@ export class Container extends DurableObject {
|
|
|
724
725
|
// TODO: Make this the port I'm trying to get!
|
|
725
726
|
const port = this.container.getTcpPort(waitOptions.portToCheck);
|
|
726
727
|
try {
|
|
727
|
-
const combinedSignal = addTimeoutSignal(waitOptions.
|
|
728
|
+
const combinedSignal = addTimeoutSignal(waitOptions.signal, PING_TIMEOUT_MS);
|
|
728
729
|
await port.fetch('http://containerstarthealthcheck', { signal: combinedSignal });
|
|
729
730
|
return tries;
|
|
730
731
|
}
|
|
@@ -740,12 +741,11 @@ export class Container extends DurableObject {
|
|
|
740
741
|
new Promise(res => setTimeout(res, waitOptions.waitInterval)),
|
|
741
742
|
abortedSignal,
|
|
742
743
|
]);
|
|
743
|
-
if (waitOptions.
|
|
744
|
+
if (waitOptions.signal?.aborted) {
|
|
744
745
|
throw new Error('Aborted waiting for container to start as we received a cancellation signal');
|
|
745
746
|
}
|
|
746
|
-
// TODO: Don't hardcode to 3, use the max attempts
|
|
747
747
|
// TODO: Make this error specific to this, but then catch it above w something else
|
|
748
|
-
if (
|
|
748
|
+
if (totalTries === tries + 1) {
|
|
749
749
|
if (error instanceof Error && error.message.includes('Network connection lost')) {
|
|
750
750
|
// We have to abort here, the reasoning is that we might've found
|
|
751
751
|
// ourselves in an internal error where the Worker is stuck with a failed connection to the
|
|
@@ -760,7 +760,7 @@ export class Container extends DurableObject {
|
|
|
760
760
|
continue;
|
|
761
761
|
}
|
|
762
762
|
}
|
|
763
|
-
throw new Error(`Container did not start after ${
|
|
763
|
+
throw new Error(`Container did not start after ${totalTries * pollInterval}ms`);
|
|
764
764
|
}
|
|
765
765
|
setupMonitorCallbacks() {
|
|
766
766
|
if (this.monitorSetup) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/lib/container.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,uBAAuB;AACvB,uBAAuB;AACvB,iBAAiB;AACjB,uBAAuB;AACvB,uBAAuB;AAEvB,MAAM,2BAA2B,GAC/B,4EAA4E,CAAC;AAC/E,MAAM,uBAAuB,GAAG,0CAA0C,CAAC;AAC3E,MAAM,qBAAqB,GAAG,6CAA6C,CAAC;AAC5E,MAAM,mBAAmB,GAAG,gCAAgC,CAAC;AAC7D,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAEnD,iEAAiE;AACjE,2FAA2F;AAC3F,6CAA6C;AAC7C,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,sCAAsC;AACzE,MAAM,yBAAyB,GAAG,GAAG,CAAC,CAAC,+CAA+C;AAEtF,4DAA4D;AAC5D,6DAA6D;AAC7D,0CAA0C;AAC1C,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAE3C,yDAAyD;AACzD,+DAA+D;AAC/D,6EAA6E;AAC7E,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEhC,4CAA4C;AAC5C,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CACtC,CAAC,gCAAgC,GAAG,IAAI,CAAC,GAAG,yBAAyB,CACtE,CAAC;AACF,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,yBAAyB,CAAC,CAAC;AAEhG,0DAA0D;AAC1D,wCAAwC;AACxC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,mEAAmE;AACnE,yCAAyC;AACzC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAI1C,MAAM,eAAe,GAAkC;IACrD,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,CAAC;CACX,CAAC;AAEF,wBAAwB;AACxB,wBAAwB;AACxB,qBAAqB;AACrB,wBAAwB;AACxB,wBAAwB;AAExB,0BAA0B;AAE1B,SAAS,aAAa,CAAC,CAAU,EAAE,cAAsB;IACvD,MAAM,WAAW,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAW,EAAE,CACpD,aAAa,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;AACpD,MAAM,uBAAuB,GAAG,CAAC,KAAc,EAAW,EAAE,CAC1D,aAAa,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AAChD,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AACnG,MAAM,2BAA2B,GAAG,CAAC,KAAc,EAAW,EAAE,CAC9D,aAAa,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;AAE9C,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,OAAO;aAClB,WAAW,EAAE;aACb,KAAK,CACJ,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC;YAC1D,uBAAuB,CAAC,MAAM;YAC9B,CAAC,CACJ,CAAC;IACN,CAAC;IAED,IAAI,2BAA2B,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,OAAO;aAClB,WAAW,EAAE;aACb,KAAK,CACJ,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC;YACxD,qBAAqB,CAAC,MAAM;YAC5B,CAAC,CACJ,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,cAAuC,EAAE,SAAiB;IAClF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,gCAAgC;IAChC,IAAI,cAAc,EAAE,OAAO,EAAE,CAAC;QAC5B,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,UAAU,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,cAAc,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IAEpE,cAAc;IACd,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAElE,8CAA8C;IAC9C,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAE3E,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC;AAED,kCAAkC;AAClC,8BAA8B;AAC9B,kCAAkC;AAElC;;;;;;;GAOG;AACH,MAAM,cAAc;IAEE;IADpB,MAAM,CAAS;IACf,YAAoB,OAAwC;QAAxC,YAAO,GAAP,OAAO,CAAiC;IAAG,CAAC;IAEhE,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAAgB;QACvC,IAAI,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC;QAChF,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAQ,mBAAmB,CAAC,CAAC;YACjE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,GAAG;oBACZ,MAAM,EAAE,SAAS;oBACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;iBACvB,CAAC;gBACF,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,MAAO,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,MAAuB;QACtD,IAAI,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACzD,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAQ,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;CACF;AAED,kCAAkC;AAClC,kCAAkC;AAClC,2BAA2B;AAC3B,kCAAkC;AAClC,kCAAkC;AAElC,MAAM,OAAO,SAAyB,SAAQ,aAAkB;IAC9D,4BAA4B;IAC5B,wBAAwB;IACxB,4BAA4B;IAE5B,mEAAmE;IACnE,WAAW,CAAU;IAErB,kFAAkF;IAClF,qEAAqE;IACrE,aAAa,CAAY;IAEzB,8DAA8D;IAC9D,4DAA4D;IAC5D,oEAAoE;IACpE,UAAU,GAAoB,mBAAmB,CAAC;IAElD,qCAAqC;IACrC,2DAA2D;IAC3D,OAAO,GAAiC,EAAE,CAAC;IAC3C,UAAU,CAAsC;IAChD,cAAc,GAA4C,IAAI,CAAC;IAE/D,4BAA4B;IAC5B,uBAAuB;IACvB,4BAA4B;IAE5B,YAAY,GAAyB,EAAE,GAAQ,EAAE,OAA0B;QACzE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEhB,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,mMAAmM,CACpM,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAElD,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,IAAI,EAAE;YACxC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAE5B,wCAAwC;YACxC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAE/B,4BAA4B;QAC5B,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;gBAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YAC9E,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;gBAAE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAC7E,CAAC;QAED,6CAA6C;QAC7C,IAAI,CAAC,GAAG,CAAA;;;;;;;;;;KAUP,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC9C,CAAC;IAED,6BAA6B;IAC7B,yBAAyB;IACzB,6BAA6B;IAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACI,KAAK,CAAC,KAAK,CAChB,OAAqC,EACrC,WAAsC;QAEtC,MAAM,WAAW,GACf,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;QAC5F,MAAM,IAAI,CAAC,0BAA0B,CACnC;YACE,KAAK,EAAE,WAAW,EAAE,MAAM;YAC1B,YAAY,EAAE,yBAAyB;YACvC,OAAO,EAAE,sBAAsB;YAC/B,WAAW;SACZ,EACD,OAAO,CACR,CAAC;QAEF,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,iDAAiD;QACjD,MAAM,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,IAAI,EAAE;YAC9C,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAiCM,KAAK,CAAC,oBAAoB,CAC/B,WAA6D,EAC7D,mBAAyC,EACzC,YAA0C;QAE1C,0DAA0D;QAC1D,IAAI,KAAoC,CAAC;QACzC,IAAI,2BAA2B,GAAoC,EAAE,CAAC;QACtE,IAAI,oBAAoB,GAA4C,EAAE,CAAC;QAEvE,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3F,yEAAyE;YACzE,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;YAC1B,2BAA2B,GAAG,WAAW,CAAC,mBAAmB,CAAC;YAC9D,oBAAoB,GAAG,WAAW,CAAC,YAAY,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,WAAW,CAAC;YACpB,2BAA2B,GAAG,mBAAmB,CAAC;YAClD,oBAAoB,GAAG,YAAY,CAAC;QACtC,CAAC;QAED,iCAAiC;QACjC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAEvD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAE1C,0EAA0E;QAC1E,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACzD,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC5C,yCAAyC;gBACzC,0CAA0C;gBAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACxC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,CAAC;YACD,OAAO;QACT,CAAC;QAED,2CAA2C;QAC3C,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEtC,iCAAiC;QACjC,2BAA2B,KAAK,EAAE,CAAC;QACnC,IAAI,mBAAmB,GAAG,2BAA2B,CAAC,oBAAoB;YACxE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,oBAAoB,GAAG,yBAAyB,CAAC;YACzF,CAAC,CAAC,sBAAsB,CAAC;QAE3B,MAAM,WAAW,GAAG;YAClB,KAAK,EAAE,2BAA2B,CAAC,KAAK;YACxC,OAAO,EAAE,mBAAmB;YAC5B,YAAY,EAAE,2BAA2B,CAAC,YAAY,IAAI,yBAAyB;YACnF,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;SAC7B,CAAC;QAEF,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;YACtC,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBAChD,GAAG,CAAC,IAAI,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,0CAA0C;QAC1C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAE3F,kBAAkB;QAClB,IAAI,mBAAmB,GAAG,2BAA2B,CAAC,kBAAkB;YACtE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,kBAAkB,GAAG,yBAAyB,CAAC;YACvF,CAAC,CAAC,kBAAkB,CAAC;QACvB,MAAM,SAAS,GAAG,mBAAmB,GAAG,SAAS,CAAC;QAElD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,SAAS,GAAG,KAAK,CAAC;YAEtB,4CAA4C;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,IAAI,CAAC;oBACH,MAAM,cAAc,GAAG,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;oBAC5E,MAAM,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;oBAE/D,sCAAsC;oBACtC,SAAS,GAAG,IAAI,CAAC;oBACjB,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC;gBACvC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,0EAA0E;oBAC1E,MAAM,YAAY,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAEhE,OAAO,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,YAAY,EAAE,CAAC,CAAC;oBAEzD,iDAAiD;oBACjD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;wBAC5B,IAAI,CAAC;4BACH,MAAM,IAAI,CAAC,OAAO,CAChB,IAAI,KAAK,CACP,qFAAqF,CACtF,CACF,CAAC;wBACJ,CAAC;wBAAC,MAAM,CAAC,CAAA,CAAC;wBAEV,MAAM,CAAC,CAAC;oBACV,CAAC;oBAED,qEAAqE;oBACrE,IAAI,CAAC,KAAK,SAAS,GAAG,CAAC,EAAE,CAAC;wBACxB,IAAI,CAAC;4BACH,8DAA8D;4BAC9D,MAAM,IAAI,CAAC,OAAO,CAChB,yBAAyB,IAAI,uBAAuB,WAAW,CAAC,OAAO,0BAA0B,YAAY,EAAE,CAChH,CAAC;wBACJ,CAAC;wBAAC,MAAM,CAAC,CAAA,CAAC;wBACV,MAAM,CAAC,CAAC;oBACV,CAAC;oBAED,iCAAiC;oBACjC,MAAM,OAAO,CAAC,GAAG,CAAC;wBAChB,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;wBACrE,aAAa;qBACd,CAAC,CAAC;oBAEH,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;wBAC/B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;oBAClD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,MAAM,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,IAAI,EAAE;YAC9C,sBAAsB;YACtB,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,0BAA0B;IAC1B,sBAAsB;IACtB,0BAA0B;IAE1B;;;OAGG;IACI,KAAK,CAAC,IAAI,CAAC,SAAiC,SAAS;QAC1D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACvF,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO;QAClB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;IAED;;;OAGG;IACI,OAAO;QACZ,sCAAsC;IACxC,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,CAAa;QACzB,sCAAsC;IACxC,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,iBAAiB;QAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACI,OAAO,CAAC,KAAc;QAC3B,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACzC,MAAM,KAAK,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,oBAAoB;QACzB,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QAChE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;IAC/C,CAAC;IAED,qBAAqB;IACrB,iBAAiB;IACjB,qBAAqB;IAErB;;;;;;;OAOG;IACI,KAAK,CAAC,QAAQ,CACnB,IAAmB,EACnB,QAAgB,EAChB,OAAW;QAEX,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAEzB,gDAAgD;QAChD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,2BAA2B;QAC3B,IAAI,OAAO,IAAI,CAAC,QAAsB,CAAC,KAAK,UAAU,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,oBAAoB,CAAC,CAAC;QACxD,CAAC;QAED,iDAAiD;QACjD,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;YACzB,+BAA+B;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAEpD,IAAI,CAAC,GAAG,CAAA;;kBAEI,EAAE,KAAK,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,SAAS;OACjF,CAAC;YAEF,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAE/B,OAAO;gBACL,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,OAAY;gBACrB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW;aAClB,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,kCAAkC;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;YAElD,IAAI,CAAC,GAAG,CAAA;;kBAEI,EAAE,KAAK,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,IAAI,KAAK,IAAI;OACnF,CAAC;YAEF,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAE/B,OAAO;gBACL,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,OAAY;gBACrB,cAAc,EAAE,IAAI;gBACpB,IAAI;gBACJ,IAAI,EAAE,SAAS;aAChB,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IAED,eAAe;IACf,WAAW;IACX,eAAe;IAEf;;;;;;;;;;;;;;;OAeG;IACI,KAAK,CAAC,cAAc,CACzB,YAAoC,EACpC,UAAiC,EACjC,SAAkB;QAElB,iFAAiF;QACjF,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,oCAAoC,CAC/D,YAAY,EACZ,UAAU,EACV,SAAS,CACV,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1D,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACnE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzB,OAAO,IAAI,QAAQ,CACjB,qVAAqV,EACrV,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,QAAQ,CACjB,8BAA8B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAC1E,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAK,CAAC,CAAC;QAEjD,uCAAuC;QACvC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE5D,IAAI,CAAC;YACH,2DAA2D;YAC3D,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,CAAC;YACV,CAAC;YAED,8DAA8D;YAC9D,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;gBACnD,OAAO,IAAI,QAAQ,CAAC,4CAA4C,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACrF,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,uCAAuC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YACxE,OAAO,IAAI,QAAQ,CACjB,wCAAwC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EACpF,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACM,KAAK,CAAC,KAAK,CAAC,OAAgB;QACnC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,KAAK,CACb,+JAA+J,CAChK,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;QAEjC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAAE,CAAC;YACpD,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,EAAE,CAAC,CAAC;YACxF,IAAI,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,eAAe,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,6DAA6D;QAC7D,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;IAED,kCAAkC;IAClC,kCAAkC;IAClC,8BAA8B;IAC9B,kCAAkC;IAClC,kCAAkC;IAElC,6BAA6B;IAC7B,yBAAyB;IACzB,6BAA6B;IAErB,SAAS,CAAiD;IAClE,wEAAwE;IAChE,YAAY,GAAG,KAAK,CAAC;IACrB,KAAK,CAAiB;IACtB,OAAO,CAA+B;IAEtC,YAAY,GAAG,KAAK,CAAC;IAErB,YAAY,GAAG,CAAC,CAAC;IAEzB,6BAA6B;IAC7B,sBAAsB;IACtB,6BAA6B;IAE7B;;OAEG;IACK,GAAG,CACT,OAA6B,EAC7B,GAAG,MAA4C;QAE/C,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,4CAA4C;QAC5C,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAExF,iDAAiD;QACjD,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAQ,CAAC;IACjE,CAAC;IAEO,oCAAoC,CAC1C,YAAoC,EACpC,UAAiC,EACjC,SAAkB;QAElB,IAAI,OAAgB,CAAC;QACrB,IAAI,IAAwB,CAAC;QAE7B,4DAA4D;QAC5D,IAAI,YAAY,YAAY,OAAO,EAAE,CAAC;YACpC,gDAAgD;YAChD,OAAO,GAAG,YAAY,CAAC;YACvB,IAAI,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,+CAA+C;YAC/C,MAAM,GAAG,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YACtF,MAAM,IAAI,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;YACpE,IAAI;gBACF,OAAO,UAAU,KAAK,QAAQ;oBAC5B,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,OAAO,SAAS,KAAK,QAAQ;wBAC7B,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,SAAS,CAAC;YAElB,0BAA0B;YAC1B,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,qFAAqF;QACrF,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;QAEhC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,aAAiC;QAC7D,IAAI,YAAY,GAAa,EAAE,CAAC;QAEhC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,uDAAuD;YACvD,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QAChF,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,gDAAgD;YAChD,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,wCAAwC;YACxC,YAAY,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,sBAAsB,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,8CAA8C;IAC9C,yCAAyC;IACzC,8CAA8C;IAE9C,iDAAiD;IACjD,kCAAkC;IAC1B,KAAK,CAAC,0BAA0B,CACtC,WAAwB,EACxB,OAAqC;QAErC,0CAA0C;QAC1C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC1C,CAAC;YAED,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;YACtC,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBAChD,GAAG,CAAC,IAAI,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;YACzD,2DAA2D;YAC3D,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;YACjD,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;YAC1D,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC;YAEtE,2CAA2C;YAC3C,MAAM,WAAW,GAA0B;gBACzC,cAAc;aACf,CAAC;YAEF,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC;YAC1E,IAAI,UAAU;gBAAE,WAAW,CAAC,UAAU,GAAG,UAAU,CAAC;YAEpD,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;gBAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAY,CAAC,CAAC;gBAE3D,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,MAAM,OAAO,GAAG,IAAI,KAAK,CACvB,wGAAwG,CACzG,CAAC;oBAEF,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC9B,CAAC;oBAAC,MAAM,CAAC,CAAA,CAAC;oBAEV,MAAM,OAAO,CAAC;gBAChB,CAAC;qBAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnC,IAAI,CAAC;wBACH,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC1B,CAAC;oBAAC,MAAM,CAAC,CAAA,CAAC;oBAEV,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACd,MAAM,WAAW,EAAE,CAAC;gBACtB,CAAC;gBAED,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC/B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACjC,CAAC;YAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAE5B,8CAA8C;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAChE,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,gBAAgB,CAAC,WAAW,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;gBAC5E,MAAM,IAAI,CAAC,KAAK,CAAC,kCAAkC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;gBACjF,OAAO,KAAK,CAAC;YACf,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;oBACzD,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1D,MAAM,WAAW,EAAE,CAAC;gBACtB,CAAC;gBAED,OAAO,CAAC,KAAK,CACX,uCAAuC,EACvC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;gBAEF,MAAM,OAAO,CAAC,GAAG,CAAC;oBAChB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;oBAC7D,aAAa;iBACd,CAAC,CAAC;gBAEH,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;oBAC/B,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;gBACJ,CAAC;gBAED,kDAAkD;gBAClD,mFAAmF;gBACnF,IAAI,+BAA+B,KAAK,KAAK,EAAE,CAAC;oBAC9C,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;wBAChF,iEAAiE;wBACjE,2FAA2F;wBAC3F,sBAAsB;wBACtB,EAAE;wBACF,iFAAiF;wBACjF,0DAA0D;wBAC1D,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;oBACnB,CAAC;oBAED,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAC/C,CAAC;gBAED,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CACb,iCAAiC,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,YAAY,IAAI,CACpF,CAAC;IACJ,CAAC;IAEO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO;YACV,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;YAChB,MAAM,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,IAAI,EAAE;gBAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;YAC9B,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,uBAAuB;gBACvB,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBAC9C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,qCAAqC;gBACrC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,OAAO;oBAAE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC;IACP,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,IAAI,CAAC,GAAG,CAAA,oDAAoD,IAAI,EAAE,CAAC;IACrE,CAAC;IAED,+BAA+B;IAC/B,2BAA2B;IAC3B,+BAA+B;IAE/B;;;OAGG;IAEM,KAAK,CAAC,KAAK,CAAC,UAAoD;QACvE,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,UAAU,GAAG,iBAAiB,EAAE,CAAC;YACpE,MAAM,aAAa,GACjB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAA,mDAAmD,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACrF,MAAM,iBAAiB,GAAG,aAAa,GAAG,CAAC,CAAC;YAC5C,IAAI,iBAAiB,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBAChD,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACjC,CAAC;YACD,OAAO;QACT,CAAC;QAED,oEAAoE;QACpE,qDAAqD;QACrD,4CAA4C;QAC5C,qCAAqC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAE9B,gDAAgD;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAMrB;;QAEE,CAAC;QACL,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAEzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAC9B,4BAA4B;QAC5B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,6BAA6B;YAC7B,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;gBACnB,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAsB,CAAC,CAAC;YAClD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAChD,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,QAAQ,iCAAiC,CAAC,CAAC;gBACzE,SAAS;YACX,CAAC;YAED,uCAAuC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE1C,IAAI,CAAC;gBACH,6CAA6C;gBAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAElE,yEAAyE;gBACzE,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,uCAAuC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;YAC5E,CAAC;YAED,2DAA2D;YAC3D,IAAI,CAAC,GAAG,CAAA,8CAA8C,GAAG,CAAC,EAAE,EAAE,CAAC;QACjE,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAM/B;;QAEE,CAAC;QACL,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QAEnF,yCAAyC;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAEtC,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YACxD,CAAC;YAED,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/B,2DAA2D;YAC3D,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,wCAAwC;QACxC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAElD,qDAAqD;QACrD,qBAAqB;QACrB,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBAC5B,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC,EAAE,OAAO,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAE5C,qCAAqC;QACrC,qEAAqE;IACvE,CAAC;IAED,OAAO,CAAiC;IACxC,OAAO,CAAc;IAErB,oFAAoF;IAC5E,KAAK,CAAC,wBAAwB;QACpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1D,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;YACpE,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,YAAwB;QAC/C,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,OAAO,YAAY,OAAO,EAAE,CAAC;YAC/B,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;gBACzB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;QAED,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,iBAAiB,CAAC,EAAE,GAAG,IAAI;QACtC,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEjC,qBAAqB;QACrB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,aAAa,CAAa,IAAY;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAa;2DACmB,IAAI;KAC1D,CAAC;QAEF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA,IAAI,CAAC,UAAa,CAAA,CAAC,CAAC;IACxC,CAAC;IAEO,UAAU,CAAa,QAAqB;QAClD,IAAI,OAAU,CAAC;QACf,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAM,CAAC;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,sCAAsC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YACvE,OAAO,GAAG,SAAyB,CAAC;QACtC,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,EAAE;gBACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,OAAO;gBACP,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,cAAc,EAAE,QAAQ,CAAC,cAAe;aACzC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,EAAE;YACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,OAAO;YACP,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ,CAAC,IAAI;SACpB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAa,EAAU;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAa;qDACa,EAAE;KAClD,CAAC;QAEF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAEO,iBAAiB;QACvB,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACzC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/lib/container.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Container } from './container';
|
|
2
2
|
/**
|
|
3
|
-
* Get a random container instances across N instances
|
|
3
|
+
* Get a random container instances across N instances. This is useful for load balancing.
|
|
4
4
|
* @param binding The Container's Durable Object binding
|
|
5
5
|
* @param instances Number of instances to load balance across
|
|
6
6
|
* @returns A promise resolving to a container stub ready to handle requests
|
|
@@ -13,13 +13,13 @@ export declare function getRandom<T extends Container>(binding: DurableObjectNam
|
|
|
13
13
|
* @returns A promise resolving to a container stub ready to handle requests
|
|
14
14
|
*/
|
|
15
15
|
export declare function loadBalance<T extends Container>(binding: DurableObjectNamespace<T>, instances?: number): Promise<DurableObjectStub<T>>;
|
|
16
|
+
export declare const singletonContainerId = "cf-singleton-container";
|
|
16
17
|
/**
|
|
17
18
|
* Get a container stub
|
|
18
19
|
* @param binding The Container's Durable Object binding
|
|
19
20
|
* @param name The name of the instance to get, uses 'cf-singleton-container' by default
|
|
20
21
|
* @returns A container stub ready to handle requests
|
|
21
22
|
*/
|
|
22
|
-
export declare const singletonContainerId = "cf-singleton-container";
|
|
23
23
|
export declare function getContainer<T extends Container>(binding: DurableObjectNamespace<T>, name?: string): DurableObjectStub<T>;
|
|
24
24
|
/**
|
|
25
25
|
* Return a request with the port target set correctly
|
package/dist/lib/utils.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Get a random container instances across N instances
|
|
2
|
+
* Get a random container instances across N instances. This is useful for load balancing.
|
|
3
3
|
* @param binding The Container's Durable Object binding
|
|
4
4
|
* @param instances Number of instances to load balance across
|
|
5
5
|
* @returns A promise resolving to a container stub ready to handle requests
|
|
@@ -23,15 +23,15 @@ export async function loadBalance(binding, instances = 3) {
|
|
|
23
23
|
console.warn('loadBalance is deprecated, please use getRandom instead. This will be removed in a future version.');
|
|
24
24
|
return getRandom(binding, instances);
|
|
25
25
|
}
|
|
26
|
+
export const singletonContainerId = 'cf-singleton-container';
|
|
26
27
|
/**
|
|
27
28
|
* Get a container stub
|
|
28
29
|
* @param binding The Container's Durable Object binding
|
|
29
30
|
* @param name The name of the instance to get, uses 'cf-singleton-container' by default
|
|
30
31
|
* @returns A container stub ready to handle requests
|
|
31
32
|
*/
|
|
32
|
-
export
|
|
33
|
-
|
|
34
|
-
const objectId = binding.idFromName(name ?? singletonContainerId);
|
|
33
|
+
export function getContainer(binding, name = singletonContainerId) {
|
|
34
|
+
const objectId = binding.idFromName(name);
|
|
35
35
|
return binding.get(objectId);
|
|
36
36
|
}
|
|
37
37
|
/**
|
package/dist/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAkC,EAClC,YAAoB,CAAC;IAErB,qDAAqD;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;IAE5D,gDAAgD;IAChD,wEAAwE;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAEtD,4CAA4C;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAkC,EAClC,YAAoB,CAAC;IAErB,OAAO,CAAC,IAAI,CACV,oGAAoG,CACrG,CAAC;IACF,OAAO,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAkC,EAClC,YAAoB,CAAC;IAErB,qDAAqD;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;IAE5D,gDAAgD;IAChD,wEAAwE;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAEtD,4CAA4C;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAkC,EAClC,YAAoB,CAAC;IAErB,OAAO,CAAC,IAAI,CACV,oGAAoG,CACrG,CAAC;IACF,OAAO,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAC7D;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAkC,EAClC,IAAI,GAAG,oBAAoB;IAE3B,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,OAAgB,EAAE,IAAY;IACvD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzD,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -50,17 +50,29 @@ export interface StartAndWaitForPortsOptions {
|
|
|
50
50
|
ports?: number | number[];
|
|
51
51
|
cancellationOptions?: CancellationOptions;
|
|
52
52
|
}
|
|
53
|
+
/** cancellationOptions for startAndWaitForPorts() */
|
|
53
54
|
export interface CancellationOptions {
|
|
55
|
+
/** abort signal, use to abort startAndWaitForPorts manually. */
|
|
54
56
|
abort?: AbortSignal;
|
|
57
|
+
/** max time to get container instance and start it (application inside may not be ready), in milliseconds */
|
|
55
58
|
instanceGetTimeoutMS?: number;
|
|
59
|
+
/** max time to wait for application to be listening at all specified ports, in milliseconds. */
|
|
56
60
|
portReadyTimeoutMS?: number;
|
|
61
|
+
/** time to wait between polling, in milliseconds */
|
|
57
62
|
waitInterval?: number;
|
|
58
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Options for waitForPort()
|
|
66
|
+
*/
|
|
59
67
|
export interface WaitOptions {
|
|
60
|
-
|
|
61
|
-
retries: number;
|
|
62
|
-
waitInterval: number;
|
|
68
|
+
/** The port number to check for readiness */
|
|
63
69
|
portToCheck: number;
|
|
70
|
+
/** Optional AbortSignal, use this to abort waiting for ports */
|
|
71
|
+
signal?: AbortSignal;
|
|
72
|
+
/** Number of attempts to wait for port to be ready */
|
|
73
|
+
retries?: number;
|
|
74
|
+
/** Time to wait in between polling port for readiness, in milliseconds */
|
|
75
|
+
waitInterval?: number;
|
|
64
76
|
}
|
|
65
77
|
/**
|
|
66
78
|
* Represents a scheduled task within a Container
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudflare/containers",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.30",
|
|
4
4
|
"description": "Helper class for container-enabled Durable Objects",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -11,8 +11,7 @@
|
|
|
11
11
|
"typecheck": "tsc --noEmit",
|
|
12
12
|
"lint": "eslint src --ext .ts,.tsx --config .eslintrc.js",
|
|
13
13
|
"format": "prettier --write \"src/**/*.ts\"",
|
|
14
|
-
"test": "
|
|
15
|
-
"test:watch": "jest --watch"
|
|
14
|
+
"test": "set -e; for fixture in examples/*/; do if [ -d \"$fixture/test\" ] && [ -f \"$fixture/package.json\" ]; then cd \"$fixture\"; npm install; npm run test; cd - > /dev/null; fi; done"
|
|
16
15
|
},
|
|
17
16
|
"exports": {
|
|
18
17
|
".": {
|
|
@@ -44,7 +43,8 @@
|
|
|
44
43
|
"prettier": "^3.5.3",
|
|
45
44
|
"ts-jest": "^29.3.2",
|
|
46
45
|
"tsup": "^8.0.2",
|
|
47
|
-
"typescript": "latest"
|
|
46
|
+
"typescript": "latest",
|
|
47
|
+
"vitest": "^1.0.0"
|
|
48
48
|
},
|
|
49
49
|
"publishConfig": {
|
|
50
50
|
"access": "public"
|