Skip to content

Commit

Permalink
feat: generate message verify url (#24)
Browse files Browse the repository at this point in the history
  • Loading branch information
dated authored Aug 17, 2022
1 parent 56e2c20 commit 7469d3d
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 2 deletions.
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,18 @@ builder.generateMessageSign("hello world");
> https://app.arkvault.io/#/?method=sign&message=hello+world&coin=ARK&nethash=6e84d08bd299ed97c212c886c98a57e36545c8f5d645ca7eeae63a8bd62d8988"
```
#### Verify Message
```js
builder.generateMessageVerify({
message: "hello world",
signatory: "025f81956d5826bad7d30daed2b5c8c98e72046c1ec8323da336445476183fb7ca",
signature: "22f8ef55e8120fbf51e2407c808a1cc98d7ef961646226a3d3fad606437f8ba49ab68dc33c6d4a478f954c72e9bac2b4a4fe48baa70121a311a875dba1527d9d",
});

> https://app.arkvault.io/#/?method=verify&message=hello+world&signatory=025f81956d5826bad7d30daed2b5c8c98e72046c1ec8323da336445476183fb7ca&signature=22f8ef55e8120fbf51e2407c808a1cc98d7ef961646226a3d3fad606437f8ba49ab68dc33c6d4a478f954c72e9bac2b4a4fe48baa70121a311a875dba1527d9d&coin=ARK&nethash=6e84d08bd299ed97c212c886c98a57e36545c8f5d645ca7eeae63a8bd62d8988"
```
> More detailed docs will follow soon
## Development
Expand Down
26 changes: 25 additions & 1 deletion source/contracts.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
import { Methods } from "./enums";

interface SignedMessage {
signatory: string;
message: string;
signature: string;
}

type BaseOptions = {
coin?: string;
nethash?: string;
Expand All @@ -14,6 +20,8 @@ type MessageSignOptions = {
address?: string;
} & BaseOptions;

type MessageVerifyOptions = {} & BaseOptions;

type GenerateTransferOptions = {
recipient?: string;
method?: Methods.Transfer;
Expand All @@ -24,4 +32,20 @@ type GenerateMessageSignOptions = {
method?: Methods.Sign;
} & MessageSignOptions;

export type { BaseOptions, GenerateMessageSignOptions, GenerateTransferOptions, MessageSignOptions, TransferOptions };
type GenerateMessageVerifyOptions = {
message?: string;
signatory?: string;
signature?: string;
method?: Methods.Verify;
} & MessageVerifyOptions;

export type {
BaseOptions,
GenerateMessageSignOptions,
GenerateMessageVerifyOptions,
GenerateTransferOptions,
MessageSignOptions,
MessageVerifyOptions,
SignedMessage,
TransferOptions,
};
1 change: 1 addition & 0 deletions source/enums.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
enum Methods {
"Transfer" = "transfer",
"Sign" = "sign",
"Verify" = "verify",
}

enum Networks {
Expand Down
53 changes: 53 additions & 0 deletions source/url-builder.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,4 +158,57 @@ describe("URLBuilder", ({ assert, it }) => {
//@ts-ignore
assert.throws(() => builder.generateMessageSign(undefined), "message is required");
});

it("should generate verify message url", () => {
const builder = new URLBuilder("baseUrl");

assert.is(
builder.generateMessageVerify({
message: "hello world",
signatory: "025f81956d5826bad7d30daed2b5c8c98e72046c1ec8323da336445476183fb7ca",
signature:
"22f8ef55e8120fbf51e2407c808a1cc98d7ef961646226a3d3fad606437f8ba49ab68dc33c6d4a478f954c72e9bac2b4a4fe48baa70121a311a875dba1527d9d",
}),
"baseUrl?message=hello+world&method=verify&signatory=025f81956d5826bad7d30daed2b5c8c98e72046c1ec8323da336445476183fb7ca&signature=22f8ef55e8120fbf51e2407c808a1cc98d7ef961646226a3d3fad606437f8ba49ab68dc33c6d4a478f954c72e9bac2b4a4fe48baa70121a311a875dba1527d9d&coin=ARK&nethash=6e84d08bd299ed97c212c886c98a57e36545c8f5d645ca7eeae63a8bd62d8988",
);
});

it("should require all properties of signed message when generating verify message url", () => {
const builder = new URLBuilder("baseUrl");

assert.throws(
() =>
builder.generateMessageVerify({
//@ts-ignore
message: undefined,
signatory: "025f81956d5826bad7d30daed2b5c8c98e72046c1ec8323da336445476183fb7ca",
signature:
"22f8ef55e8120fbf51e2407c808a1cc98d7ef961646226a3d3fad606437f8ba49ab68dc33c6d4a478f954c72e9bac2b4a4fe48baa70121a311a875dba1527d9d",
}),
new Error("signed message is invalid"),
);

assert.throws(
() =>
builder.generateMessageVerify({
message: "hello world",
//@ts-ignore
signatory: undefined,
signature:
"22f8ef55e8120fbf51e2407c808a1cc98d7ef961646226a3d3fad606437f8ba49ab68dc33c6d4a478f954c72e9bac2b4a4fe48baa70121a311a875dba1527d9d",
}),
new Error("signed message is invalid"),
);

assert.throws(
() =>
builder.generateMessageVerify({
message: "hello world",
signatory: "025f81956d5826bad7d30daed2b5c8c98e72046c1ec8323da336445476183fb7ca",
//@ts-ignore
signature: undefined,
}),
new Error("signed message is invalid"),
);
});
});
17 changes: 16 additions & 1 deletion source/url-builder.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import {
GenerateMessageSignOptions,
GenerateMessageVerifyOptions,
GenerateTransferOptions,
MessageSignOptions,
SignedMessage,
TransferOptions,
} from "./contracts.js";
import { Methods, Networks } from "./enums.js";
Expand Down Expand Up @@ -71,7 +73,20 @@ export class URLBuilder {
});
}

#generate(options: GenerateTransferOptions | GenerateMessageSignOptions): string {
public generateMessageVerify({ message, signatory, signature }: SignedMessage) {
if (!message || !signatory || !signature) {
throw new Error("signed message is invalid");
}

return this.#generate({
message,
method: Methods.Verify,
signatory,
signature,
});
}

#generate(options: GenerateTransferOptions | GenerateMessageSignOptions | GenerateMessageVerifyOptions): string {
if (!this.#coin) {
throw new Error("coin has to be set");
}
Expand Down

0 comments on commit 7469d3d

Please sign in to comment.