Go to file
Thomas E Lackey b5fce86d48 Add new record types ApplicationRecord, WebAppDeploymentRecord, GeneralRecord (#44)
See also: cerc-io/laconicd#113

![image](/attachments/db05bbb6-86ca-4fbb-a8a4-fcd06501b1b1)

```
message ApplicationRecord {
  string type           = 1 [(gogoproto.moretags) = "json:\"type\" yaml:\"type\""];
  string name           = 2 [(gogoproto.moretags) = "json:\"name\" yaml:\"name\""];
  string description    = 3 [(gogoproto.moretags) = "json:\"description\" yaml:\"description\""];
  string version        = 4 [(gogoproto.moretags) = "json:\"version\" yaml:\"version\""];
  string homepage       = 5 [(gogoproto.moretags) = "json:\"homepage\" yaml:\"homepage\""];
  string license        = 6 [(gogoproto.moretags) = "json:\"license\" yaml:\"license\""];
  string author         = 7 [(gogoproto.moretags) = "json:\"author\" yaml:\"author\""];
  string repository     = 8 [(gogoproto.moretags) = "json:\"repository\" yaml:\"repository\""];
  string repository_tag = 9 [(gogoproto.moretags) = "json:\"repositoryTag\" yaml:\"repositoryTag\""];
  string app_version    = 10 [(gogoproto.moretags) = "json:\"appVersion\" yaml:\"appVersion\""];
  string app_type       = 11 [(gogoproto.moretags) = "json:\"appType\" yaml:\"appType\""];
  string meta           = 20 [(gogoproto.moretags) = "json:\"meta\" yaml:\"meta\""];
  repeated string tags  = 21 [(gogoproto.moretags) = "json:\"tags\" yaml:\"tags\""];
}

message WebAppDeploymentRecord {
  string type           = 1 [(gogoproto.moretags) = "json:\"type\" yaml:\"type\""];
  string name           = 2 [(gogoproto.moretags) = "json:\"name\" yaml:\"name\""];
  string description    = 3 [(gogoproto.moretags) = "json:\"description\" yaml:\"description\""];
  string version        = 4 [(gogoproto.moretags) = "json:\"version\" yaml:\"version\""];
  string application    = 5 [(gogoproto.moretags) = "json:\"application\" yaml:\"application\""];
  string url            = 6 [(gogoproto.moretags) = "json:\"\" yaml:\"name\""];
  string meta           = 20 [(gogoproto.moretags) = "json:\"meta\" yaml:\"meta\""];
  repeated string tags  = 21 [(gogoproto.moretags) = "json:\"tags\" yaml:\"tags\""];
}

message GeneralRecord {
  string type           = 1 [(gogoproto.moretags) = "json:\"type\" yaml:\"type\""];
  string name           = 2 [(gogoproto.moretags) = "json:\"name\" yaml:\"name\""];
  string description    = 3 [(gogoproto.moretags) = "json:\"description\" yaml:\"description\""];
  string version        = 4 [(gogoproto.moretags) = "json:\"version\" yaml:\"version\""];
  string category       = 5 [(gogoproto.moretags) = "json:\"category\" yaml:\"category\""];
  string value          = 6 [(gogoproto.moretags) = "json:\"value\" yaml:\"value\""];
  string meta           = 20 [(gogoproto.moretags) = "json:\"meta\" yaml:\"meta\""];
  repeated string tags  = 21 [(gogoproto.moretags) = "json:\"tags\" yaml:\"tags\""];
```

```
❯ cat general.yml
record:
  type: GeneralRecord
  name: my-generic-record
  version: 0.0.1
  value: "anything-goes-here"
  category: filter-by-this
  tags:
    - a
    - b
    - c
  meta:
    foo: bar
    bar:
      baz: boz

❯ bin/laconic cns record publish --filename general.yml --bond-id ba774084e25af5b29be126dda0bb910d93dea3634713a438ac257da5bbdc631c
{
  "id": "bafyreigt3he52eia5g4i5pnst4dfcuwwgjdoul6xmcke2obz5os4xwoo3q"
}

❯ bin/laconic cns record get --id bafyreigt3he52eia5g4i5pnst4dfcuwwgjdoul6xmcke2obz5os4xwoo3q
[
  {
    "id": "bafyreigt3he52eia5g4i5pnst4dfcuwwgjdoul6xmcke2obz5os4xwoo3q",
    "names": null,
    "owners": [
      "9A66500A9AA574CAAB4EDB26F7333590BF452CE0"
    ],
    "bondId": "ba774084e25af5b29be126dda0bb910d93dea3634713a438ac257da5bbdc631c",
    "createTime": "2023-11-17T23:11:27Z",
    "expiryTime": "2024-11-16T23:11:27Z",
    "attributes": {
      "meta": "{\"foo\":\"bar\",\"bar\":{\"baz\":\"boz\"}}",
      "tags": [
        "a",
        "b",
        "c"
      ],
      "type": "GeneralRecord",
      "name": "my-generic-record",
      "version": "0.0.1",
      "category": "filter-by-this",
      "value": "anything-goes-here"
    }
  }
]
```

> Note: The repeated items are preserved as lists, but the object/map ends up encoded as a string.  It would be nice to avoid this.

Reviewed-on: cerc-io/laconic-sdk#44
Reviewed-by: David Boreham <dboreham@noreply.git.vdb.to>
Co-authored-by: Thomas E Lackey <telackey@bozemanpass.com>
Co-committed-by: Thomas E Lackey <telackey@bozemanpass.com>
2023-11-20 22:01:19 +00:00
.gitea/workflows typo (#40) 2023-04-20 14:36:32 -05:00
.github/workflows Auction nameservice tests (#28) 2023-02-10 14:44:23 -05:00
proto Add new record types ApplicationRecord, WebAppDeploymentRecord, GeneralRecord (#44) 2023-11-20 22:01:19 +00:00
scripts Message for creating bond 2022-04-21 09:44:24 +05:30
src Add new record types ApplicationRecord, WebAppDeploymentRecord, GeneralRecord (#44) 2023-11-20 22:01:19 +00:00
.env.example Changes to use laconic-sdk with console-app (#10) 2022-12-09 14:25:13 +05:30
.gitignore Auction nameservice tests (#28) 2023-02-10 14:44:23 -05:00
.npmignore Add .npmignore file to make publish work 2022-12-01 20:24:58 -07:00
DEVELOPMENT.md Replace wrn with crn 2022-04-21 09:44:24 +05:30
Dockerfile-sdk Auction nameservice tests (#28) 2023-02-10 14:44:23 -05:00
entrypoint.sh Auction nameservice tests (#28) 2023-02-10 14:44:23 -05:00
jest.config.js Changes from review 2022-04-21 09:44:24 +05:30
package.json Add new record types ApplicationRecord, WebAppDeploymentRecord, GeneralRecord (#44) 2023-11-20 22:01:19 +00:00
README.md quick README update to reflect reality 2023-02-06 12:47:29 -05:00
tsconfig.json Implement setRecord and add test for setAutorityBond 2022-04-21 09:44:24 +05:30
yarn.lock Add new record types ApplicationRecord, WebAppDeploymentRecord, GeneralRecord (#44) 2023-11-20 22:01:19 +00:00

laconic-sdk

Client library used by TS/JS applications to communicate with laconicd.

Tests

Follow these steps to run the tests:

  • After cloning this repo run:

    yarn
    
  • Copy .env.example file and create a .env file.

  • Clone the laconicd repo and change to repo directory.

  • Run the chain using ./init.sh.

  • Export the private key using:

    laconicd keys export mykey --unarmored-hex --unsafe
    
  • Copy the private key and assign it to variable PRIVATE_KEY in the .env file.

  • Run the tests in laconic-sdk repo:

    yarn test
    
  • Run the tests with auctions enabled

    • In laconicd repo run:

      TEST_AUCTION_ENABLED=true ./init.sh
      
    • Export the private key and change it in .env file again using:

      laconicd keys export mykey --unarmored-hex --unsafe
      
    • Run tests:

      yarn test:auctions
      
  • Run the tests for record and authority expiry

    • In laconicd repo run:

      TEST_REGISTRY_EXPIRY=true ./init.sh
      
    • Export the private key and change it in .env file again using:

      laconicd keys export mykey --unarmored-hex --unsafe
      
    • Run tests:

      yarn test:nameservice-expiry
      

Development

README

Known Issues

  • Passing a float type value in watcher attributes throws error when sending setRecord message.

    failed to execute message; message index: 0: Invalid signature.: unauthorized
    
  • When sending setRecord message, an integer value passed in watcher attributes is parsed as float type in laconicd while unmarshalling json.

  • setRecord message throws error when fileds in Record message are not assigned.

    failed to pack and hash typedData primary type: provided data '<nil>' doesn't match type 'string' [tharsis/ethermint/ethereum/eip712/eip712.go:33]
    

    Passing dummy values to work around issue.