Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(sdk): sdk cleanup #909

Merged
merged 1 commit into from
Feb 5, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/cool-tomatoes-deliver.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@siafoundation/sdk': minor
---

Added v2TransactionInputSigHash and signHash methods to API.
5 changes: 5 additions & 0 deletions .changeset/friendly-houses-matter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@siafoundation/types': minor
---

Added a Result type.
5 changes: 5 additions & 0 deletions .changeset/tidy-lobsters-float.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@siafoundation/sdk': minor
---

Improved the accuracy of all return types.
152 changes: 103 additions & 49 deletions libs/sdk/src/rhp.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,11 @@ describe('rhp', () => {
describe('generateAccount', () => {
it('works', async () => {
const sdk = await initSDKTest()
const { privateKey, account, error } = sdk.rhp.generateAccount()
expect(error).toBeUndefined()
const response = sdk.rhp.generateAccount()
if ('error' in response) {
throw new Error(response.error)
}
const { privateKey, account } = response
expect(privateKey).toBeDefined()
expect(privateKey?.length).toBeGreaterThan(40)
expect(account).toBeDefined()
Expand All @@ -27,24 +30,34 @@ describe('rhp', () => {
it('valid', async () => {
const sdk = await initSDKTest()
const encode = sdk.rhp.encodeSettingsRequest()
expect(encode.rpc).toBeDefined()
expect(encode.error).not.toBeDefined()
const decode = sdk.rhp.decodeSettingsRequest(encode.rpc!)
if ('error' in encode) {
throw new Error(encode.error)
}
const { rpc } = encode
expect(rpc).toBeDefined()
const decode = sdk.rhp.decodeSettingsRequest(rpc!)
if ('error' in decode) {
throw new Error(decode.error)
}
expect(decode.data).toEqual({})
expect(decode.error).toBeUndefined()
})
})
describe('response', () => {
it('valid', async () => {
const sdk = await initSDKTest()
const json = getSampleRPCSettingsResponse()
const encode = sdk.rhp.encodeSettingsResponse(json)
expect(encode.rpc).toBeDefined()
expect(encode.rpc?.length).toEqual(264)
expect(encode.error).toBeUndefined()
const decode = sdk.rhp.decodeSettingsResponse(encode.rpc!)
if ('error' in encode) {
throw new Error(encode.error)
}
const { rpc } = encode
expect(rpc).toBeDefined()
expect(rpc?.length).toEqual(264)
const decode = sdk.rhp.decodeSettingsResponse(rpc!)
if ('error' in decode) {
throw new Error(decode.error)
}
expect(decode.data).toEqual(json)
expect(decode.error).toBeUndefined()
})
it('encode error', async () => {
const sdk = await initSDKTest()
Expand All @@ -54,20 +67,29 @@ describe('rhp', () => {
},
} as RPCSettingsResponse
const encode = sdk.rhp.encodeSettingsResponse(json)
expect(encode.rpc).toBeUndefined()
expect(encode.error).toEqual('address must be 76 characters')
if ('error' in encode) {
expect(encode.error).toEqual('address must be 76 characters')
} else {
throw new Error('expected error')
}
})
it('decode error', async () => {
const sdk = await initSDKTest()
const json = getSampleRPCSettingsResponse()
const encode = sdk.rhp.encodeSettingsResponse(json)
if ('error' in encode) {
throw new Error(encode.error)
}
// manipulate the valid rpc to make it invalid
encode.rpc!.set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 0)
const decode = sdk.rhp.decodeSettingsResponse(encode.rpc!)
expect(decode.data).not.toEqual(json)
expect(decode.error).toEqual(
'encoded object contains invalid length prefix (723118041428460547 elems > 11254 bytes left in stream)'
)
if ('error' in decode) {
expect(decode.error).toEqual(
'encoded object contains invalid length prefix (723118041428460547 elems > 11254 bytes left in stream)'
)
} else {
throw new Error('expected error')
}
})
})
})
Expand All @@ -91,11 +113,16 @@ describe('rhp', () => {
length: 4,
}
const encode = sdk.rhp.encodeReadSectorRequest(json)
expect(encode.rpc?.length).toEqual(376)
expect(encode.error).toBeUndefined()
const decode = sdk.rhp.decodeReadSectorRequest(encode.rpc!)
if ('error' in encode) {
throw new Error(encode.error)
}
const { rpc } = encode
expect(rpc?.length).toEqual(376)
const decode = sdk.rhp.decodeReadSectorRequest(rpc!)
if ('error' in decode) {
throw new Error(decode.error)
}
expect(decode.data).toEqual(json)
expect(decode.error).toBeUndefined()
})
it('encode error', async () => {
const sdk = await initSDKTest()
Expand All @@ -114,10 +141,13 @@ describe('rhp', () => {
length: 4,
}
const encode = sdk.rhp.encodeReadSectorRequest(json)
expect(encode.rpc).toBeUndefined()
expect(encode.error).toEqual(
"decoding acct:<hex> failed: encoding/hex: invalid byte: U+0069 'i'"
)
if ('error' in encode) {
expect(encode.error).toEqual(
"decoding acct:<hex> failed: encoding/hex: invalid byte: U+0069 'i'"
)
} else {
throw new Error('expected error')
}
})
})
describe('response', () => {
Expand All @@ -130,17 +160,22 @@ describe('rhp', () => {
dataLength: 4,
}
const encode = sdk.rhp.encodeReadSectorResponse(json)
expect(encode.rpc?.toString()).toEqual(
if ('error' in encode) {
throw new Error(encode.error)
}
const { rpc } = encode
expect(rpc?.toString()).toEqual(
[
0, 1, 0, 0, 0, 0, 0, 0, 0, 69, 114, 86, 214, 161, 96, 59, 239, 127,
169, 87, 167, 11, 91, 169, 106, 157, 239, 47, 234, 139, 76, 20, 131,
6, 13, 123, 165, 207, 138, 7, 44, 4, 0, 0, 0, 0, 0, 0, 0,
].toString()
)
expect(encode.error).toBeUndefined()
const decode = sdk.rhp.decodeReadSectorResponse(encode.rpc!)
const decode = sdk.rhp.decodeReadSectorResponse(rpc!)
if ('error' in decode) {
throw new Error(decode.error)
}
expect(decode.data).toEqual(json)
expect(decode.error).toBeUndefined()
})
it('encode error', async () => {
const sdk = await initSDKTest()
Expand All @@ -149,10 +184,13 @@ describe('rhp', () => {
dataLength: 4,
}
const encode = sdk.rhp.encodeReadSectorResponse(json)
expect(encode.rpc).toBeUndefined()
expect(encode.error).toEqual(
'decoding "invalid" failed: encoding/hex: invalid byte: U+0069 \'i\''
)
if ('error' in encode) {
expect(encode.error).toEqual(
'decoding "invalid" failed: encoding/hex: invalid byte: U+0069 \'i\''
)
} else {
throw new Error('expected error')
}
})
})
})
Expand All @@ -174,11 +212,16 @@ describe('rhp', () => {
prices: getSampleHostPrices(),
}
const encode = sdk.rhp.encodeWriteSectorRequest(json)
expect(encode.rpc?.length).toEqual(336)
expect(encode.error).toBeUndefined()
const decode = sdk.rhp.decodeWriteSectorRequest(encode.rpc!)
if ('error' in encode) {
throw new Error(encode.error)
}
const { rpc } = encode
expect(rpc?.length).toEqual(336)
const decode = sdk.rhp.decodeWriteSectorRequest(rpc!)
if ('error' in decode) {
throw new Error(decode.error)
}
expect(decode.data).toEqual(json)
expect(decode.error).toBeUndefined()
})
it('encode error', async () => {
const sdk = await initSDKTest()
Expand All @@ -195,10 +238,13 @@ describe('rhp', () => {
prices: getSampleHostPrices(),
} as RPCWriteSectorRequest
const encode = sdk.rhp.encodeWriteSectorRequest(json)
expect(encode.rpc).toBeUndefined()
expect(encode.error).toEqual(
"decoding acct:<hex> failed: encoding/hex: invalid byte: U+0069 'i'"
)
if ('error' in encode) {
expect(encode.error).toEqual(
"decoding acct:<hex> failed: encoding/hex: invalid byte: U+0069 'i'"
)
} else {
throw new Error('expected error')
}
})
})
describe('response', () => {
Expand All @@ -208,28 +254,36 @@ describe('rhp', () => {
root: '457256d6a1603bef7fa957a70b5ba96a9def2fea8b4c1483060d7ba5cf8a072c',
}
const encode = sdk.rhp.encodeWriteSectorResponse(json)
expect(encode.rpc?.toString()).toEqual(
if ('error' in encode) {
throw new Error(encode.error)
}
const { rpc } = encode
expect(rpc?.toString()).toEqual(
[
0, 69, 114, 86, 214, 161, 96, 59, 239, 127, 169, 87, 167, 11, 91,
169, 106, 157, 239, 47, 234, 139, 76, 20, 131, 6, 13, 123, 165, 207,
138, 7, 44,
].toString()
)
expect(encode.error).toBeUndefined()
const decode = sdk.rhp.decodeWriteSectorResponse(encode.rpc!)
const decode = sdk.rhp.decodeWriteSectorResponse(rpc!)
if ('error' in decode) {
throw new Error(decode.error)
}
expect(decode.data).toEqual(json)
expect(decode.error).toBeUndefined()
})
it('encode error', async () => {
const sdk = await initSDKTest()
const json = {
root: 'invalid',
} as RPCWriteSectorResponse
const encode = sdk.rhp.encodeWriteSectorResponse(json)
expect(encode.rpc).toBeUndefined()
expect(encode.error).toEqual(
'decoding "invalid" failed: encoding/hex: invalid byte: U+0069 \'i\''
)
if ('error' in encode) {
expect(encode.error).toEqual(
'decoding "invalid" failed: encoding/hex: invalid byte: U+0069 \'i\''
)
} else {
throw new Error('expected error')
}
})
})
})
Expand Down
Loading
Loading