@helium/helium-admin-cli 0.10.33 → 0.10.34
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/lib/cjs/backfill-mobile-deployment-infos.js +53 -29
- package/lib/cjs/backfill-mobile-deployment-infos.js.map +1 -1
- package/lib/esm/src/backfill-mobile-deployment-infos.js +53 -27
- package/lib/esm/src/backfill-mobile-deployment-infos.js.map +1 -1
- package/lib/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/types/src/backfill-mobile-deployment-infos.d.ts.map +1 -1
- package/package.json +14 -14
|
@@ -51,7 +51,8 @@ const hasDeploymentInfo = (wi) => {
|
|
|
51
51
|
wi.deploymentInfo.elevation ||
|
|
52
52
|
wi.deploymentInfo.azimuth ||
|
|
53
53
|
wi.deploymentInfo.mechanicalDownTilt ||
|
|
54
|
-
wi.deploymentInfo.electricalDownTilt
|
|
54
|
+
wi.deploymentInfo.electricalDownTilt ||
|
|
55
|
+
wi.deploymentInfo.serial);
|
|
55
56
|
};
|
|
56
57
|
const getH3Location = (lat, lng) => {
|
|
57
58
|
try {
|
|
@@ -95,9 +96,18 @@ function run(args = process.argv) {
|
|
|
95
96
|
type: "boolean",
|
|
96
97
|
default: false,
|
|
97
98
|
},
|
|
99
|
+
noSsl: {
|
|
100
|
+
type: "boolean",
|
|
101
|
+
default: false,
|
|
102
|
+
describe: "Disable SSL for database connection",
|
|
103
|
+
},
|
|
98
104
|
});
|
|
99
105
|
const argv = yield yarg.argv;
|
|
100
106
|
const commit = argv.commit;
|
|
107
|
+
console.log("Starting mobile deployment info backfill...");
|
|
108
|
+
console.log(`Database: ${argv.pgDatabase}@${argv.pgHost}:${argv.pgPort}`);
|
|
109
|
+
console.log(`Solana RPC: ${argv.url}`);
|
|
110
|
+
console.log(`Commit mode: ${commit ? "ENABLED" : "DRY RUN"}`);
|
|
101
111
|
process.env.ANCHOR_WALLET = argv.wallet;
|
|
102
112
|
process.env.ANCHOR_PROVIDER_URL = argv.url;
|
|
103
113
|
anchor.setProvider(anchor.AnchorProvider.local(argv.url));
|
|
@@ -106,6 +116,7 @@ function run(args = process.argv) {
|
|
|
106
116
|
const wallet = new anchor.Wallet((0, utils_1.loadKeypair)(argv.wallet));
|
|
107
117
|
const hem = yield (0, helium_entity_manager_sdk_1.init)(provider);
|
|
108
118
|
const isRds = argv.pgHost.includes("rds.amazon.com");
|
|
119
|
+
console.log("Connecting to database...");
|
|
109
120
|
const client = new pg_1.Client({
|
|
110
121
|
user: argv.pgUser,
|
|
111
122
|
password: argv.pgPassword,
|
|
@@ -113,21 +124,26 @@ function run(args = process.argv) {
|
|
|
113
124
|
database: argv.pgDatabase,
|
|
114
125
|
port: Number(argv.pgPort),
|
|
115
126
|
ssl: argv.noSsl
|
|
116
|
-
?
|
|
127
|
+
? false
|
|
128
|
+
: {
|
|
117
129
|
rejectUnauthorized: false,
|
|
118
|
-
}
|
|
119
|
-
: false,
|
|
130
|
+
},
|
|
120
131
|
});
|
|
121
132
|
yield client.connect();
|
|
133
|
+
console.log("✅ Database connected successfully");
|
|
122
134
|
const [subDao] = (0, helium_sub_daos_sdk_1.subDaoKey)(spl_utils_1.MOBILE_MINT);
|
|
123
135
|
const [rewardableEntityconfig] = (0, helium_entity_manager_sdk_1.rewardableEntityConfigKey)(subDao, "MOBILE");
|
|
136
|
+
console.log("Fetching WiFi info from database...");
|
|
124
137
|
const wifiInfos = (yield client.query(`
|
|
125
138
|
SELECT c.hs_pubkey,
|
|
139
|
+
r.radio_serial_number as serial,
|
|
126
140
|
c.antenna,
|
|
127
141
|
c.height AS elevation,
|
|
128
142
|
c.azimuth AS azimuth,
|
|
129
143
|
c.mt AS mechanical_down_tilt,
|
|
130
|
-
c.et AS electrical_down_tilt
|
|
144
|
+
c.et AS electrical_down_tilt,
|
|
145
|
+
ST_Y(c.loc) AS lat,
|
|
146
|
+
ST_X(c.loc) AS lng
|
|
131
147
|
FROM radios AS r
|
|
132
148
|
JOIN calculations c ON r.last_success_calculation = c.id
|
|
133
149
|
WHERE r.is_active IS TRUE
|
|
@@ -138,13 +154,27 @@ function run(args = process.argv) {
|
|
|
138
154
|
azimuth: Number(wifiInfo.azimuth),
|
|
139
155
|
mechanicalDownTilt: Number(wifiInfo.mechanical_down_tilt),
|
|
140
156
|
electricalDownTilt: Number(wifiInfo.electrical_down_tilt),
|
|
157
|
+
serial: wifiInfo.serial,
|
|
141
158
|
} })));
|
|
159
|
+
console.log(`Found ${wifiInfos.length} WiFi hotspots in database`);
|
|
160
|
+
console.log(`${wifiInfos.filter(hasDeploymentInfo).length} have deployment info`);
|
|
161
|
+
console.log(`${wifiInfos.filter((w) => w.location).length} have valid locations`);
|
|
162
|
+
console.log(`${wifiInfos.filter((w) => w.deploymentInfo.serial).length} have valid serials`);
|
|
142
163
|
const mobileInfos = wifiInfos.map((wifiInfo) => (0, helium_entity_manager_sdk_1.mobileInfoKey)(rewardableEntityconfig, wifiInfo.hs_pubkey)[0]);
|
|
143
|
-
|
|
164
|
+
console.log("Fetching mobile info accounts from Solana...");
|
|
165
|
+
const accountInfosWithPk = (yield Promise.all((0, spl_utils_1.chunks)(mobileInfos, 100).map((chunk, idx) => __awaiter(this, void 0, void 0, function* () {
|
|
166
|
+
console.log(`Batch ${idx + 1}/${Math.ceil(mobileInfos.length / 100)} (${chunk.length} accounts)`);
|
|
167
|
+
return conn.getMultipleAccountsInfo(chunk);
|
|
168
|
+
}))))
|
|
144
169
|
.flat()
|
|
145
170
|
.map((accountInfo, idx) => (Object.assign({ pubkey: mobileInfos[idx], wifiInfo: wifiInfos[idx] }, accountInfo)));
|
|
146
|
-
|
|
171
|
+
console.log(`Found ${accountInfosWithPk.filter((acc) => acc.data).length} existing mobile info accounts`);
|
|
172
|
+
console.log("Analyzing accounts for corrections...");
|
|
173
|
+
const ixs = (yield Promise.all(accountInfosWithPk.map((acc, idx) => __awaiter(this, void 0, void 0, function* () {
|
|
147
174
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
175
|
+
if (idx % 100 === 0) {
|
|
176
|
+
console.log(`Processed ${idx}/${accountInfosWithPk.length} accounts`);
|
|
177
|
+
}
|
|
148
178
|
if (acc.data) {
|
|
149
179
|
let correction = {};
|
|
150
180
|
const decodedAcc = hem.coder.accounts.decode("mobileHotspotInfoV0", acc.data);
|
|
@@ -154,26 +184,10 @@ function run(args = process.argv) {
|
|
|
154
184
|
((_b = (_a = decodedAcc.deploymentInfo) === null || _a === void 0 ? void 0 : _a.wifiInfoV0) === null || _b === void 0 ? void 0 : _b.antenna) ||
|
|
155
185
|
0,
|
|
156
186
|
elevation: ((_d = (_c = decodedAcc.deploymentInfo) === null || _c === void 0 ? void 0 : _c.wifiInfoV0) === null || _d === void 0 ? void 0 : _d.elevation) || 0,
|
|
157
|
-
// elevation descrepency was found and backfilled so default to whats on chain
|
|
158
|
-
// decodedAcc.deploymentInfo?.wifiInfoV0?.elevation ||
|
|
159
|
-
// floored since stored on chain as i32 representation in whole meters
|
|
160
|
-
// Math.floor(acc.wifiInfo.deploymentInfo.elevation) ||
|
|
161
|
-
// 0,
|
|
162
187
|
azimuth: ((_f = (_e = decodedAcc.deploymentInfo) === null || _e === void 0 ? void 0 : _e.wifiInfoV0) === null || _f === void 0 ? void 0 : _f.azimuth) || 0,
|
|
163
|
-
// azimuth descrepency was found and backfilled so default to whats on chain
|
|
164
|
-
// decodedAcc.deploymentInfo?.wifiInfoV0?.azimuth ||
|
|
165
|
-
// acc.wifiInfo.deploymentInfo.azimuth ||
|
|
166
|
-
// 0,
|
|
167
188
|
mechanicalDownTilt: ((_h = (_g = decodedAcc.deploymentInfo) === null || _g === void 0 ? void 0 : _g.wifiInfoV0) === null || _h === void 0 ? void 0 : _h.mechanicalDownTilt) || 0,
|
|
168
|
-
// mechanicalDownTilt descrepency was found and backfilled so default to whats on chain
|
|
169
|
-
// decodedAcc.deploymentInfo?.wifiInfoV0?.mechanicalDownTilt ||
|
|
170
|
-
// acc.wifiInfo.deploymentInfo.mechanicalDownTilt ||
|
|
171
|
-
// 0,
|
|
172
189
|
electricalDownTilt: ((_k = (_j = decodedAcc.deploymentInfo) === null || _j === void 0 ? void 0 : _j.wifiInfoV0) === null || _k === void 0 ? void 0 : _k.electricalDownTilt) || 0,
|
|
173
|
-
|
|
174
|
-
// decodedAcc.deploymentInfo?.wifiInfoV0?.electricalDownTilt ||
|
|
175
|
-
// acc.wifiInfo.deploymentInfo.electricalDownTilt ||
|
|
176
|
-
// 0,
|
|
190
|
+
serial: acc.wifiInfo.deploymentInfo.serial || null,
|
|
177
191
|
};
|
|
178
192
|
const deploymentInfoChanged = !(0, fast_deep_equal_1.default)((_l = decodedAcc.deploymentInfo) === null || _l === void 0 ? void 0 : _l.wifiInfoV0, correctedDeploymentInfo);
|
|
179
193
|
const locationMissing = !decodedAcc.location && acc.wifiInfo.location;
|
|
@@ -187,10 +201,10 @@ function run(args = process.argv) {
|
|
|
187
201
|
}
|
|
188
202
|
if (Object.keys(correction).length > 0) {
|
|
189
203
|
if (!argv.commit) {
|
|
190
|
-
console.log({
|
|
191
|
-
pubkey: acc.pubkey,
|
|
192
|
-
current: Object.assign({}, (_m = decodedAcc.deploymentInfo) === null || _m === void 0 ? void 0 : _m.wifiInfoV0),
|
|
193
|
-
new: Object.assign({}, correctedDeploymentInfo),
|
|
204
|
+
console.log("Correction needed:", {
|
|
205
|
+
pubkey: acc.pubkey.toString(),
|
|
206
|
+
current: Object.assign(Object.assign({}, (locationMissing && { location: decodedAcc.location })), (_m = decodedAcc.deploymentInfo) === null || _m === void 0 ? void 0 : _m.wifiInfoV0),
|
|
207
|
+
new: Object.assign(Object.assign({}, (locationMissing && { location: correction.location })), correctedDeploymentInfo),
|
|
194
208
|
});
|
|
195
209
|
}
|
|
196
210
|
return yield hem.methods
|
|
@@ -208,15 +222,25 @@ function run(args = process.argv) {
|
|
|
208
222
|
})))).filter(spl_utils_1.truthy);
|
|
209
223
|
console.log(`Total corrections needed: ${ixs.length}`);
|
|
210
224
|
if (commit) {
|
|
225
|
+
if (ixs.length === 0) {
|
|
226
|
+
console.log("✅ No corrections needed, exiting");
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
console.log("Building and sending transactions...");
|
|
211
230
|
try {
|
|
212
231
|
const transactions = yield (0, spl_utils_1.batchInstructionsToTxsWithPriorityFee)(provider, ixs, { useFirstEstimateForAll: true });
|
|
232
|
+
console.log(`Created ${transactions.length} transactions`);
|
|
213
233
|
yield (0, spl_utils_1.bulkSendTransactions)(provider, transactions, console.log, 10, [], 100);
|
|
234
|
+
console.log("✅ All transactions completed successfully!");
|
|
214
235
|
}
|
|
215
236
|
catch (e) {
|
|
216
|
-
console.error("Failed to process mobile deployment info updates:", e);
|
|
237
|
+
console.error("❌ Failed to process mobile deployment info updates:", e);
|
|
217
238
|
process.exit(1);
|
|
218
239
|
}
|
|
219
240
|
}
|
|
241
|
+
else {
|
|
242
|
+
console.log("Dry run complete - use --commit to apply changes");
|
|
243
|
+
}
|
|
220
244
|
});
|
|
221
245
|
}
|
|
222
246
|
exports.run = run;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backfill-mobile-deployment-infos.js","sourceRoot":"","sources":["../../src/backfill-mobile-deployment-infos.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4C;AAC5C,iFAK2C;AAC3C,qEAAwD;AAExD,iDAM2B;AAC3B,sEAAwC;AACxC,iCAAqC;AACrC,4CAAoB;AACpB,2BAA4B;AAC5B,wDAAgC;AAChC,mCAAsC;
|
|
1
|
+
{"version":3,"file":"backfill-mobile-deployment-infos.js","sourceRoot":"","sources":["../../src/backfill-mobile-deployment-infos.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,8 @@ const hasDeploymentInfo = (wi) => {
|
|
|
13
13
|
wi.deploymentInfo.elevation ||
|
|
14
14
|
wi.deploymentInfo.azimuth ||
|
|
15
15
|
wi.deploymentInfo.mechanicalDownTilt ||
|
|
16
|
-
wi.deploymentInfo.electricalDownTilt
|
|
16
|
+
wi.deploymentInfo.electricalDownTilt ||
|
|
17
|
+
wi.deploymentInfo.serial);
|
|
17
18
|
};
|
|
18
19
|
export const getH3Location = (lat, lng) => {
|
|
19
20
|
try {
|
|
@@ -55,9 +56,18 @@ export async function run(args = process.argv) {
|
|
|
55
56
|
type: "boolean",
|
|
56
57
|
default: false,
|
|
57
58
|
},
|
|
59
|
+
noSsl: {
|
|
60
|
+
type: "boolean",
|
|
61
|
+
default: false,
|
|
62
|
+
describe: "Disable SSL for database connection",
|
|
63
|
+
},
|
|
58
64
|
});
|
|
59
65
|
const argv = await yarg.argv;
|
|
60
66
|
const commit = argv.commit;
|
|
67
|
+
console.log("Starting mobile deployment info backfill...");
|
|
68
|
+
console.log(`Database: ${argv.pgDatabase}@${argv.pgHost}:${argv.pgPort}`);
|
|
69
|
+
console.log(`Solana RPC: ${argv.url}`);
|
|
70
|
+
console.log(`Commit mode: ${commit ? "ENABLED" : "DRY RUN"}`);
|
|
61
71
|
process.env.ANCHOR_WALLET = argv.wallet;
|
|
62
72
|
process.env.ANCHOR_PROVIDER_URL = argv.url;
|
|
63
73
|
anchor.setProvider(anchor.AnchorProvider.local(argv.url));
|
|
@@ -66,6 +76,7 @@ export async function run(args = process.argv) {
|
|
|
66
76
|
const wallet = new anchor.Wallet(loadKeypair(argv.wallet));
|
|
67
77
|
const hem = await initHEM(provider);
|
|
68
78
|
const isRds = argv.pgHost.includes("rds.amazon.com");
|
|
79
|
+
console.log("Connecting to database...");
|
|
69
80
|
const client = new Client({
|
|
70
81
|
user: argv.pgUser,
|
|
71
82
|
password: argv.pgPassword,
|
|
@@ -73,21 +84,26 @@ export async function run(args = process.argv) {
|
|
|
73
84
|
database: argv.pgDatabase,
|
|
74
85
|
port: Number(argv.pgPort),
|
|
75
86
|
ssl: argv.noSsl
|
|
76
|
-
?
|
|
87
|
+
? false
|
|
88
|
+
: {
|
|
77
89
|
rejectUnauthorized: false,
|
|
78
|
-
}
|
|
79
|
-
: false,
|
|
90
|
+
},
|
|
80
91
|
});
|
|
81
92
|
await client.connect();
|
|
93
|
+
console.log("✅ Database connected successfully");
|
|
82
94
|
const [subDao] = subDaoKey(MOBILE_MINT);
|
|
83
95
|
const [rewardableEntityconfig] = rewardableEntityConfigKey(subDao, "MOBILE");
|
|
96
|
+
console.log("Fetching WiFi info from database...");
|
|
84
97
|
const wifiInfos = (await client.query(`
|
|
85
98
|
SELECT c.hs_pubkey,
|
|
99
|
+
r.radio_serial_number as serial,
|
|
86
100
|
c.antenna,
|
|
87
101
|
c.height AS elevation,
|
|
88
102
|
c.azimuth AS azimuth,
|
|
89
103
|
c.mt AS mechanical_down_tilt,
|
|
90
|
-
c.et AS electrical_down_tilt
|
|
104
|
+
c.et AS electrical_down_tilt,
|
|
105
|
+
ST_Y(c.loc) AS lat,
|
|
106
|
+
ST_X(c.loc) AS lng
|
|
91
107
|
FROM radios AS r
|
|
92
108
|
JOIN calculations c ON r.last_success_calculation = c.id
|
|
93
109
|
WHERE r.is_active IS TRUE
|
|
@@ -101,17 +117,31 @@ export async function run(args = process.argv) {
|
|
|
101
117
|
azimuth: Number(wifiInfo.azimuth),
|
|
102
118
|
mechanicalDownTilt: Number(wifiInfo.mechanical_down_tilt),
|
|
103
119
|
electricalDownTilt: Number(wifiInfo.electrical_down_tilt),
|
|
120
|
+
serial: wifiInfo.serial,
|
|
104
121
|
},
|
|
105
122
|
}));
|
|
123
|
+
console.log(`Found ${wifiInfos.length} WiFi hotspots in database`);
|
|
124
|
+
console.log(`${wifiInfos.filter(hasDeploymentInfo).length} have deployment info`);
|
|
125
|
+
console.log(`${wifiInfos.filter((w) => w.location).length} have valid locations`);
|
|
126
|
+
console.log(`${wifiInfos.filter((w) => w.deploymentInfo.serial).length} have valid serials`);
|
|
106
127
|
const mobileInfos = wifiInfos.map((wifiInfo) => mobileInfoKey(rewardableEntityconfig, wifiInfo.hs_pubkey)[0]);
|
|
107
|
-
|
|
128
|
+
console.log("Fetching mobile info accounts from Solana...");
|
|
129
|
+
const accountInfosWithPk = (await Promise.all(chunks(mobileInfos, 100).map(async (chunk, idx) => {
|
|
130
|
+
console.log(`Batch ${idx + 1}/${Math.ceil(mobileInfos.length / 100)} (${chunk.length} accounts)`);
|
|
131
|
+
return conn.getMultipleAccountsInfo(chunk);
|
|
132
|
+
})))
|
|
108
133
|
.flat()
|
|
109
134
|
.map((accountInfo, idx) => ({
|
|
110
135
|
pubkey: mobileInfos[idx],
|
|
111
136
|
wifiInfo: wifiInfos[idx],
|
|
112
137
|
...accountInfo,
|
|
113
138
|
}));
|
|
114
|
-
|
|
139
|
+
console.log(`Found ${accountInfosWithPk.filter((acc) => acc.data).length} existing mobile info accounts`);
|
|
140
|
+
console.log("Analyzing accounts for corrections...");
|
|
141
|
+
const ixs = (await Promise.all(accountInfosWithPk.map(async (acc, idx) => {
|
|
142
|
+
if (idx % 100 === 0) {
|
|
143
|
+
console.log(`Processed ${idx}/${accountInfosWithPk.length} accounts`);
|
|
144
|
+
}
|
|
115
145
|
if (acc.data) {
|
|
116
146
|
let correction = {};
|
|
117
147
|
const decodedAcc = hem.coder.accounts.decode("mobileHotspotInfoV0", acc.data);
|
|
@@ -121,26 +151,10 @@ export async function run(args = process.argv) {
|
|
|
121
151
|
decodedAcc.deploymentInfo?.wifiInfoV0?.antenna ||
|
|
122
152
|
0,
|
|
123
153
|
elevation: decodedAcc.deploymentInfo?.wifiInfoV0?.elevation || 0,
|
|
124
|
-
// elevation descrepency was found and backfilled so default to whats on chain
|
|
125
|
-
// decodedAcc.deploymentInfo?.wifiInfoV0?.elevation ||
|
|
126
|
-
// floored since stored on chain as i32 representation in whole meters
|
|
127
|
-
// Math.floor(acc.wifiInfo.deploymentInfo.elevation) ||
|
|
128
|
-
// 0,
|
|
129
154
|
azimuth: decodedAcc.deploymentInfo?.wifiInfoV0?.azimuth || 0,
|
|
130
|
-
// azimuth descrepency was found and backfilled so default to whats on chain
|
|
131
|
-
// decodedAcc.deploymentInfo?.wifiInfoV0?.azimuth ||
|
|
132
|
-
// acc.wifiInfo.deploymentInfo.azimuth ||
|
|
133
|
-
// 0,
|
|
134
155
|
mechanicalDownTilt: decodedAcc.deploymentInfo?.wifiInfoV0?.mechanicalDownTilt || 0,
|
|
135
|
-
// mechanicalDownTilt descrepency was found and backfilled so default to whats on chain
|
|
136
|
-
// decodedAcc.deploymentInfo?.wifiInfoV0?.mechanicalDownTilt ||
|
|
137
|
-
// acc.wifiInfo.deploymentInfo.mechanicalDownTilt ||
|
|
138
|
-
// 0,
|
|
139
156
|
electricalDownTilt: decodedAcc.deploymentInfo?.wifiInfoV0?.electricalDownTilt || 0,
|
|
140
|
-
|
|
141
|
-
// decodedAcc.deploymentInfo?.wifiInfoV0?.electricalDownTilt ||
|
|
142
|
-
// acc.wifiInfo.deploymentInfo.electricalDownTilt ||
|
|
143
|
-
// 0,
|
|
157
|
+
serial: acc.wifiInfo.deploymentInfo.serial || null,
|
|
144
158
|
};
|
|
145
159
|
const deploymentInfoChanged = !deepEqual(decodedAcc.deploymentInfo?.wifiInfoV0, correctedDeploymentInfo);
|
|
146
160
|
const locationMissing = !decodedAcc.location && acc.wifiInfo.location;
|
|
@@ -160,12 +174,14 @@ export async function run(args = process.argv) {
|
|
|
160
174
|
}
|
|
161
175
|
if (Object.keys(correction).length > 0) {
|
|
162
176
|
if (!argv.commit) {
|
|
163
|
-
console.log({
|
|
164
|
-
pubkey: acc.pubkey,
|
|
177
|
+
console.log("Correction needed:", {
|
|
178
|
+
pubkey: acc.pubkey.toString(),
|
|
165
179
|
current: {
|
|
180
|
+
...(locationMissing && { location: decodedAcc.location }),
|
|
166
181
|
...decodedAcc.deploymentInfo?.wifiInfoV0,
|
|
167
182
|
},
|
|
168
183
|
new: {
|
|
184
|
+
...(locationMissing && { location: correction.location }),
|
|
169
185
|
...correctedDeploymentInfo,
|
|
170
186
|
},
|
|
171
187
|
});
|
|
@@ -185,14 +201,24 @@ export async function run(args = process.argv) {
|
|
|
185
201
|
}))).filter(truthy);
|
|
186
202
|
console.log(`Total corrections needed: ${ixs.length}`);
|
|
187
203
|
if (commit) {
|
|
204
|
+
if (ixs.length === 0) {
|
|
205
|
+
console.log("✅ No corrections needed, exiting");
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
console.log("Building and sending transactions...");
|
|
188
209
|
try {
|
|
189
210
|
const transactions = await batchInstructionsToTxsWithPriorityFee(provider, ixs, { useFirstEstimateForAll: true });
|
|
211
|
+
console.log(`Created ${transactions.length} transactions`);
|
|
190
212
|
await bulkSendTransactions(provider, transactions, console.log, 10, [], 100);
|
|
213
|
+
console.log("✅ All transactions completed successfully!");
|
|
191
214
|
}
|
|
192
215
|
catch (e) {
|
|
193
|
-
console.error("Failed to process mobile deployment info updates:", e);
|
|
216
|
+
console.error("❌ Failed to process mobile deployment info updates:", e);
|
|
194
217
|
process.exit(1);
|
|
195
218
|
}
|
|
196
219
|
}
|
|
220
|
+
else {
|
|
221
|
+
console.log("Dry run complete - use --commit to apply changes");
|
|
222
|
+
}
|
|
197
223
|
}
|
|
198
224
|
//# sourceMappingURL=backfill-mobile-deployment-infos.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backfill-mobile-deployment-infos.js","sourceRoot":"","sources":["../../../src/backfill-mobile-deployment-infos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAEL,IAAI,IAAI,OAAO,EACf,aAAa,EACb,yBAAyB,GAC1B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAExD,OAAO,EACL,WAAW,EACX,qCAAqC,EACrC,oBAAoB,EACpB,MAAM,EACN,MAAM,GACP,MAAM,mBAAmB,CAAC;AAC3B,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"backfill-mobile-deployment-infos.js","sourceRoot":"","sources":["../../../src/backfill-mobile-deployment-infos.ts"],"names":[],"mappings":"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"}
|