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

Add address book datamodel #40

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
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
3 changes: 3 additions & 0 deletions models/address-book/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"extends": ["3box", "3box/typescript"]
}
1 change: 1 addition & 0 deletions models/address-book/.prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"eslint-config-3box/prettier.config"
23 changes: 23 additions & 0 deletions models/address-book/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Address Book DataModel

DataModel implementation of the **Address Book** and **DIDToAddressBook** schemas as first outlined in this [Gitcoin Grant](https://gitcoin.co/issue/28896).

## Installation

```sh
npm install -D @datamodels/address-book
```

## Rationale

Allow users to create an address book to manage different accounts they are working with across EVM chains. Have a data model that is consistent and be available for other applications to utilize. The first implementation was completed on the [Superfluid Console](https://github.com/superfluid-finance/superfluid-console) application

## Schemas

### [AddressBook](./schemas/AddressBook.json)

## [DIDToAddressBook](./schemas/DIDToAddressBook.json)

## License

Dual licensed under MIT and Apache 2
45 changes: 45 additions & 0 deletions models/address-book/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
"name": "@datamodels/address-book",
"version": "0.1.0",
"author": "0xzoz",
"license": "(Apache-2.0 OR MIT)",
"homepage": "https://github.com/ceramicstudio/datamodels#readme",
"keywords": [
"addressbook",
"did",
"address"
],
"repository": {
"type": "git",
"url": "https://github.com/ceramicstudio/datamodels",
"directory": "models/address-book"
},
"type": "module",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
".": "./dist/index.js"
},
"files": [
"dist",
"schemas",
"types"
],
"engines": {
"node": ">=14.14"
},
"sideEffects": false,
"scripts": {
"types": "del types && json2ts -i schemas -o types",
"build:clean": "del dist",
"build:js": "swc src -d ./dist --config-file ../../.swcrc",
"build:types": "tsc --emitDeclarationOnly",
"build": "yarn build:clean && yarn build:types && yarn build:js",
"lint": "eslint --fix",
"prepare": "yarn build",
"prepublishOnly": "package-check"
},
"dependencies": {
"@glazed/types": "^0.2.0"
}
}
70 changes: 70 additions & 0 deletions models/address-book/schemas/AddressBook.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"title": "AddressBook",
"required": ["total_cnt", "contacts"],
"additionalProperties": false,
"properties": {
"total_cnt": {
"type": "integer",
"description": "The total number of contacts",
"default": 0
},
"contacts": {
"type": "array",
"default": [],
"items": {
"type": "object",
"required": ["name", "wallets"],
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "The contact's name",
"default": ""
},
"wallets": {
"type": "array",
"description": "Collection of the contact's wallet addresses and respective networks",
"default": [],
"items": {
"type": "object",
"default": {},
"required": ["walletAddress", "network"],
"additionalProperties": false,
"properties": {
"walletAddress": {
"type": "string",
"default": ""
},
"network": {
"type": "string",
"default": ""
}
}
}
},
"avatar": {
"type": "string",
"description": "Optional URI of user avatar",
"default": ""
},
"tags": {
"type": "array",
"description": "Optional tags for the contact",
"items": {
"type": "string"
},
"minItems": 1,
"uniqueItems": true
},
"data": {
"type": "object",
"description": "Fields to include optional arbitrary data",
"properties": {}
}
}
}
}
}
}
27 changes: 27 additions & 0 deletions models/address-book/schemas/DIDToAddressBook.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"title": "DIDToAddressBook",
"required": ["mapping"],
"properties": {
"mapping": {
"type": "array",
"items": {
"type": "object",
"required": ["user_DID", "address_book_streamID"],
"properties": {
"user_DID": {
"type": "string",
"description": "The user's DID",
"default": ""
},
"address_book_streamID": {
"type": "string",
"description": "The streamID of the Address Book associated to the user",
"default": ""
}
}
}
}
}
}
118 changes: 118 additions & 0 deletions models/address-book/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import type { ModelTypeAliases, EncodedManagedModel } from '@glazed/types'

import type { AddressBook } from '../types/AddressBook'
export type { AddressBook } from '../types/AddressBook'

import type { DIDToAddressBook } from '../types/DIDToAddressBook'
export type { DIDToAddressBook } from '../types/DIDToAddressBook'

export type ModelTypes = ModelTypeAliases<
{
AddressBook: AddressBook
DIDToAddressBook: DIDToAddressBook
},
{
myAddressBook: 'AddressBook'
DIDToAddressBook: 'DIDToAddressBook'
}
>

export const model: EncodedManagedModel = {
schemas: {
kjzl6cwe1jw147layx2v9p53o0i6q4hzjutuvpkkgf39u7xf68m958jdlsdos47: {
alias: 'AddressBook',
commits: [
{
jws: {
payload: 'AXESIFHH8eYt5V4Sk7gHQnKgYYjKBPZHCCnJR4OuZgoi6jaU',
signatures: [
{
signature:
'b4EvyuK3NZr97VmT01nsy4QFCMVBw2ck4yhsNBcLLJIf2ssr687seAOT_b0cvYVoSwDaIrdc8NoBul2JHYZuCA',
protected:
'eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2VpOXJyelF2aVlqcGJhVjFNcDFhVFVibmY0aWpidTNvekpVZnB5VTVQWGg3I3o2TWtlaTlycnpRdmlZanBiYVYxTXAxYVRVYm5mNGlqYnUzb3pKVWZweVU1UFhoNyJ9',
},
],
link: 'bafyreicry7y6mlpflyjjhoahijzkaymizicpmryifheupa5omyfcf2rwsq',
},
linkedBlock:
'omRkYXRhpmR0eXBlZm9iamVjdGV0aXRsZWtBZGRyZXNzQm9va2ckc2NoZW1heCdodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNocmVxdWlyZWSCaXRvdGFsX2NudGhjb250YWN0c2pwcm9wZXJ0aWVzomhjb250YWN0c6NkdHlwZWVhcnJheWVpdGVtc6RkdHlwZWZvYmplY3RocmVxdWlyZWSCZG5hbWVnd2FsbGV0c2pwcm9wZXJ0aWVzpWRkYXRho2R0eXBlZm9iamVjdGpwcm9wZXJ0aWVzoGtkZXNjcmlwdGlvbngpRmllbGRzIHRvIGluY2x1ZGUgb3B0aW9uYWwgYXJiaXRyYXJ5IGRhdGFkbmFtZaNkdHlwZWZzdHJpbmdnZGVmYXVsdGBrZGVzY3JpcHRpb25xVGhlIGNvbnRhY3RzIG5hbWVkdGFnc6VkdHlwZWVhcnJheWVpdGVtc6FkdHlwZWZzdHJpbmdobWluSXRlbXMBa2Rlc2NyaXB0aW9ueB1PcHRpb25hbCB0YWdzIGZvciB0aGUgY29udGFjdGt1bmlxdWVJdGVtc/VmYXZhdGFyo2R0eXBlZnN0cmluZ2dkZWZhdWx0YGtkZXNjcmlwdGlvbngbT3B0aW9uYWwgVVJJIG9mIHVzZXIgYXZhdGFyZ3dhbGxldHOkZHR5cGVlYXJyYXllaXRlbXOlZHR5cGVmb2JqZWN0Z2RlZmF1bHSgaHJlcXVpcmVkgm13YWxsZXRBZGRyZXNzZ25ldHdvcmtqcHJvcGVydGllc6JnbmV0d29ya6JkdHlwZWZzdHJpbmdnZGVmYXVsdGBtd2FsbGV0QWRkcmVzc6JkdHlwZWZzdHJpbmdnZGVmYXVsdGB0YWRkaXRpb25hbFByb3BlcnRpZXP0Z2RlZmF1bHSAa2Rlc2NyaXB0aW9ueENDb2xsZWN0aW9uIG9mIHRoZSBjb250YWN0cyB3YWxsZXQgYWRkcmVzc2VzIGFuZCByZXNwZWN0aXZlIG5ldHdvcmtzdGFkZGl0aW9uYWxQcm9wZXJ0aWVz9GdkZWZhdWx0gGl0b3RhbF9jbnSjZHR5cGVnaW50ZWdlcmdkZWZhdWx0AGtkZXNjcmlwdGlvbngcVGhlIHRvdGFsIG51bWJlciBvZiBjb250YWN0c3RhZGRpdGlvbmFsUHJvcGVydGllc/RmaGVhZGVyomZ1bmlxdWVwZjloTjNjY0h3U01jeFoyaGtjb250cm9sbGVyc4F4OGRpZDprZXk6ejZNa2VpOXJyelF2aVlqcGJhVjFNcDFhVFVibmY0aWpidTNvekpVZnB5VTVQWGg3',
},
],
dependencies: {},
version: 'k3y52l7qbv1frxxzi0b8ecysa2rlbtrzwt78blhu9grb9ywdnwda918psqxtc7xts',
},
kjzl6cwe1jw149spw6jvjfadizftpcg2yk7du2u62df50sctwf533tker56fq3b: {
alias: 'DIDToAddressBook',
commits: [
{
jws: {
payload: 'AXESIEdBm3r1vSlcmCPuuAAQoOIkKeG2wNZpE_SjT_TBzRFH',
signatures: [
{
signature:
'lSGnAoowt-cq4myUZAgjVznYAKDR9QF4CaQNVfvcxxDKBtDEu8y1_fPsEwb0a1lbAFE_WJsXnF5iJMPN6yu6Bw',
protected:
'eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2VpOXJyelF2aVlqcGJhVjFNcDFhVFVibmY0aWpidTNvekpVZnB5VTVQWGg3I3o2TWtlaTlycnpRdmlZanBiYVYxTXAxYVRVYm5mNGlqYnUzb3pKVWZweVU1UFhoNyJ9',
},
],
link: 'bafyreichignxv5n5ffojqi7oxaabbihcequ6dnwa2zurh5fdj72mdtiri4',
},
linkedBlock:
'omRkYXRhpWR0eXBlZm9iamVjdGV0aXRsZXBESURUb0FkZHJlc3NCb29rZyRzY2hlbWF4J2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hI2hyZXF1aXJlZIFnbWFwcGluZ2pwcm9wZXJ0aWVzoWdtYXBwaW5nomR0eXBlZWFycmF5ZWl0ZW1zo2R0eXBlZm9iamVjdGhyZXF1aXJlZIJodXNlcl9ESUR1YWRkcmVzc19ib29rX3N0cmVhbUlEanByb3BlcnRpZXOiaHVzZXJfRElEo2R0eXBlZnN0cmluZ2dkZWZhdWx0YGtkZXNjcmlwdGlvbm1UaGUgdXNlcnMgRElEdWFkZHJlc3NfYm9va19zdHJlYW1JRKNkdHlwZWZzdHJpbmdnZGVmYXVsdGBrZGVzY3JpcHRpb254N1RoZSBzdHJlYW1JRCBvZiB0aGUgQWRkcmVzcyBCb29rIGFzc29jaWF0ZWQgdG8gdGhlIHVzZXJmaGVhZGVyomZ1bmlxdWVwOHRjVTNVWGtYREpGTG9MV2tjb250cm9sbGVyc4F4OGRpZDprZXk6ejZNa2VpOXJyelF2aVlqcGJhVjFNcDFhVFVibmY0aWpidTNvekpVZnB5VTVQWGg3',
},
],
dependencies: {},
version: 'k3y52l7qbv1frydo84ulca4ps700j88id1roidw6j4vfnpln8mjo63694x0trtji8',
},
},
definitions: {
kjzl6cwe1jw1487esfmzik6u8hd9swrut7i73a1b7e8m0gqza0xxuhd61l952hs: {
alias: 'myAddressBook',
commits: [
{
jws: {
payload: 'AXESIFEWkK7SHlFy3aQWYiDEEhXgV561SEgurYkeaqNnGz7n',
signatures: [
{
signature:
'CYXT973re2KrezmZhr3KLzHdu9ZjBBXFonKwp1C3VhbL7pJz4wWYD64yY1NMLv1nYWJ-Dp3pkvKjxvf__zMXCw',
protected:
'eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2VpOXJyelF2aVlqcGJhVjFNcDFhVFVibmY0aWpidTNvekpVZnB5VTVQWGg3I3o2TWtlaTlycnpRdmlZanBiYVYxTXAxYVRVYm5mNGlqYnUzb3pKVWZweVU1UFhoNyJ9',
},
],
link: 'bafyreicrc2ik5uq6kfzn3jawmiqmieqv4blz5nkijaxk3ci6nkrwogz644',
},
linkedBlock:
'omRkYXRho2RuYW1lb015IGFkZHJlc3MgYm9va2ZzY2hlbWF4S2NlcmFtaWM6Ly9rM3k1Mmw3cWJ2MWZyeHh6aTBiOGVjeXNhMnJsYnRyend0NzhibGh1OWdyYjl5d2Rud2RhOTE4cHNxeHRjN3h0c2tkZXNjcmlwdGlvbnhFQWRkcmVzcyBib29rIHRvIGtlZXAgdHJhY2sgb2YgYSB1c2VycyBkaWZmZXJlbnQgYWNjb3VudHMgYW5kIGNvbnRhY3RzZmhlYWRlcqNmc2NoZW1heEtjZXJhbWljOi8vazN5NTJsN3FidjFmcnkxZnA0czBud2RhcmgwdmFodXNhcnBwb3NnZXZ5MHBlbWl5a3ltZDJvcmQ2c3d0aGFyY3dmdW5pcXVlcFFEMTVXWE5PT2ZJMkhlNlRrY29udHJvbGxlcnOBeDhkaWQ6a2V5Ono2TWtlaTlycnpRdmlZanBiYVYxTXAxYVRVYm5mNGlqYnUzb3pKVWZweVU1UFhoNw==',
},
],
schema: 'kjzl6cwe1jw147layx2v9p53o0i6q4hzjutuvpkkgf39u7xf68m958jdlsdos47',
version: 'k3y52l7qbv1fry2cp677gjzkn0bidpl233pdefbdbol98jb3uvapcorhmzb501qf4',
},
kjzl6cwe1jw145wbun7wd2507nf00thucutl5wgrl5gtbq8mh852ux33z5si6j6: {
alias: 'DIDToAddressBook',
commits: [
{
jws: {
payload: 'AXESIAwS89gFveUl0wIhCL8AonsfPbrxHG2BrO6lA9wXjL8G',
signatures: [
{
signature:
'tI_Y0RpA21sxRxKFlSFcu0jPOiZiGNctnTXG1_xjj4xiuoT0pMVHdd06_xUeHxMmj3tvyislJBkGStmyQacdAQ',
protected:
'eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2VpOXJyelF2aVlqcGJhVjFNcDFhVFVibmY0aWpidTNvekpVZnB5VTVQWGg3I3o2TWtlaTlycnpRdmlZanBiYVYxTXAxYVRVYm5mNGlqYnUzb3pKVWZweVU1UFhoNyJ9',
},
],
link: 'bafyreiamclz5qbn54us5garbbc7qbit3d463v4i4nwa2z3vfapobpdf7ay',
},
linkedBlock:
'omRkYXRho2RuYW1lcERJRFRvQWRkcmVzc0Jvb2tmc2NoZW1heEtjZXJhbWljOi8vazN5NTJsN3FidjFmcnlkbzg0dWxjYTRwczcwMGo4OGlkMXJvaWR3Nmo0dmZucGxuOG1qbzYzNjk0eDB0cnRqaThrZGVzY3JpcHRpb254KExpbmsgYSB1c2VycyBESUQgd2l0aCB0aGVpciBBZGRyZXNzIEJvb2tmaGVhZGVyo2ZzY2hlbWF4S2NlcmFtaWM6Ly9rM3k1Mmw3cWJ2MWZyeTFmcDRzMG53ZGFyaDB2YWh1c2FycHBvc2dldnkwcGVtaXlreW1kMm9yZDZzd3RoYXJjd2Z1bmlxdWVwNnlQc2dzRWJnTGl6U0R6bGtjb250cm9sbGVyc4F4OGRpZDprZXk6ejZNa2VpOXJyelF2aVlqcGJhVjFNcDFhVFVibmY0aWpidTNvekpVZnB5VTVQWGg3',
},
],
schema: 'kjzl6cwe1jw149spw6jvjfadizftpcg2yk7du2u62df50sctwf533tker56fq3b',
version: 'k3y52l7qbv1frxlxw9x464v7lieio5tqvvf6ehyv86evkjelbuhw4bva4a16pagao',
},
},
tiles: {},
}
7 changes: 7 additions & 0 deletions models/address-book/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "./dist"
},
"include": ["src"]
}
40 changes: 40 additions & 0 deletions models/address-book/types/AddressBook.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/* tslint:disable */
/**
* This file was automatically generated by json-schema-to-typescript.
* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
* and run json-schema-to-typescript to regenerate this file.
*/

export interface AddressBook {
/**
* The total number of contacts
*/
total_cnt: number;
contacts: {
/**
* The contact's name
*/
name: string;
/**
* Collection of the contact's wallet addresses and respective networks
*/
wallets: {
walletAddress: string;
network: string;
}[];
/**
* Optional URI of user avatar
*/
avatar?: string;
/**
* Optional tags for the contact
*/
tags?: [string, ...string[]];
/**
* Fields to include optional arbitrary data
*/
data?: {
[k: string]: unknown;
};
}[];
}
21 changes: 21 additions & 0 deletions models/address-book/types/DIDToAddressBook.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/* tslint:disable */
/**
* This file was automatically generated by json-schema-to-typescript.
* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
* and run json-schema-to-typescript to regenerate this file.
*/

export interface DIDToAddressBook {
mapping: {
/**
* The user's DID
*/
user_DID: string;
/**
* The streamID of the Address Book associated to the user
*/
address_book_streamID: string;
[k: string]: unknown;
}[];
[k: string]: unknown;
}