@aztec/pxe 0.66.0 → 0.67.1-devnet
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/dest/bin/index.js +5 -6
- package/dest/config/index.d.ts +0 -9
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +1 -17
- package/dest/config/package_info.d.ts +5 -0
- package/dest/config/package_info.d.ts.map +1 -0
- package/dest/config/package_info.js +4 -0
- package/dest/contract_data_oracle/index.js +2 -2
- package/dest/database/incoming_note_dao.d.ts +1 -1
- package/dest/database/incoming_note_dao.d.ts.map +1 -1
- package/dest/database/incoming_note_dao.js +2 -2
- package/dest/database/kv_pxe_database.d.ts +10 -13
- package/dest/database/kv_pxe_database.d.ts.map +1 -1
- package/dest/database/kv_pxe_database.js +153 -230
- package/dest/database/outgoing_note_dao.js +2 -2
- package/dest/database/pxe_database.d.ts +7 -25
- package/dest/database/pxe_database.d.ts.map +1 -1
- package/dest/database/pxe_database_test_suite.d.ts.map +1 -1
- package/dest/database/pxe_database_test_suite.js +18 -59
- package/dest/index.d.ts +2 -0
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +3 -1
- package/dest/kernel_oracle/index.d.ts.map +1 -1
- package/dest/kernel_oracle/index.js +4 -4
- package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.js +2 -2
- package/dest/kernel_prover/index.d.ts +1 -0
- package/dest/kernel_prover/index.d.ts.map +1 -1
- package/dest/kernel_prover/index.js +2 -1
- package/dest/kernel_prover/kernel_prover.d.ts +1 -0
- package/dest/kernel_prover/kernel_prover.d.ts.map +1 -1
- package/dest/kernel_prover/kernel_prover.js +42 -5
- package/dest/kernel_prover/test/test_circuit_prover.d.ts +1 -2
- package/dest/kernel_prover/test/test_circuit_prover.d.ts.map +1 -1
- package/dest/kernel_prover/test/test_circuit_prover.js +7 -13
- package/dest/note_decryption_utils/add_public_values_to_payload.js +2 -2
- package/dest/note_decryption_utils/brute_force_note_info.d.ts +3 -3
- package/dest/note_decryption_utils/brute_force_note_info.d.ts.map +1 -1
- package/dest/note_decryption_utils/brute_force_note_info.js +8 -8
- package/dest/note_decryption_utils/produce_note_daos.d.ts +3 -6
- package/dest/note_decryption_utils/produce_note_daos.d.ts.map +1 -1
- package/dest/note_decryption_utils/produce_note_daos.js +5 -19
- package/dest/note_decryption_utils/produce_note_daos_for_key.d.ts +1 -1
- package/dest/note_decryption_utils/produce_note_daos_for_key.d.ts.map +1 -1
- package/dest/pxe_service/error_enriching.d.ts +3 -3
- package/dest/pxe_service/error_enriching.d.ts.map +1 -1
- package/dest/pxe_service/error_enriching.js +10 -10
- package/dest/pxe_service/index.d.ts +0 -1
- package/dest/pxe_service/index.d.ts.map +1 -1
- package/dest/pxe_service/index.js +1 -2
- package/dest/pxe_service/pxe_service.d.ts +2 -16
- package/dest/pxe_service/pxe_service.d.ts.map +1 -1
- package/dest/pxe_service/pxe_service.js +74 -96
- package/dest/pxe_service/test/pxe_test_suite.d.ts.map +1 -1
- package/dest/pxe_service/test/pxe_test_suite.js +1 -3
- package/dest/simulator/index.d.ts +1 -1
- package/dest/simulator/index.d.ts.map +1 -1
- package/dest/simulator/index.js +2 -2
- package/dest/simulator_oracle/index.d.ts +14 -11
- package/dest/simulator_oracle/index.d.ts.map +1 -1
- package/dest/simulator_oracle/index.js +170 -140
- package/dest/simulator_oracle/tagging_utils.d.ts +15 -0
- package/dest/simulator_oracle/tagging_utils.d.ts.map +1 -0
- package/dest/simulator_oracle/tagging_utils.js +23 -0
- package/dest/synchronizer/synchronizer.d.ts +10 -40
- package/dest/synchronizer/synchronizer.d.ts.map +1 -1
- package/dest/synchronizer/synchronizer.js +35 -69
- package/dest/{pxe_service → utils}/create_pxe_service.d.ts +1 -1
- package/dest/utils/create_pxe_service.d.ts.map +1 -0
- package/dest/utils/create_pxe_service.js +52 -0
- package/package.json +31 -19
- package/src/bin/index.ts +4 -5
- package/src/config/index.ts +0 -21
- package/src/config/package_info.ts +3 -0
- package/src/contract_data_oracle/index.ts +1 -1
- package/src/database/incoming_note_dao.ts +2 -2
- package/src/database/kv_pxe_database.ts +214 -309
- package/src/database/outgoing_note_dao.ts +1 -1
- package/src/database/pxe_database.ts +7 -28
- package/src/database/pxe_database_test_suite.ts +20 -75
- package/src/index.ts +2 -0
- package/src/kernel_oracle/index.ts +3 -3
- package/src/kernel_prover/hints/build_private_kernel_reset_private_inputs.ts +1 -1
- package/src/kernel_prover/index.ts +2 -0
- package/src/kernel_prover/kernel_prover.ts +72 -3
- package/src/kernel_prover/test/test_circuit_prover.ts +11 -25
- package/src/note_decryption_utils/add_public_values_to_payload.ts +1 -1
- package/src/note_decryption_utils/brute_force_note_info.ts +9 -9
- package/src/note_decryption_utils/produce_note_daos.ts +5 -48
- package/src/note_decryption_utils/produce_note_daos_for_key.ts +1 -1
- package/src/pxe_service/error_enriching.ts +14 -12
- package/src/pxe_service/index.ts +0 -1
- package/src/pxe_service/pxe_service.ts +127 -174
- package/src/pxe_service/test/pxe_test_suite.ts +0 -3
- package/src/simulator/index.ts +1 -1
- package/src/simulator_oracle/index.ts +201 -188
- package/src/simulator_oracle/tagging_utils.ts +28 -0
- package/src/synchronizer/synchronizer.ts +37 -77
- package/src/{pxe_service → utils}/create_pxe_service.ts +16 -13
- package/dest/pxe_service/create_pxe_service.d.ts.map +0 -1
- package/dest/pxe_service/create_pxe_service.js +0 -49
|
@@ -5,39 +5,36 @@ import {
|
|
|
5
5
|
type L2BlockStreamEventHandler,
|
|
6
6
|
} from '@aztec/circuit-types';
|
|
7
7
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js';
|
|
8
|
-
import { type
|
|
8
|
+
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
9
9
|
import { type L2TipsStore } from '@aztec/kv-store/stores';
|
|
10
10
|
|
|
11
11
|
import { type PXEConfig } from '../config/index.js';
|
|
12
12
|
import { type PxeDatabase } from '../database/index.js';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
* The Synchronizer class manages the synchronization
|
|
16
|
-
*
|
|
17
|
-
* It provides methods to
|
|
18
|
-
* details, and fetch transactions by hash.
|
|
19
|
-
* in sync with the blockchain while handling retries and errors gracefully.
|
|
15
|
+
* The Synchronizer class manages the synchronization with the aztec node, allowing PXE to retrieve the
|
|
16
|
+
* latest block header and handle reorgs.
|
|
17
|
+
* It provides methods to trigger a sync and get the block number we are syncec to
|
|
18
|
+
* details, and fetch transactions by hash.
|
|
20
19
|
*/
|
|
21
20
|
export class Synchronizer implements L2BlockStreamEventHandler {
|
|
22
|
-
private running = false;
|
|
23
21
|
private initialSyncBlockNumber = INITIAL_L2_BLOCK_NUM - 1;
|
|
24
|
-
private log:
|
|
22
|
+
private log: Logger;
|
|
25
23
|
protected readonly blockStream: L2BlockStream;
|
|
26
24
|
|
|
27
25
|
constructor(
|
|
28
26
|
private node: AztecNode,
|
|
29
27
|
private db: PxeDatabase,
|
|
30
28
|
private l2TipsStore: L2TipsStore,
|
|
31
|
-
config: Partial<Pick<PXEConfig, '
|
|
29
|
+
config: Partial<Pick<PXEConfig, 'l2StartingBlock'>> = {},
|
|
32
30
|
logSuffix?: string,
|
|
33
31
|
) {
|
|
34
|
-
this.log =
|
|
32
|
+
this.log = createLogger(logSuffix ? `pxe:synchronizer:${logSuffix}` : 'pxe:synchronizer');
|
|
35
33
|
this.blockStream = this.createBlockStream(config);
|
|
36
34
|
}
|
|
37
35
|
|
|
38
|
-
protected createBlockStream(config: Partial<Pick<PXEConfig, '
|
|
39
|
-
return new L2BlockStream(this.node, this.l2TipsStore, this, {
|
|
40
|
-
pollIntervalMS: config.l2BlockPollingIntervalMS,
|
|
36
|
+
protected createBlockStream(config: Partial<Pick<PXEConfig, 'l2StartingBlock'>>) {
|
|
37
|
+
return new L2BlockStream(this.node, this.l2TipsStore, this, createLogger('pxe:block_stream'), {
|
|
41
38
|
startingBlock: config.l2StartingBlock,
|
|
42
39
|
});
|
|
43
40
|
}
|
|
@@ -47,12 +44,18 @@ export class Synchronizer implements L2BlockStreamEventHandler {
|
|
|
47
44
|
await this.l2TipsStore.handleBlockStreamEvent(event);
|
|
48
45
|
|
|
49
46
|
switch (event.type) {
|
|
50
|
-
case 'blocks-added':
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
case 'blocks-added': {
|
|
48
|
+
const lastBlock = event.blocks.at(-1)!;
|
|
49
|
+
this.log.verbose(`Updated pxe last block to ${lastBlock.number}`, {
|
|
50
|
+
blockHash: lastBlock.hash(),
|
|
51
|
+
archive: lastBlock.archive.root.toString(),
|
|
52
|
+
header: lastBlock.header.toInspect(),
|
|
53
|
+
});
|
|
54
|
+
await this.db.setHeader(lastBlock.header);
|
|
53
55
|
break;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
}
|
|
57
|
+
case 'chain-pruned': {
|
|
58
|
+
this.log.warn(`Pruning data after block ${event.blockNumber} due to reorg`);
|
|
56
59
|
// We first unnullify and then remove so that unnullified notes that were created after the block number end up deleted.
|
|
57
60
|
await this.db.unnullifyNotesAfter(event.blockNumber);
|
|
58
61
|
await this.db.removeNotesAfter(event.blockNumber);
|
|
@@ -62,73 +65,30 @@ export class Synchronizer implements L2BlockStreamEventHandler {
|
|
|
62
65
|
// Update the header to the last block.
|
|
63
66
|
await this.db.setHeader(await this.node.getBlockHeader(event.blockNumber));
|
|
64
67
|
break;
|
|
68
|
+
}
|
|
65
69
|
}
|
|
66
70
|
}
|
|
67
71
|
|
|
68
72
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* available, it retries after a specified interval.
|
|
72
|
-
*
|
|
73
|
-
* @param limit - The maximum number of encrypted, unencrypted logs and blocks to fetch in each iteration.
|
|
74
|
-
* @param retryInterval - The time interval (in ms) to wait before retrying if no data is available.
|
|
73
|
+
* Syncs PXE and the node by dowloading the metadata of the latest blocks, allowing simulations to use
|
|
74
|
+
* recent data (e.g. notes), and handling any reorgs that might have occurred.
|
|
75
75
|
*/
|
|
76
|
-
public async
|
|
77
|
-
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
this.running = true;
|
|
81
|
-
|
|
82
|
-
// REFACTOR: We should know the header of the genesis block without having to request it from the node.
|
|
83
|
-
await this.db.setHeader(await this.node.getBlockHeader(0));
|
|
76
|
+
public async sync() {
|
|
77
|
+
let currentHeader;
|
|
84
78
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
* will no longer process blocks or encrypted logs and must be restarted using the start method.
|
|
95
|
-
*
|
|
96
|
-
* @returns A promise that resolves when the synchronizer has successfully stopped.
|
|
97
|
-
*/
|
|
98
|
-
public async stop() {
|
|
99
|
-
this.running = false;
|
|
100
|
-
await this.blockStream.stop();
|
|
101
|
-
this.log.info('Stopped');
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/** Triggers a single run. */
|
|
105
|
-
public async trigger() {
|
|
79
|
+
try {
|
|
80
|
+
currentHeader = await this.db.getBlockHeader();
|
|
81
|
+
} catch (e) {
|
|
82
|
+
this.log.debug('Header is not set, requesting from the node');
|
|
83
|
+
}
|
|
84
|
+
if (!currentHeader) {
|
|
85
|
+
// REFACTOR: We should know the header of the genesis block without having to request it from the node.
|
|
86
|
+
await this.db.setHeader(await this.node.getBlockHeader(0));
|
|
87
|
+
}
|
|
106
88
|
await this.blockStream.sync();
|
|
107
89
|
}
|
|
108
90
|
|
|
109
|
-
|
|
110
|
-
return this.db.getBlockNumber() ?? this.initialSyncBlockNumber;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Checks whether all the blocks were processed (tree roots updated, txs updated with block info, etc.).
|
|
115
|
-
* @returns True if there are no outstanding blocks to be synched.
|
|
116
|
-
* @remarks This indicates that blocks and transactions are synched even if notes are not.
|
|
117
|
-
* @remarks Compares local block number with the block number from aztec node.
|
|
118
|
-
*/
|
|
119
|
-
public async isGlobalStateSynchronized() {
|
|
120
|
-
const latest = await this.node.getBlockNumber();
|
|
121
|
-
return latest <= this.getSynchedBlockNumber();
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Returns the latest block that has been synchronized by the synchronizer and each account.
|
|
126
|
-
* @returns The latest block synchronized for blocks, and the latest block synched for notes for each public key being tracked.
|
|
127
|
-
*/
|
|
128
|
-
public getSyncStatus() {
|
|
129
|
-
const lastBlockNumber = this.getSynchedBlockNumber();
|
|
130
|
-
return {
|
|
131
|
-
blocks: lastBlockNumber,
|
|
132
|
-
};
|
|
91
|
+
public async getSynchedBlockNumber() {
|
|
92
|
+
return (await this.db.getBlockNumber()) ?? this.initialSyncBlockNumber;
|
|
133
93
|
}
|
|
134
94
|
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { BBNativePrivateKernelProver } from '@aztec/bb-prover';
|
|
2
|
+
import { BBWasmPrivateKernelProver } from '@aztec/bb-prover/wasm';
|
|
2
3
|
import { type AztecNode, type PrivateKernelProver } from '@aztec/circuit-types';
|
|
3
4
|
import { randomBytes } from '@aztec/foundation/crypto';
|
|
4
|
-
import {
|
|
5
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
5
6
|
import { KeyStore } from '@aztec/key-store';
|
|
7
|
+
import { createStore } from '@aztec/kv-store/lmdb';
|
|
6
8
|
import { L2TipsStore } from '@aztec/kv-store/stores';
|
|
7
|
-
import { createStore } from '@aztec/kv-store/utils';
|
|
8
9
|
|
|
9
10
|
import { type PXEServiceConfig } from '../config/index.js';
|
|
10
11
|
import { KVPxeDatabase } from '../database/kv_pxe_database.js';
|
|
11
12
|
import { TestPrivateKernelProver } from '../kernel_prover/test/test_circuit_prover.js';
|
|
12
|
-
import { PXEService } from '
|
|
13
|
+
import { PXEService } from '../pxe_service/pxe_service.js';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Create and start an PXEService instance with the given AztecNode.
|
|
@@ -38,18 +39,18 @@ export async function createPXEService(
|
|
|
38
39
|
} as PXEServiceConfig;
|
|
39
40
|
|
|
40
41
|
const keyStore = new KeyStore(
|
|
41
|
-
await createStore('pxe_key_store', configWithContracts,
|
|
42
|
+
await createStore('pxe_key_store', configWithContracts, createLogger('pxe:keystore:lmdb')),
|
|
42
43
|
);
|
|
43
44
|
|
|
44
|
-
const store = await createStore('pxe_data', configWithContracts,
|
|
45
|
+
const store = await createStore('pxe_data', configWithContracts, createLogger('pxe:data:lmdb'));
|
|
45
46
|
|
|
46
|
-
const db =
|
|
47
|
+
const db = await KVPxeDatabase.create(store);
|
|
47
48
|
const tips = new L2TipsStore(store, 'pxe');
|
|
48
49
|
|
|
49
50
|
const prover = proofCreator ?? (await createProver(config, logSuffix));
|
|
50
|
-
const
|
|
51
|
-
await
|
|
52
|
-
return
|
|
51
|
+
const pxe = new PXEService(keyStore, aztecNode, db, tips, prover, config, logSuffix);
|
|
52
|
+
await pxe.init();
|
|
53
|
+
return pxe;
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
function createProver(config: PXEServiceConfig, logSuffix?: string) {
|
|
@@ -59,9 +60,11 @@ function createProver(config: PXEServiceConfig, logSuffix?: string) {
|
|
|
59
60
|
|
|
60
61
|
// (@PhilWindle) Temporary validation until WASM is implemented
|
|
61
62
|
if (!config.bbBinaryPath || !config.bbWorkingDirectory) {
|
|
62
|
-
|
|
63
|
+
return new BBWasmPrivateKernelProver(16);
|
|
64
|
+
} else {
|
|
65
|
+
const bbConfig = config as Required<Pick<PXEServiceConfig, 'bbBinaryPath' | 'bbWorkingDirectory'>> &
|
|
66
|
+
PXEServiceConfig;
|
|
67
|
+
const log = createLogger('pxe:bb-native-prover' + (logSuffix ? `:${logSuffix}` : ''));
|
|
68
|
+
return BBNativePrivateKernelProver.new({ bbSkipCleanup: false, ...bbConfig }, log);
|
|
63
69
|
}
|
|
64
|
-
const bbConfig = config as Required<Pick<PXEServiceConfig, 'bbBinaryPath' | 'bbWorkingDirectory'>> & PXEServiceConfig;
|
|
65
|
-
const log = createDebugLogger('aztec:pxe:bb-native-prover' + (logSuffix ? `:${logSuffix}` : ''));
|
|
66
|
-
return BBNativePrivateKernelProver.new({ bbSkipCleanup: false, ...bbConfig }, log);
|
|
67
70
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create_pxe_service.d.ts","sourceRoot":"","sources":["../../src/pxe_service/create_pxe_service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAOhF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,gBAAgB,EACxB,YAAY,GAAE,MAAM,GAAG,OAAO,GAAG,SAAqB,EACtD,YAAY,CAAC,EAAE,mBAAmB,uBAwBnC"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { BBNativePrivateKernelProver } from '@aztec/bb-prover';
|
|
2
|
-
import { randomBytes } from '@aztec/foundation/crypto';
|
|
3
|
-
import { createDebugLogger } from '@aztec/foundation/log';
|
|
4
|
-
import { KeyStore } from '@aztec/key-store';
|
|
5
|
-
import { L2TipsStore } from '@aztec/kv-store/stores';
|
|
6
|
-
import { createStore } from '@aztec/kv-store/utils';
|
|
7
|
-
import { KVPxeDatabase } from '../database/kv_pxe_database.js';
|
|
8
|
-
import { TestPrivateKernelProver } from '../kernel_prover/test/test_circuit_prover.js';
|
|
9
|
-
import { PXEService } from './pxe_service.js';
|
|
10
|
-
/**
|
|
11
|
-
* Create and start an PXEService instance with the given AztecNode.
|
|
12
|
-
* If no keyStore or database is provided, it will use KeyStore and MemoryDB as default values.
|
|
13
|
-
* Returns a Promise that resolves to the started PXEService instance.
|
|
14
|
-
*
|
|
15
|
-
* @param aztecNode - The AztecNode instance to be used by the server.
|
|
16
|
-
* @param config - The PXE Service Config to use
|
|
17
|
-
* @param options - (Optional) Optional information for creating an PXEService.
|
|
18
|
-
* @param proofCreator - An optional proof creator to use in place of any other configuration
|
|
19
|
-
* @returns A Promise that resolves to the started PXEService instance.
|
|
20
|
-
*/
|
|
21
|
-
export async function createPXEService(aztecNode, config, useLogSuffix = undefined, proofCreator) {
|
|
22
|
-
const logSuffix = typeof useLogSuffix === 'boolean' ? (useLogSuffix ? randomBytes(3).toString('hex') : undefined) : useLogSuffix;
|
|
23
|
-
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
24
|
-
const configWithContracts = {
|
|
25
|
-
...config,
|
|
26
|
-
l1Contracts,
|
|
27
|
-
};
|
|
28
|
-
const keyStore = new KeyStore(await createStore('pxe_key_store', configWithContracts, createDebugLogger('aztec:pxe:keystore:lmdb')));
|
|
29
|
-
const store = await createStore('pxe_data', configWithContracts, createDebugLogger('aztec:pxe:data:lmdb'));
|
|
30
|
-
const db = new KVPxeDatabase(store);
|
|
31
|
-
const tips = new L2TipsStore(store, 'pxe');
|
|
32
|
-
const prover = proofCreator ?? (await createProver(config, logSuffix));
|
|
33
|
-
const server = new PXEService(keyStore, aztecNode, db, tips, prover, config, logSuffix);
|
|
34
|
-
await server.start();
|
|
35
|
-
return server;
|
|
36
|
-
}
|
|
37
|
-
function createProver(config, logSuffix) {
|
|
38
|
-
if (!config.proverEnabled) {
|
|
39
|
-
return new TestPrivateKernelProver();
|
|
40
|
-
}
|
|
41
|
-
// (@PhilWindle) Temporary validation until WASM is implemented
|
|
42
|
-
if (!config.bbBinaryPath || !config.bbWorkingDirectory) {
|
|
43
|
-
throw new Error(`Prover must be configured with binary path and working directory`);
|
|
44
|
-
}
|
|
45
|
-
const bbConfig = config;
|
|
46
|
-
const log = createDebugLogger('aztec:pxe:bb-native-prover' + (logSuffix ? `:${logSuffix}` : ''));
|
|
47
|
-
return BBNativePrivateKernelProver.new({ bbSkipCleanup: false, ...bbConfig }, log);
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX3B4ZV9zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B4ZV9zZXJ2aWNlL2NyZWF0ZV9weGVfc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsU0FBb0IsRUFDcEIsTUFBd0IsRUFDeEIsZUFBNkMsU0FBUyxFQUN0RCxZQUFrQztJQUVsQyxNQUFNLFNBQVMsR0FDYixPQUFPLFlBQVksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBRWpILE1BQU0sV0FBVyxHQUFHLE1BQU0sU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDN0QsTUFBTSxtQkFBbUIsR0FBRztRQUMxQixHQUFHLE1BQU07UUFDVCxXQUFXO0tBQ1EsQ0FBQztJQUV0QixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FDM0IsTUFBTSxXQUFXLENBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FDdEcsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLE1BQU0sV0FBVyxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7SUFFM0csTUFBTSxFQUFFLEdBQUcsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNDLE1BQU0sTUFBTSxHQUFHLFlBQVksSUFBSSxDQUFDLE1BQU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JCLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxNQUF3QixFQUFFLFNBQWtCO0lBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLHVCQUF1QixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBb0csQ0FBQztJQUN0SCxNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRyxPQUFPLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsR0FBRyxRQUFRLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNyRixDQUFDIn0=
|