prool 0.2.3 → 0.2.5
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/Instance.d.ts +4 -0
- package/dist/Instance.d.ts.map +1 -1
- package/dist/Instance.js +15 -4
- package/dist/Instance.js.map +1 -1
- package/dist/instances/tempo.d.ts +20 -0
- package/dist/instances/tempo.d.ts.map +1 -1
- package/dist/instances/tempo.js +9 -2
- package/dist/instances/tempo.js.map +1 -1
- package/dist/processes/execa.d.ts.map +1 -1
- package/dist/processes/execa.js +4 -3
- package/dist/processes/execa.js.map +1 -1
- package/dist/testcontainers/Instance.d.ts +2 -1
- package/dist/testcontainers/Instance.d.ts.map +1 -1
- package/dist/testcontainers/Instance.js +13 -8
- package/dist/testcontainers/Instance.js.map +1 -1
- package/dist/testcontainers/containerOptions.d.ts +15 -0
- package/dist/testcontainers/containerOptions.d.ts.map +1 -0
- package/dist/testcontainers/containerOptions.js +7 -0
- package/dist/testcontainers/containerOptions.js.map +1 -0
- package/package.json +1 -1
- package/src/Instance.test.ts +39 -0
- package/src/Instance.ts +14 -4
- package/src/instances/tempo.test.ts +104 -12
- package/src/instances/tempo.ts +29 -6
- package/src/processes/execa.ts +4 -3
- package/src/testcontainers/Instance.test.ts +67 -24
- package/src/testcontainers/Instance.ts +38 -26
- package/src/testcontainers/containerOptions.ts +20 -0
package/dist/Instance.d.ts
CHANGED
|
@@ -101,6 +101,10 @@ export declare namespace define {
|
|
|
101
101
|
type ReturnType<_internal extends object | undefined = object | undefined, parameters = undefined> = (...parameters: parameters extends undefined ? [options?: InstanceOptions] : [parameters: parameters, options?: InstanceOptions]) => Instance<_internal>;
|
|
102
102
|
type InstanceStartOptions_internal = {
|
|
103
103
|
emitter: EventEmitter<EventTypes>;
|
|
104
|
+
setEndpoint?(endpoint: {
|
|
105
|
+
host?: string;
|
|
106
|
+
port?: number;
|
|
107
|
+
}): void;
|
|
104
108
|
status: Instance['status'];
|
|
105
109
|
};
|
|
106
110
|
type InstanceStopOptions_internal = {
|
package/dist/Instance.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../src/Instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE5C,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAC1D,SAAS,EAAE,EAAE,CAAA;IACb,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC1B,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACzB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,QAAQ,CAClB,SAAS,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IACvD,IAAI,CACN,YAAY,CAAC,UAAU,CAAC,EACtB,aAAa,GACb,KAAK,GACL,IAAI,GACJ,MAAM,GACN,oBAAoB,GACpB,gBAAgB,CACnB,GAAG;IACF,SAAS,EAAE,SAAS,CAAA;IACpB;;OAEG;IACH,MAAM,CACJ,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,GACrD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAA;IACtC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;OAMG;IACH,QAAQ,EAAE;QAAE,KAAK,IAAI,IAAI,CAAC;QAAC,GAAG,IAAI,MAAM,EAAE,CAAA;KAAE,CAAA;IAC5C;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB;;;;OAIG;IACH,MAAM,EACF,MAAM,GACN,YAAY,GACZ,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,CAAA;IACd;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;IAC5B;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,MAAM,CACpB,SAAS,SAAS,MAAM,GAAG,SAAS,EACpC,UAAU,GAAG,SAAS,EAEtB,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GACzC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../src/Instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE5C,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAC1D,SAAS,EAAE,EAAE,CAAA;IACb,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC1B,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACzB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,QAAQ,CAClB,SAAS,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IACvD,IAAI,CACN,YAAY,CAAC,UAAU,CAAC,EACtB,aAAa,GACb,KAAK,GACL,IAAI,GACJ,MAAM,GACN,oBAAoB,GACpB,gBAAgB,CACnB,GAAG;IACF,SAAS,EAAE,SAAS,CAAA;IACpB;;OAEG;IACH,MAAM,CACJ,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,GACrD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAA;IACtC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;OAMG;IACH,QAAQ,EAAE;QAAE,KAAK,IAAI,IAAI,CAAC;QAAC,GAAG,IAAI,MAAM,EAAE,CAAA;KAAE,CAAA;IAC5C;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB;;;;OAIG;IACH,MAAM,EACF,MAAM,GACN,YAAY,GACZ,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,CAAA;IACd;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;IAC5B;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wFAAwF;IACxF,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,MAAM,CACpB,SAAS,SAAS,MAAM,GAAG,SAAS,EACpC,UAAU,GAAG,SAAS,EAEtB,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GACzC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CA2K1C;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAY,QAAQ,CAClB,UAAU,EACV,SAAS,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,IACvD,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG;QACzE,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;QACjC,KAAK,CACH,OAAO,EAAE,oBAAoB,EAC7B,gBAAgB,EAAE,6BAA6B,GAC9C,OAAO,CAAC,IAAI,CAAC,CAAA;QAChB,IAAI,CAAC,gBAAgB,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KACpE,CAAA;IAED,KAAY,UAAU,CACpB,SAAS,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EACzD,UAAU,GAAG,SAAS,IACpB,CACF,GAAG,UAAU,EAAE,UAAU,SAAS,SAAS,GACvC,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,GAC3B,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,KACpD,QAAQ,CAAC,SAAS,CAAC,CAAA;IAExB,KAAY,6BAA6B,GAAG;QAC1C,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,CAAA;QACjC,WAAW,CAAC,CAAC,QAAQ,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;QAC9D,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;KAC3B,CAAA;IAED,KAAY,4BAA4B,GAAG;QACzC,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,CAAA;QACjC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;KAC3B,CAAA;IAED,KAAY,oBAAoB,GAAG;QACjC;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACF"}
|
package/dist/Instance.js
CHANGED
|
@@ -30,11 +30,12 @@ export function define(fn) {
|
|
|
30
30
|
const parameters = parametersOrOptions;
|
|
31
31
|
const options = options_ || parametersOrOptions || {};
|
|
32
32
|
const instance = fn(parameters);
|
|
33
|
-
const { _internal,
|
|
33
|
+
const { _internal, name, start, stop } = {
|
|
34
34
|
...instance,
|
|
35
35
|
...createParameters,
|
|
36
|
-
port: createParameters.port ?? instance.port,
|
|
37
36
|
};
|
|
37
|
+
let host = instance.host;
|
|
38
|
+
let port = createParameters?.port ?? instance.port;
|
|
38
39
|
const { messageBuffer = 20, timeout } = options;
|
|
39
40
|
let restartResolver = Promise.withResolvers();
|
|
40
41
|
let startResolver = Promise.withResolvers();
|
|
@@ -64,9 +65,13 @@ export function define(fn) {
|
|
|
64
65
|
return messages;
|
|
65
66
|
},
|
|
66
67
|
},
|
|
67
|
-
host
|
|
68
|
+
get host() {
|
|
69
|
+
return host;
|
|
70
|
+
},
|
|
68
71
|
name,
|
|
69
|
-
port
|
|
72
|
+
get port() {
|
|
73
|
+
return port;
|
|
74
|
+
},
|
|
70
75
|
get status() {
|
|
71
76
|
if (restarting)
|
|
72
77
|
return 'restarting';
|
|
@@ -91,6 +96,12 @@ export function define(fn) {
|
|
|
91
96
|
port,
|
|
92
97
|
}, {
|
|
93
98
|
emitter,
|
|
99
|
+
setEndpoint(endpoint) {
|
|
100
|
+
if (endpoint.host)
|
|
101
|
+
host = endpoint.host;
|
|
102
|
+
if (endpoint.port)
|
|
103
|
+
port = endpoint.port;
|
|
104
|
+
},
|
|
94
105
|
status: this.status,
|
|
95
106
|
})
|
|
96
107
|
.then(() => {
|
package/dist/Instance.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Instance.js","sourceRoot":"","sources":["../src/Instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAqF5C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,MAAM,CAIpB,EAA0C;IAE1C,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC,EAAE,EAAE;QAC5C,SAAS,MAAM,CAAC,mBAAsD,EAAE;YACtE,MAAM,UAAU,GAAG,mBAAiC,CAAA;YACpD,MAAM,OAAO,GAAG,QAAQ,IAAI,mBAAmB,IAAI,EAAE,CAAA;YAErD,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,CAAA;YAC/B,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"Instance.js","sourceRoot":"","sources":["../src/Instance.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,16 @@ export declare const tempo: Instance.define.ReturnType<{
|
|
|
52
52
|
* Amount for each faucet funding transaction
|
|
53
53
|
*/
|
|
54
54
|
amount?: bigint | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Whether the faucet is enabled
|
|
57
|
+
* @default true
|
|
58
|
+
*/
|
|
59
|
+
enabled?: boolean | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Node RPC address the faucet submits funding transactions to
|
|
62
|
+
* @default `http://localhost:${port}`
|
|
63
|
+
*/
|
|
64
|
+
nodeAddress?: string | undefined;
|
|
55
65
|
/**
|
|
56
66
|
* Faucet funding mnemonic
|
|
57
67
|
*/
|
|
@@ -117,6 +127,16 @@ export declare namespace tempo {
|
|
|
117
127
|
* Amount for each faucet funding transaction
|
|
118
128
|
*/
|
|
119
129
|
amount?: bigint | undefined;
|
|
130
|
+
/**
|
|
131
|
+
* Whether the faucet is enabled
|
|
132
|
+
* @default true
|
|
133
|
+
*/
|
|
134
|
+
enabled?: boolean | undefined;
|
|
135
|
+
/**
|
|
136
|
+
* Node RPC address the faucet submits funding transactions to
|
|
137
|
+
* @default `http://localhost:${port}`
|
|
138
|
+
*/
|
|
139
|
+
nodeAddress?: string | undefined;
|
|
120
140
|
/**
|
|
121
141
|
* Faucet funding mnemonic
|
|
122
142
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../src/instances/tempo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAI1C,wBAAgB,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../src/instances/tempo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAI1C,wBAAgB,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,MAAM,EAAE,CA4D9D;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK;;;QAqEd;;WAEG;oBACS,MAAM,GAAG,SAAS;QAC9B;;WAEG;+BACoB,MAAM,GAAG,SAAS;QACzC;;WAEG;iBACM,MAAM,GAAG,SAAS;QAC3B;;;;;;;;WAQG;gBACK,MAAM,GAAG,SAAS;QAC1B;;WAEG;kBACO,MAAM,GAAG,SAAS;QAC5B;;WAEG;iBAEC;YACE;;eAEG;YACH,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;YAChC;;eAEG;YACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAC3B;;;eAGG;YACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;YAC7B;;;eAGG;YACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAChC;;eAEG;YACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAChC,GACD,SAAS;QAcb;;WAEG;eACI,MAAM,GAAG,SAAS;QACzB;;;WAGG;mBACQ,MAAM,GAAG,SAAS;QAC7B;;WAEG;eACI,MAAM,GAAG,SAAS;;;yCAxF3B,CAAA;AAEF,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAY,UAAU,GAAG;QACvB;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B;;WAEG;QACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B;;WAEG;QACH,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzC;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B;;;;;;;;WAQG;QACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B;;WAEG;QACH,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B;;WAEG;QACH,MAAM,CAAC,EACH;YACE;;eAEG;YACH,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;YAChC;;eAEG;YACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAC3B;;;eAGG;YACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;YAC7B;;;eAGG;YACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;YAChC;;eAEG;YACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAChC,GACD,SAAS,CAAA;QACb;;;WAGG;QACH,GAAG,CAAC,EACA,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,CAAC,MAAM,GAAG,EAAE,CAAC,GACb,OAAO,GACP,SAAS,CAAA;QACb;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;;WAGG;QACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC5B"}
|
package/dist/instances/tempo.js
CHANGED
|
@@ -45,9 +45,15 @@ export function command(parameters) {
|
|
|
45
45
|
port: port + 20,
|
|
46
46
|
},
|
|
47
47
|
};
|
|
48
|
+
const args = deepAssign(defaultParameters, rest);
|
|
49
|
+
// Faucet submits funding transactions over RPC; point it at the resolved http port (node default: 8545).
|
|
50
|
+
const faucet = args['faucet'];
|
|
51
|
+
const http = args['http'];
|
|
52
|
+
if (faucet?.enabled && !faucet.nodeAddress)
|
|
53
|
+
faucet.nodeAddress = `http://localhost:${http.port}`;
|
|
48
54
|
return [
|
|
49
55
|
'node',
|
|
50
|
-
...toArgs(
|
|
56
|
+
...toArgs(args, {
|
|
51
57
|
arraySeparator: null,
|
|
52
58
|
}),
|
|
53
59
|
];
|
|
@@ -99,7 +105,8 @@ export const tempo = Instance.define((parameters) => {
|
|
|
99
105
|
const message = data.toString();
|
|
100
106
|
if (log)
|
|
101
107
|
console.log(message);
|
|
102
|
-
if (message.includes('Received new payload from consensus engine') ||
|
|
108
|
+
if (message.includes('Received new payload from consensus engine') ||
|
|
109
|
+
message.includes('Received block from consensus engine'))
|
|
103
110
|
resolve();
|
|
104
111
|
if (message.includes('shutting down'))
|
|
105
112
|
reject('shutting down');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tempo.js","sourceRoot":"","sources":["../../src/instances/tempo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAE7C,MAAM,UAAU,OAAO,CAAC,UAA4B;IAClD,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAChE,UAAU,CAAA;IAEZ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC,CAAA;IACjE,MAAM,iBAAiB,GAAG;QACxB,OAAO,EAAE;YACP,IAAI,EAAE,IAAK,GAAG,EAAE;SACjB;QACD,OAAO;QACP,GAAG,EAAE;YACH,IAAI;YACJ;gBACE,SAAS,EAAE,SAAS,IAAI,MAAM;gBAC9B,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClC;SACF;QACD,MAAM,EAAE;YACN,sBAAsB,EAAE,IAAI;YAC5B,eAAe,EAAE,IAAI;SACtB;QACD,MAAM,EAAE;YACN,OAAO,EAAE;gBACP,4CAA4C;gBAC5C,4CAA4C;gBAC5C,4CAA4C;gBAC5C,4CAA4C;aAC7C;YACD,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,IAAI;YACb,UAAU,EACR,oEAAoE;SACvE;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,KAAK;YACV,UAAU,EAAE,GAAG;YACf,IAAI,EAAE,IAAK;SACZ;QACD,IAAI,EAAE,IAAK,GAAG,EAAE;QAChB,EAAE,EAAE;YACF,IAAI,EAAE,IAAK,GAAG,EAAE;SACjB;KACF,CAAA;IAED,
|
|
1
|
+
{"version":3,"file":"tempo.js","sourceRoot":"","sources":["../../src/instances/tempo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execa.d.ts","sourceRoot":"","sources":["../../src/processes/execa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAG/C,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAE9E,MAAM,MAAM,iBAAiB,GAC3B,QAAQ,CAAC,MAAM,CAAC,6BAA6B,GAAG;IAC9C,QAAQ,CAAC,OAAO,EAAE;QAChB,OAAO,EAAE,gBAAgB,CAAA;QACzB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACnC,OAAO,IAAI,IAAI,CAAA;KAChB,GAAG,IAAI,CAAA;CACT,CAAA;AAEH,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE;QACT,OAAO,EAAE,gBAAgB,CAAA;KAC1B,CAAA;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CACH,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,IAAI,KAAK,IAAI,EACjC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7D,CAAA;AAED,wBAAgB,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"execa.d.ts","sourceRoot":"","sources":["../../src/processes/execa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAG/C,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAE9E,MAAM,MAAM,iBAAiB,GAC3B,QAAQ,CAAC,MAAM,CAAC,6BAA6B,GAAG;IAC9C,QAAQ,CAAC,OAAO,EAAE;QAChB,OAAO,EAAE,gBAAgB,CAAA;QACzB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACnC,OAAO,IAAI,IAAI,CAAA;KAChB,GAAG,IAAI,CAAA;CACT,CAAA;AAEH,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE;QACT,OAAO,EAAE,gBAAgB,CAAA;KAC1B,CAAA;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CACH,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,IAAI,KAAK,IAAI,EACjC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7D,CAAA;AAED,wBAAgB,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAoFpE;AAED,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAY,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAEzC,KAAY,UAAU,GAAG,OAAO,CAAA;CACjC"}
|
package/dist/processes/execa.js
CHANGED
|
@@ -5,10 +5,11 @@ export function execa(parameters) {
|
|
|
5
5
|
const errorMessages = [];
|
|
6
6
|
let process;
|
|
7
7
|
async function stop(signal) {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
process.kill(signal);
|
|
9
|
+
// Process may have exited on its own; 'exit' will not re-fire.
|
|
10
|
+
if (process.exitCode !== null || process.signalCode !== null)
|
|
10
11
|
return;
|
|
11
|
-
return new Promise((resolve) => process.
|
|
12
|
+
return new Promise((resolve) => process.once('exit', resolve));
|
|
12
13
|
}
|
|
13
14
|
return {
|
|
14
15
|
_internal: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execa.js","sourceRoot":"","sources":["../../src/processes/execa.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,IAAI,EAAsB,MAAM,OAAO,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAyBlD,MAAM,UAAU,KAAK,CAAC,UAA4B;IAChD,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAA;IAE3B,MAAM,aAAa,GAAa,EAAE,CAAA;IAClC,IAAI,OAAyB,CAAA;IAE7B,KAAK,UAAU,IAAI,CAAC,MAAuC;QACzD,
|
|
1
|
+
{"version":3,"file":"execa.js","sourceRoot":"","sources":["../../src/processes/execa.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as Instance from '../Instance.js';
|
|
2
2
|
import { type tempo as core_tempo } from '../instances/tempo.js';
|
|
3
|
+
import * as ContainerOptions from './containerOptions.js';
|
|
3
4
|
export type { Instance, InstanceOptions } from '../Instance.js';
|
|
4
5
|
/**
|
|
5
6
|
* Defines a Tempo instance.
|
|
@@ -26,7 +27,7 @@ export declare const tempo: Instance.define.ReturnType<{
|
|
|
26
27
|
};
|
|
27
28
|
}, tempo.Parameters | undefined>;
|
|
28
29
|
export declare namespace tempo {
|
|
29
|
-
type Parameters = Omit<core_tempo.Parameters, 'binary'> & {
|
|
30
|
+
type Parameters = Omit<core_tempo.Parameters, 'binary'> & ContainerOptions.Parameters & {
|
|
30
31
|
/**
|
|
31
32
|
* Name of the container.
|
|
32
33
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../../src/testcontainers/Instance.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAW,KAAK,KAAK,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../../src/testcontainers/Instance.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAW,KAAK,KAAK,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AAEzD,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE/D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK;;;QAoGZ;;WAEG;eACI,MAAM,GAAG,SAAS;QACzB;;WAEG;eACI,MAAM,GAAG,SAAS;;gCApB7B,CAAA;AAEF,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,KAAY,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,GAC5D,gBAAgB,CAAC,UAAU,GAAG;QAC5B;;WAEG;QACH,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAClC;;WAEG;QACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACJ"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { GenericContainer, PullPolicy, Wait, } from 'testcontainers';
|
|
2
2
|
import * as Instance from '../Instance.js';
|
|
3
3
|
import { command } from '../instances/tempo.js';
|
|
4
|
+
import * as ContainerOptions from './containerOptions.js';
|
|
4
5
|
/**
|
|
5
6
|
* Defines a Tempo instance.
|
|
6
7
|
*
|
|
@@ -13,7 +14,7 @@ import { command } from '../instances/tempo.js';
|
|
|
13
14
|
* ```
|
|
14
15
|
*/
|
|
15
16
|
export const tempo = Instance.define((parameters) => {
|
|
16
|
-
const { containerName = `tempo.${crypto.randomUUID()}`, image = 'ghcr.io/tempoxyz/tempo:latest', log: log_, ...args } = parameters || {};
|
|
17
|
+
const { containerName = `tempo.${crypto.randomUUID()}`, image = 'ghcr.io/tempoxyz/tempo:latest', log: log_, startupTimeout, ...args } = parameters || {};
|
|
17
18
|
const log = (() => {
|
|
18
19
|
try {
|
|
19
20
|
return JSON.parse(log_);
|
|
@@ -32,19 +33,19 @@ export const tempo = Instance.define((parameters) => {
|
|
|
32
33
|
host: args.host ?? 'localhost',
|
|
33
34
|
name,
|
|
34
35
|
port: args.port ?? 8545,
|
|
35
|
-
async start({ port = args.port }, { emitter }) {
|
|
36
|
+
async start({ port = args.port }, { emitter, setEndpoint }) {
|
|
36
37
|
const promise = Promise.withResolvers();
|
|
38
|
+
const containerPort = port ?? 8545;
|
|
37
39
|
const c = new GenericContainer(image)
|
|
38
40
|
.withPullPolicy(PullPolicy.alwaysPull())
|
|
39
41
|
.withPlatform('linux/x86_64')
|
|
40
|
-
.
|
|
42
|
+
.withExposedPorts(containerPort)
|
|
41
43
|
.withExtraHosts([
|
|
42
44
|
{ host: 'host.docker.internal', ipAddress: 'host-gateway' },
|
|
43
|
-
{ host: 'localhost', ipAddress: 'host-gateway' },
|
|
44
45
|
])
|
|
45
46
|
.withName(containerName)
|
|
46
47
|
.withEnvironment({ RUST_LOG })
|
|
47
|
-
.withCommand(command({ ...args, port }))
|
|
48
|
+
.withCommand(command({ ...args, port: containerPort }))
|
|
48
49
|
.withWaitStrategy(Wait.forLogMessage(/Received (block|new payload) from consensus engine/))
|
|
49
50
|
.withLogConsumer((stream) => {
|
|
50
51
|
stream.on('data', (data) => {
|
|
@@ -64,10 +65,14 @@ export const tempo = Instance.define((parameters) => {
|
|
|
64
65
|
promise.reject(new Error(`Failed to start: ${error.message}`));
|
|
65
66
|
});
|
|
66
67
|
})
|
|
67
|
-
.withStartupTimeout(
|
|
68
|
+
.withStartupTimeout(ContainerOptions.resolveStartupTimeout(startupTimeout));
|
|
68
69
|
c.start()
|
|
69
|
-
.then((
|
|
70
|
-
container =
|
|
70
|
+
.then((started) => {
|
|
71
|
+
container = started;
|
|
72
|
+
setEndpoint?.({
|
|
73
|
+
host: started.getHost(),
|
|
74
|
+
port: started.getMappedPort(containerPort),
|
|
75
|
+
});
|
|
71
76
|
promise.resolve();
|
|
72
77
|
})
|
|
73
78
|
.catch(promise.reject);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Instance.js","sourceRoot":"","sources":["../../src/testcontainers/Instance.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,UAAU,EAEV,IAAI,GACL,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAA4B,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"Instance.js","sourceRoot":"","sources":["../../src/testcontainers/Instance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const defaults: {
|
|
2
|
+
readonly startupTimeout: 10000;
|
|
3
|
+
};
|
|
4
|
+
export type Parameters = {
|
|
5
|
+
/**
|
|
6
|
+
* Startup timeout (in milliseconds) for testcontainers readiness checks.
|
|
7
|
+
*
|
|
8
|
+
* Increase this when running in CI or environments with slow image pulls.
|
|
9
|
+
*
|
|
10
|
+
* @default 10_000
|
|
11
|
+
*/
|
|
12
|
+
startupTimeout?: number | undefined;
|
|
13
|
+
};
|
|
14
|
+
export declare function resolveStartupTimeout(startupTimeout: number | undefined): number;
|
|
15
|
+
//# sourceMappingURL=containerOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerOptions.d.ts","sourceRoot":"","sources":["../../src/testcontainers/containerOptions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;CAEX,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG;IACvB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC,CAAA;AAED,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,MAAM,CAER"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerOptions.js","sourceRoot":"","sources":["../../src/testcontainers/containerOptions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,cAAc,EAAE,MAAM;CACd,CAAA;AAaV,MAAM,UAAU,qBAAqB,CACnC,cAAkC;IAElC,OAAO,cAAc,IAAI,QAAQ,CAAC,cAAc,CAAA;AAClD,CAAC"}
|
package/package.json
CHANGED
package/src/Instance.test.ts
CHANGED
|
@@ -305,6 +305,45 @@ test('behavior: messages', async () => {
|
|
|
305
305
|
`)
|
|
306
306
|
})
|
|
307
307
|
|
|
308
|
+
test('behavior: dynamic host/port via setEndpoint', async () => {
|
|
309
|
+
const foo = Instance.define(() => {
|
|
310
|
+
return {
|
|
311
|
+
name: 'foo',
|
|
312
|
+
host: 'localhost',
|
|
313
|
+
port: 3000,
|
|
314
|
+
async start(_, { setEndpoint }) {
|
|
315
|
+
setEndpoint?.({ host: '192.168.1.100', port: 9999 })
|
|
316
|
+
},
|
|
317
|
+
async stop() {},
|
|
318
|
+
}
|
|
319
|
+
})
|
|
320
|
+
|
|
321
|
+
const instance = foo()
|
|
322
|
+
expect(instance.host).toEqual('localhost')
|
|
323
|
+
expect(instance.port).toEqual(3000)
|
|
324
|
+
|
|
325
|
+
await instance.start()
|
|
326
|
+
expect(instance.host).toEqual('192.168.1.100')
|
|
327
|
+
expect(instance.port).toEqual(9999)
|
|
328
|
+
})
|
|
329
|
+
|
|
330
|
+
test('behavior: start() returning void keeps original host/port', async () => {
|
|
331
|
+
const foo = Instance.define(() => {
|
|
332
|
+
return {
|
|
333
|
+
name: 'foo',
|
|
334
|
+
host: 'localhost',
|
|
335
|
+
port: 3000,
|
|
336
|
+
async start() {},
|
|
337
|
+
async stop() {},
|
|
338
|
+
}
|
|
339
|
+
})
|
|
340
|
+
|
|
341
|
+
const instance = foo()
|
|
342
|
+
await instance.start()
|
|
343
|
+
expect(instance.host).toEqual('localhost')
|
|
344
|
+
expect(instance.port).toEqual(3000)
|
|
345
|
+
})
|
|
346
|
+
|
|
308
347
|
test('options: timeout', async () => {
|
|
309
348
|
const foo = Instance.define(() => {
|
|
310
349
|
return {
|
package/src/Instance.ts
CHANGED
|
@@ -121,11 +121,12 @@ export function define<
|
|
|
121
121
|
const options = options_ || parametersOrOptions || {}
|
|
122
122
|
|
|
123
123
|
const instance = fn(parameters)
|
|
124
|
-
const { _internal,
|
|
124
|
+
const { _internal, name, start, stop } = {
|
|
125
125
|
...instance,
|
|
126
126
|
...createParameters,
|
|
127
|
-
port: createParameters.port ?? instance.port,
|
|
128
127
|
}
|
|
128
|
+
let host = instance.host
|
|
129
|
+
let port = createParameters?.port ?? instance.port
|
|
129
130
|
const { messageBuffer = 20, timeout } = options
|
|
130
131
|
|
|
131
132
|
let restartResolver = Promise.withResolvers<void>()
|
|
@@ -159,9 +160,13 @@ export function define<
|
|
|
159
160
|
return messages
|
|
160
161
|
},
|
|
161
162
|
},
|
|
162
|
-
host
|
|
163
|
+
get host() {
|
|
164
|
+
return host
|
|
165
|
+
},
|
|
163
166
|
name,
|
|
164
|
-
port
|
|
167
|
+
get port() {
|
|
168
|
+
return port
|
|
169
|
+
},
|
|
165
170
|
get status() {
|
|
166
171
|
if (restarting) return 'restarting'
|
|
167
172
|
return status
|
|
@@ -193,6 +198,10 @@ export function define<
|
|
|
193
198
|
},
|
|
194
199
|
{
|
|
195
200
|
emitter,
|
|
201
|
+
setEndpoint(endpoint) {
|
|
202
|
+
if (endpoint.host) host = endpoint.host
|
|
203
|
+
if (endpoint.port) port = endpoint.port
|
|
204
|
+
},
|
|
196
205
|
status: this.status,
|
|
197
206
|
},
|
|
198
207
|
)
|
|
@@ -302,6 +311,7 @@ export declare namespace define {
|
|
|
302
311
|
|
|
303
312
|
export type InstanceStartOptions_internal = {
|
|
304
313
|
emitter: EventEmitter<EventTypes>
|
|
314
|
+
setEndpoint?(endpoint: { host?: string; port?: number }): void
|
|
305
315
|
status: Instance['status']
|
|
306
316
|
}
|
|
307
317
|
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import * as os from 'node:os'
|
|
1
2
|
import getPort from 'get-port'
|
|
2
3
|
import { Instance } from 'prool'
|
|
3
4
|
import { afterEach, expect, test } from 'vitest'
|
|
5
|
+
import { command } from './tempo.js'
|
|
4
6
|
|
|
5
7
|
const instances: Instance.Instance[] = []
|
|
8
|
+
const slowTestTimeout = 30_000
|
|
6
9
|
|
|
7
10
|
const port = await getPort()
|
|
8
11
|
|
|
@@ -50,18 +53,22 @@ test('behavior: instance errored (duplicate ports)', async () => {
|
|
|
50
53
|
await expect(() => instance_2.start()).rejects.toThrowError('Failed to start')
|
|
51
54
|
})
|
|
52
55
|
|
|
53
|
-
test(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
56
|
+
test(
|
|
57
|
+
'behavior: start and stop multiple times',
|
|
58
|
+
{ timeout: slowTestTimeout },
|
|
59
|
+
async () => {
|
|
60
|
+
const instance = defineInstance()
|
|
61
|
+
|
|
62
|
+
await instance.start()
|
|
63
|
+
await instance.stop()
|
|
64
|
+
await instance.start()
|
|
65
|
+
await instance.stop()
|
|
66
|
+
await instance.start()
|
|
67
|
+
await instance.stop()
|
|
68
|
+
await instance.start()
|
|
69
|
+
await instance.stop()
|
|
70
|
+
},
|
|
71
|
+
)
|
|
65
72
|
|
|
66
73
|
test('behavior: can subscribe to stdout', async () => {
|
|
67
74
|
const messages: string[] = []
|
|
@@ -82,3 +89,88 @@ test('behavior: can subscribe to stderr', async () => {
|
|
|
82
89
|
instance_2.on('stderr', (message) => messages.push(message))
|
|
83
90
|
await expect(instance_2.start()).rejects.toThrow('Failed to start')
|
|
84
91
|
})
|
|
92
|
+
|
|
93
|
+
test(
|
|
94
|
+
'behavior: faucet funds address',
|
|
95
|
+
{ timeout: slowTestTimeout },
|
|
96
|
+
async () => {
|
|
97
|
+
const instance = defineInstance()
|
|
98
|
+
await instance.start()
|
|
99
|
+
|
|
100
|
+
const rpc = async (method: string, params: unknown[]) => {
|
|
101
|
+
const response = await fetch(`http://localhost:${port}`, {
|
|
102
|
+
body: JSON.stringify({ id: 0, jsonrpc: '2.0', method, params }),
|
|
103
|
+
headers: { 'Content-Type': 'application/json' },
|
|
104
|
+
method: 'POST',
|
|
105
|
+
})
|
|
106
|
+
return await response.json()
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Funding races the first wall-clock block; expiring-nonce validation rejects until one exists.
|
|
110
|
+
let json: { result?: string[] } = {}
|
|
111
|
+
for (let i = 0; i < 50; i++) {
|
|
112
|
+
json = await rpc('tempo_fundAddress', [
|
|
113
|
+
'0x000000000000000000000000000000000000beef',
|
|
114
|
+
])
|
|
115
|
+
if (json.result) break
|
|
116
|
+
await new Promise((resolve) => setTimeout(resolve, 200))
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
expect(
|
|
120
|
+
JSON.stringify(json).replaceAll(/0x[0-9a-f]{64}/g, '<hash>'),
|
|
121
|
+
).toMatchInlineSnapshot(
|
|
122
|
+
`"{"jsonrpc":"2.0","id":0,"result":["<hash>","<hash>","<hash>","<hash>"]}"`,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
// balanceOf(0x...beef) on the first faucet token.
|
|
126
|
+
let balance = 0n
|
|
127
|
+
for (let i = 0; i < 50; i++) {
|
|
128
|
+
const { result } = await rpc('eth_call', [
|
|
129
|
+
{
|
|
130
|
+
data: '0x70a08231000000000000000000000000000000000000000000000000000000000000beef',
|
|
131
|
+
to: '0x20c0000000000000000000000000000000000000',
|
|
132
|
+
},
|
|
133
|
+
'latest',
|
|
134
|
+
])
|
|
135
|
+
balance = BigInt(result ?? 0)
|
|
136
|
+
if (balance > 0n) break
|
|
137
|
+
await new Promise((resolve) => setTimeout(resolve, 200))
|
|
138
|
+
}
|
|
139
|
+
expect(balance).toBeGreaterThan(0n)
|
|
140
|
+
},
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
const redact = (args: string[]) =>
|
|
144
|
+
args.join(' ').replaceAll(os.tmpdir(), '<tmpdir>')
|
|
145
|
+
|
|
146
|
+
test('command: default', () => {
|
|
147
|
+
expect(redact(command({ port: 8545 }))).toMatchInlineSnapshot(
|
|
148
|
+
`"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --faucet.node-address http://localhost:8545 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 8545 --port 8555 --ws.port 8565"`,
|
|
149
|
+
)
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
test('command: behavior: faucet node address', () => {
|
|
153
|
+
expect(
|
|
154
|
+
redact(
|
|
155
|
+
command({ faucet: { nodeAddress: 'http://localhost:1337' }, port: 8545 }),
|
|
156
|
+
),
|
|
157
|
+
).toMatchInlineSnapshot(
|
|
158
|
+
`"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --faucet.node-address http://localhost:1337 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 8545 --port 8555 --ws.port 8565"`,
|
|
159
|
+
)
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
test('command: behavior: faucet disabled', () => {
|
|
163
|
+
expect(
|
|
164
|
+
redact(command({ faucet: { enabled: false }, port: 8545 })),
|
|
165
|
+
).toMatchInlineSnapshot(
|
|
166
|
+
`"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled false --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 8545 --port 8555 --ws.port 8565"`,
|
|
167
|
+
)
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
test('command: behavior: http port override', () => {
|
|
171
|
+
expect(
|
|
172
|
+
redact(command({ http: { port: 1337 }, port: 8545 })),
|
|
173
|
+
).toMatchInlineSnapshot(
|
|
174
|
+
`"node --authrpc.port 8575 --datadir <tmpdir>/.prool/tempo.8545 --dev --dev.block-time 50ms --engine.disable-precompile-cache --engine.legacy-state-root --faucet.address 0x20c0000000000000000000000000000000000000 0x20c0000000000000000000000000000000000001 0x20c0000000000000000000000000000000000002 0x20c0000000000000000000000000000000000003 --faucet.amount 1000000000000 --faucet.enabled --faucet.private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --faucet.node-address http://localhost:1337 --http.addr 0.0.0.0 --http.api all --http.corsdomain * --http.port 1337 --port 8555 --ws.port 8565"`,
|
|
175
|
+
)
|
|
176
|
+
})
|
package/src/instances/tempo.ts
CHANGED
|
@@ -50,9 +50,17 @@ export function command(parameters: tempo.Parameters): string[] {
|
|
|
50
50
|
},
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
const args = deepAssign(defaultParameters, rest)
|
|
54
|
+
|
|
55
|
+
// Faucet submits funding transactions over RPC; point it at the resolved http port (node default: 8545).
|
|
56
|
+
const faucet = args['faucet'] as tempo.Parameters['faucet']
|
|
57
|
+
const http = args['http'] as { port: number }
|
|
58
|
+
if (faucet?.enabled && !faucet.nodeAddress)
|
|
59
|
+
faucet.nodeAddress = `http://localhost:${http.port}`
|
|
60
|
+
|
|
53
61
|
return [
|
|
54
62
|
'node',
|
|
55
|
-
...toArgs(
|
|
63
|
+
...toArgs(args, {
|
|
56
64
|
arraySeparator: null,
|
|
57
65
|
}),
|
|
58
66
|
]
|
|
@@ -105,11 +113,16 @@ export const tempo = Instance.define((parameters?: tempo.Parameters) => {
|
|
|
105
113
|
{
|
|
106
114
|
...options,
|
|
107
115
|
// Resolve when the process is listening via consensus engine message.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
116
|
+
resolver({ process, reject, resolve }) {
|
|
117
|
+
process.stdout.on('data', (data) => {
|
|
118
|
+
const message = data.toString()
|
|
119
|
+
if (log) console.log(message)
|
|
120
|
+
if (
|
|
121
|
+
message.includes(
|
|
122
|
+
'Received new payload from consensus engine',
|
|
123
|
+
) ||
|
|
124
|
+
message.includes('Received block from consensus engine')
|
|
125
|
+
)
|
|
113
126
|
resolve()
|
|
114
127
|
if (message.includes('shutting down')) reject('shutting down')
|
|
115
128
|
})
|
|
@@ -172,6 +185,16 @@ export declare namespace tempo {
|
|
|
172
185
|
* Amount for each faucet funding transaction
|
|
173
186
|
*/
|
|
174
187
|
amount?: bigint | undefined
|
|
188
|
+
/**
|
|
189
|
+
* Whether the faucet is enabled
|
|
190
|
+
* @default true
|
|
191
|
+
*/
|
|
192
|
+
enabled?: boolean | undefined
|
|
193
|
+
/**
|
|
194
|
+
* Node RPC address the faucet submits funding transactions to
|
|
195
|
+
* @default `http://localhost:${port}`
|
|
196
|
+
*/
|
|
197
|
+
nodeAddress?: string | undefined
|
|
175
198
|
/**
|
|
176
199
|
* Faucet funding mnemonic
|
|
177
200
|
*/
|
package/src/processes/execa.ts
CHANGED
|
@@ -33,9 +33,10 @@ export function execa(parameters: execa.Parameters): execa.ReturnType {
|
|
|
33
33
|
let process: Process_internal
|
|
34
34
|
|
|
35
35
|
async function stop(signal?: keyof SignalConstants | number) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
process.kill(signal)
|
|
37
|
+
// Process may have exited on its own; 'exit' will not re-fire.
|
|
38
|
+
if (process.exitCode !== null || process.signalCode !== null) return
|
|
39
|
+
return new Promise((resolve) => process.once('exit', resolve))
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
return {
|
|
@@ -3,6 +3,7 @@ import { Instance } from 'prool/testcontainers'
|
|
|
3
3
|
import { afterEach, expect, test } from 'vitest'
|
|
4
4
|
|
|
5
5
|
const instances: Instance.Instance[] = []
|
|
6
|
+
const slowTestTimeout = 30_000
|
|
6
7
|
|
|
7
8
|
const port = await getPort()
|
|
8
9
|
|
|
@@ -16,7 +17,7 @@ afterEach(async () => {
|
|
|
16
17
|
for (const instance of instances) await instance.stop().catch(() => {})
|
|
17
18
|
})
|
|
18
19
|
|
|
19
|
-
test('default', async () => {
|
|
20
|
+
test('default', { timeout: slowTestTimeout }, async () => {
|
|
20
21
|
const messages: string[] = []
|
|
21
22
|
const stdouts: string[] = []
|
|
22
23
|
|
|
@@ -42,26 +43,31 @@ test('default', async () => {
|
|
|
42
43
|
expect(instance.messages.get()).toMatchInlineSnapshot('[]')
|
|
43
44
|
})
|
|
44
45
|
|
|
45
|
-
test('behavior: instance errored (duplicate
|
|
46
|
-
const
|
|
47
|
-
const
|
|
46
|
+
test('behavior: instance errored (duplicate container names)', async () => {
|
|
47
|
+
const containerName = `tempo.duplicate.${crypto.randomUUID()}`
|
|
48
|
+
const instance_1 = defineInstance({ containerName, port: 8546 })
|
|
49
|
+
const instance_2 = defineInstance({ containerName, port: 8547 })
|
|
48
50
|
|
|
49
51
|
await instance_1.start()
|
|
50
|
-
await expect(() => instance_2.start()).rejects.toThrowError(
|
|
52
|
+
await expect(() => instance_2.start()).rejects.toThrowError()
|
|
51
53
|
})
|
|
52
54
|
|
|
53
|
-
test(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
55
|
+
test(
|
|
56
|
+
'behavior: start and stop multiple times',
|
|
57
|
+
{ timeout: slowTestTimeout },
|
|
58
|
+
async () => {
|
|
59
|
+
const instance = defineInstance()
|
|
60
|
+
|
|
61
|
+
await instance.start()
|
|
62
|
+
await instance.stop()
|
|
63
|
+
await instance.start()
|
|
64
|
+
await instance.stop()
|
|
65
|
+
await instance.start()
|
|
66
|
+
await instance.stop()
|
|
67
|
+
await instance.start()
|
|
68
|
+
await instance.stop()
|
|
69
|
+
},
|
|
70
|
+
)
|
|
65
71
|
|
|
66
72
|
test('behavior: can subscribe to stdout', async () => {
|
|
67
73
|
const messages: string[] = []
|
|
@@ -72,13 +78,50 @@ test('behavior: can subscribe to stdout', async () => {
|
|
|
72
78
|
expect(messages.length).toBeGreaterThanOrEqual(1)
|
|
73
79
|
})
|
|
74
80
|
|
|
75
|
-
test('behavior: can subscribe to stderr',
|
|
76
|
-
const messages: string[] = []
|
|
81
|
+
test.skip('behavior: can subscribe to stderr', () => {})
|
|
77
82
|
|
|
78
|
-
|
|
79
|
-
const
|
|
83
|
+
test('behavior: faucet funds address', { timeout: 120_000 }, async () => {
|
|
84
|
+
const instance = defineInstance({ startupTimeout: 60_000 })
|
|
85
|
+
await instance.start()
|
|
80
86
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
87
|
+
const rpc = async (method: string, params: unknown[]) => {
|
|
88
|
+
const response = await fetch(`http://${instance.host}:${instance.port}`, {
|
|
89
|
+
body: JSON.stringify({ id: 0, jsonrpc: '2.0', method, params }),
|
|
90
|
+
headers: { 'Content-Type': 'application/json' },
|
|
91
|
+
method: 'POST',
|
|
92
|
+
})
|
|
93
|
+
return await response.json()
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Funding races the first wall-clock block; expiring-nonce validation rejects until one exists.
|
|
97
|
+
let json: { result?: string[] } = {}
|
|
98
|
+
for (let i = 0; i < 100; i++) {
|
|
99
|
+
json = await rpc('tempo_fundAddress', [
|
|
100
|
+
'0x000000000000000000000000000000000000beef',
|
|
101
|
+
])
|
|
102
|
+
if (json.result) break
|
|
103
|
+
await new Promise((resolve) => setTimeout(resolve, 500))
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
expect(
|
|
107
|
+
JSON.stringify(json).replaceAll(/0x[0-9a-f]{64}/g, '<hash>'),
|
|
108
|
+
).toMatchInlineSnapshot(
|
|
109
|
+
`"{"jsonrpc":"2.0","id":0,"result":["<hash>","<hash>","<hash>","<hash>"]}"`,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
// balanceOf(0x...beef) on the first faucet token.
|
|
113
|
+
let balance = 0n
|
|
114
|
+
for (let i = 0; i < 100; i++) {
|
|
115
|
+
const { result } = await rpc('eth_call', [
|
|
116
|
+
{
|
|
117
|
+
data: '0x70a08231000000000000000000000000000000000000000000000000000000000000beef',
|
|
118
|
+
to: '0x20c0000000000000000000000000000000000000',
|
|
119
|
+
},
|
|
120
|
+
'latest',
|
|
121
|
+
])
|
|
122
|
+
balance = BigInt(result ?? 0)
|
|
123
|
+
if (balance > 0n) break
|
|
124
|
+
await new Promise((resolve) => setTimeout(resolve, 500))
|
|
125
|
+
}
|
|
126
|
+
expect(balance).toBeGreaterThan(0n)
|
|
84
127
|
})
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
} from 'testcontainers'
|
|
7
7
|
import * as Instance from '../Instance.js'
|
|
8
8
|
import { command, type tempo as core_tempo } from '../instances/tempo.js'
|
|
9
|
+
import * as ContainerOptions from './containerOptions.js'
|
|
9
10
|
|
|
10
11
|
export type { Instance, InstanceOptions } from '../Instance.js'
|
|
11
12
|
|
|
@@ -25,6 +26,7 @@ export const tempo = Instance.define((parameters?: tempo.Parameters) => {
|
|
|
25
26
|
containerName = `tempo.${crypto.randomUUID()}`,
|
|
26
27
|
image = 'ghcr.io/tempoxyz/tempo:latest',
|
|
27
28
|
log: log_,
|
|
29
|
+
startupTimeout,
|
|
28
30
|
...args
|
|
29
31
|
} = parameters || {}
|
|
30
32
|
|
|
@@ -47,22 +49,25 @@ export const tempo = Instance.define((parameters?: tempo.Parameters) => {
|
|
|
47
49
|
host: args.host ?? 'localhost',
|
|
48
50
|
name,
|
|
49
51
|
port: args.port ?? 8545,
|
|
50
|
-
async start({ port = args.port }, { emitter }) {
|
|
52
|
+
async start({ port = args.port }, { emitter, setEndpoint }) {
|
|
51
53
|
const promise = Promise.withResolvers<void>()
|
|
52
54
|
|
|
55
|
+
const containerPort = port ?? 8545
|
|
56
|
+
|
|
53
57
|
const c = new GenericContainer(image)
|
|
54
58
|
.withPullPolicy(PullPolicy.alwaysPull())
|
|
55
59
|
.withPlatform('linux/x86_64')
|
|
56
|
-
.
|
|
60
|
+
.withExposedPorts(containerPort)
|
|
57
61
|
.withExtraHosts([
|
|
58
62
|
{ host: 'host.docker.internal', ipAddress: 'host-gateway' },
|
|
59
|
-
{ host: 'localhost', ipAddress: 'host-gateway' },
|
|
60
63
|
])
|
|
61
64
|
.withName(containerName)
|
|
62
65
|
.withEnvironment({ RUST_LOG })
|
|
63
|
-
.withCommand(command({ ...args, port }))
|
|
66
|
+
.withCommand(command({ ...args, port: containerPort }))
|
|
64
67
|
.withWaitStrategy(
|
|
65
|
-
Wait.forLogMessage(
|
|
68
|
+
Wait.forLogMessage(
|
|
69
|
+
/Received (block|new payload) from consensus engine/,
|
|
70
|
+
),
|
|
66
71
|
)
|
|
67
72
|
.withLogConsumer((stream) => {
|
|
68
73
|
stream.on('data', (data) => {
|
|
@@ -80,11 +85,17 @@ export const tempo = Instance.define((parameters?: tempo.Parameters) => {
|
|
|
80
85
|
promise.reject(new Error(`Failed to start: ${error.message}`))
|
|
81
86
|
})
|
|
82
87
|
})
|
|
83
|
-
.withStartupTimeout(
|
|
88
|
+
.withStartupTimeout(
|
|
89
|
+
ContainerOptions.resolveStartupTimeout(startupTimeout),
|
|
90
|
+
)
|
|
84
91
|
|
|
85
92
|
c.start()
|
|
86
|
-
.then((
|
|
87
|
-
container =
|
|
93
|
+
.then((started) => {
|
|
94
|
+
container = started
|
|
95
|
+
setEndpoint?.({
|
|
96
|
+
host: started.getHost(),
|
|
97
|
+
port: started.getMappedPort(containerPort),
|
|
98
|
+
})
|
|
88
99
|
promise.resolve()
|
|
89
100
|
})
|
|
90
101
|
.catch(promise.reject)
|
|
@@ -100,22 +111,23 @@ export const tempo = Instance.define((parameters?: tempo.Parameters) => {
|
|
|
100
111
|
})
|
|
101
112
|
|
|
102
113
|
export declare namespace tempo {
|
|
103
|
-
export type Parameters = Omit<core_tempo.Parameters, 'binary'> &
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
114
|
+
export type Parameters = Omit<core_tempo.Parameters, 'binary'> &
|
|
115
|
+
ContainerOptions.Parameters & {
|
|
116
|
+
/**
|
|
117
|
+
* Name of the container.
|
|
118
|
+
*/
|
|
119
|
+
containerName?: string | undefined
|
|
120
|
+
/**
|
|
121
|
+
* Docker image to use.
|
|
122
|
+
*/
|
|
123
|
+
image?: string | undefined
|
|
124
|
+
/**
|
|
125
|
+
* Host the server will listen on.
|
|
126
|
+
*/
|
|
127
|
+
host?: string | undefined
|
|
128
|
+
/**
|
|
129
|
+
* Port the server will listen on.
|
|
130
|
+
*/
|
|
131
|
+
port?: number | undefined
|
|
132
|
+
}
|
|
121
133
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const defaults = {
|
|
2
|
+
startupTimeout: 10_000,
|
|
3
|
+
} as const
|
|
4
|
+
|
|
5
|
+
export type Parameters = {
|
|
6
|
+
/**
|
|
7
|
+
* Startup timeout (in milliseconds) for testcontainers readiness checks.
|
|
8
|
+
*
|
|
9
|
+
* Increase this when running in CI or environments with slow image pulls.
|
|
10
|
+
*
|
|
11
|
+
* @default 10_000
|
|
12
|
+
*/
|
|
13
|
+
startupTimeout?: number | undefined
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function resolveStartupTimeout(
|
|
17
|
+
startupTimeout: number | undefined,
|
|
18
|
+
): number {
|
|
19
|
+
return startupTimeout ?? defaults.startupTimeout
|
|
20
|
+
}
|