Skip to content

Commit 693111f

Browse files
rotarurtmigone
andauthored
fix(cli): make POI parameters optional for action queue commands (#1194)
Signed-off-by: Tomás Migone <tomas@edgeandnode.com> Co-authored-by: Tomás Migone <tomas@edgeandnode.com>
1 parent e6b0f0d commit 693111f

4 files changed

Lines changed: 58 additions & 37 deletions

File tree

packages/indexer-cli/src/__tests__/actions.unit.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ describe('buildActionInput', () => {
4949
expect(result.publicPOI).toBe(zeroPOI)
5050
expect(result.force).toBe(false)
5151
expect(result.allocationID).toBe('0xallocationId')
52-
expect(result.poiBlockNumber).toBeUndefined()
52+
expect(result.poiBlockNumber).toBe(0)
5353
})
5454
})
5555

packages/indexer-cli/src/actions.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,23 +49,31 @@ function normalizePOIParams(
4949
normalizedPoi = zeroPOI
5050
}
5151

52-
let normalizedPublicPoi = publicPOI
53-
if (normalizedPublicPoi === '0' || normalizedPublicPoi === '0x0') {
52+
// Normalize publicPOI: convert '0' or '0x0' to zeroPOI
53+
let normalizedPublicPoi: string | undefined = publicPOI
54+
if (publicPOI === '0' || publicPOI === '0x0') {
5455
normalizedPublicPoi = zeroPOI
5556
}
5657

57-
let poiBlockNumber: number | undefined = undefined
58+
// Normalize blockNumber: parse to number if provided
59+
let normalizedBlockNumber: number | undefined = undefined
5860
if (blockNumber !== undefined) {
59-
poiBlockNumber = parseInt(blockNumber, 10)
60-
if (isNaN(poiBlockNumber)) {
61+
normalizedBlockNumber = parseInt(blockNumber, 10)
62+
if (isNaN(normalizedBlockNumber)) {
6163
throw new Error(`Invalid block number: ${blockNumber}`)
6264
}
6365
}
6466

67+
// When POI is zero, default publicPOI and blockNumber to zero as well
68+
if (normalizedPoi === zeroPOI) {
69+
normalizedPublicPoi = normalizedPublicPoi ?? zeroPOI
70+
normalizedBlockNumber = normalizedBlockNumber ?? 0
71+
}
72+
6573
return {
6674
poi: normalizedPoi,
6775
publicPOI: normalizedPublicPoi,
68-
poiBlockNumber,
76+
poiBlockNumber: normalizedBlockNumber,
6977
}
7078
}
7179

packages/indexer-common/src/__tests__/actions.test.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ describe('Action Validation', () => {
139139

140140
expect(isValidActionInput(missingDeploymentID)).toBe(false)
141141

142-
// With POI provided, must also have publicPOI and poiBlockNumber
143-
const withPoiButMissingPublicPOI = {
142+
// With non-zero POI provided, publicPOI and poiBlockNumber are required
143+
const withNonZeroPoiButMissingPublicPOI = {
144144
...baseAction,
145145
type: ActionType.PRESENT_POI,
146146
deploymentID: 'Qmtest',
@@ -149,7 +149,19 @@ describe('Action Validation', () => {
149149
isLegacy: false,
150150
}
151151

152-
expect(isValidActionInput(withPoiButMissingPublicPOI)).toBe(false)
152+
expect(isValidActionInput(withNonZeroPoiButMissingPublicPOI)).toBe(false)
153+
154+
// With zero POI, publicPOI and poiBlockNumber are optional
155+
const withZeroPoi = {
156+
...baseAction,
157+
type: ActionType.PRESENT_POI,
158+
deploymentID: 'Qmtest',
159+
allocationID: '0x1234567890123456789012345678901234567890',
160+
poi: '0x' + '00'.repeat(32),
161+
isLegacy: false,
162+
}
163+
164+
expect(isValidActionInput(withZeroPoi)).toBe(true)
153165

154166
// With all POI fields provided
155167
const withAllPoiFields = {

packages/indexer-common/src/actions.ts

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,26 @@ export interface ActionInput {
5757
isLegacy: boolean
5858
}
5959

60+
const ZERO_POI = '0x0000000000000000000000000000000000000000000000000000000000000000'
61+
62+
// Validates POI-related fields for non-legacy actions.
63+
// When POI is zero, publicPOI and poiBlockNumber are optional.
64+
// When POI is non-zero, all three fields are required.
65+
/* eslint-disable @typescript-eslint/no-explicit-any */
66+
const hasValidPOIParams = (variableToCheck: any): boolean => {
67+
if (variableToCheck.isLegacy || variableToCheck.poi === undefined) {
68+
return true
69+
}
70+
if (variableToCheck.poi === ZERO_POI) {
71+
return 'poi' in variableToCheck
72+
}
73+
return (
74+
'poi' in variableToCheck &&
75+
'publicPOI' in variableToCheck &&
76+
'poiBlockNumber' in variableToCheck
77+
)
78+
}
79+
6080
export const isValidActionInput = (
6181
/* eslint-disable @typescript-eslint/no-explicit-any */
6282
variableToCheck: any,
@@ -71,29 +91,16 @@ export const isValidActionInput = (
7191
break
7292
case ActionType.UNALLOCATE:
7393
hasActionParams =
74-
'deploymentID' in variableToCheck && 'allocationID' in variableToCheck
75-
76-
if (!variableToCheck.isLegacy && variableToCheck.poi !== undefined) {
77-
hasActionParams =
78-
hasActionParams &&
79-
'poi' in variableToCheck &&
80-
'publicPOI' in variableToCheck &&
81-
'poiBlockNumber' in variableToCheck
82-
}
94+
'deploymentID' in variableToCheck &&
95+
'allocationID' in variableToCheck &&
96+
hasValidPOIParams(variableToCheck)
8397
break
8498
case ActionType.REALLOCATE:
8599
hasActionParams =
86100
'deploymentID' in variableToCheck &&
87101
'allocationID' in variableToCheck &&
88-
'amount' in variableToCheck
89-
90-
if (!variableToCheck.isLegacy && variableToCheck.poi !== undefined) {
91-
hasActionParams =
92-
hasActionParams &&
93-
'poi' in variableToCheck &&
94-
'publicPOI' in variableToCheck &&
95-
'poiBlockNumber' in variableToCheck
96-
}
102+
'amount' in variableToCheck &&
103+
hasValidPOIParams(variableToCheck)
97104
break
98105
case ActionType.RESIZE:
99106
hasActionParams =
@@ -103,15 +110,9 @@ export const isValidActionInput = (
103110
break
104111
case ActionType.PRESENT_POI:
105112
hasActionParams =
106-
'deploymentID' in variableToCheck && 'allocationID' in variableToCheck
107-
108-
if (!variableToCheck.isLegacy && variableToCheck.poi !== undefined) {
109-
hasActionParams =
110-
hasActionParams &&
111-
'poi' in variableToCheck &&
112-
'publicPOI' in variableToCheck &&
113-
'poiBlockNumber' in variableToCheck
114-
}
113+
'deploymentID' in variableToCheck &&
114+
'allocationID' in variableToCheck &&
115+
hasValidPOIParams(variableToCheck)
115116
break
116117
}
117118
return (

0 commit comments

Comments
 (0)