Skip to content

Commit

Permalink
merge main
Browse files Browse the repository at this point in the history
  • Loading branch information
d-roak committed Jul 18, 2024
2 parents 4f0e7c9 + d785db6 commit a608e59
Show file tree
Hide file tree
Showing 21 changed files with 650 additions and 307 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,4 @@ jobs:
yarn build
cd ../../examples/canvas
yarn install --frozen-lockfile
yarn build
yarn build
98 changes: 98 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: Build Docker Image
on:
release:
types: [published]
permissions:
packages: write
env:
IMAGE: ghcr.io/${{ github.repository }}
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
platform:
- linux/amd64
- linux/arm64
steps:
- name: Prepare
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE }}
tags: |
${{ github.event.release.tag_name }}
latest
- name: Build and push Docker image
id: build
uses: docker/build-push-action@v6
with:
context: ./packages/node
file: ./packages/node/Dockerfile
platforms: ${{ matrix.platform }}
labels: ${{ steps.meta.outputs.labels }}
tags: |
${{ env.IMAGE }}:${{ github.event.release.tag_name }}
${{ env.IMAGE }}:latest
outputs: type=image,name=${{ env.IMAGE }},name-canonical=true,push=true
- name: Export digest
run: |
mkdir -p /tmp/digests
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v4
with:
name: digests-${{ env.PLATFORM_PAIR }}
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
merge:
runs-on: ubuntu-latest
needs:
- build
steps:
- name: Download digests
uses: actions/download-artifact@v4
with:
path: /tmp/digests
pattern: digests-*
merge-multiple: true
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE }}
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create manifest list and push
working-directory: /tmp/digests
run: |
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '${{ env.IMAGE }}@sha256:%s ' *)
- name: Inspect image
run: |
docker buildx imagetools inspect ${{ env.IMAGE }}:${{ steps.meta.outputs.version }}
31 changes: 31 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Generate docs
on:
release:
types: [published]
permissions:
pages: write
id-token: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
- run: |
cd packages/node && yarn && yarn build
cd ../.. && yarn docs
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./docs
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

dist/
docs/
node_modules/

**/tsconfig.tsbuildinfo
45 changes: 43 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,43 @@
# ts-topology
The official TypeScript implementation of Topology Protocol
<div align="center">
<img src="https://avatars.githubusercontent.com/u/157637200" height="128">
<br />
<h1>The TypeScript implementation of the Topology Protocol</h1>
</div>

<div align="center">

![Version](https://img.shields.io/github/package-json/v/topology-foundation/ts-topology)
[![Docs](https://img.shields.io/badge/docs-page-blue)](https://topology-foundation.github.io/ts-topology/)
[![License](https://img.shields.io/badge/license-MIT-green)](https://github.com/topology-foundation/ts-topology/blob/main/LICENSE)
[![Issues](https://img.shields.io/badge/issues-report-red)](https://github.com/topology-foundation/ts-topology/issues)
[![Pull Requests](https://img.shields.io/badge/pull_requests-open-orange)](https://github.com/topology-foundation/ts-topology/pulls)

[![Website](https://img.shields.io/badge/Website-866678)](https://topology.gg)
[![GitHub](https://img.shields.io/badge/GitHub-ffffff)](https://github.com/topology-foundation)
[![X](https://img.shields.io/badge/X-000000)](https://x.com/topology_gg)
[![Telegram](https://img.shields.io/badge/Telegram-24A1DE)](https://t.me/topologyfrens)
[![Discord](https://img.shields.io/badge/Discord-7289da)](https://discord.gg/GUDGzBP5mn)
</div>

# Overview

This is the official TypeScript implementation of the Topology Protocol. The Topology Protocol is a local-first decentralized protocol for real-time applications. It introduces a new concept for Conflict-free Replicated Objects (CRO), that are built on top of libp2p and composed of CRDTs.

# Specifications

The specifications of the Topology Protocol are shared across different client implementations and can be found in the [specs repository](https://github.com/topology-foundation/specs). Currently the specifications are starting to be written based on this implementation.

# Packages

This repository is a monorepo that contains the following packages:

| Package | Description |
|---------|--------------------------------------------------|
| crdt | CRDT implementations intended to use as builtins |
| network | Network middleware to abstract libp2p |
| node | Topology Node library and CLI |
| object | CRO objects structure implementation |

# Examples

All the examples are located in the `examples` directory. Currently, there is only one example, which is a simple canvas where you can paint pixels. You can also look into the [counter-splash](https://github.com/topology-foundation/counter-splash) (demo for EthCC 2024) repository for a more complex example.
10 changes: 5 additions & 5 deletions examples/canvas/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ts-topology-examples-canvas",
"version": "1.0.0",
"version": "0.0.22-2",
"license": "MIT",
"scripts": {
"build": "webpack",
Expand All @@ -9,10 +9,10 @@
"start": "ts-node ./src/index.ts"
},
"dependencies": {
"@topology-foundation/crdt": "file:../../packages/crdt",
"@topology-foundation/network": "file:../../packages/network",
"@topology-foundation/node": "file:../../packages/node",
"@topology-foundation/object": "file:../../packages/object",
"@topology-foundation/crdt": "0.0.22-2",
"@topology-foundation/network": "0.0.22-2",
"@topology-foundation/node": "0.0.22-2",
"@topology-foundation/object": "0.0.22-2",
"crypto-browserify": "^3.12.0",
"process": "^0.11.10",
"stream-browserify": "^3.0.0",
Expand Down
8 changes: 5 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "ts-topology",
"description": "The official TypeScript implementation of Topology Protocol",
"version": "0.0.20",
"version": "0.0.22-2",
"license": "MIT",
"homepage": "https://topology.gg/",
"repository": {
Expand All @@ -12,15 +12,17 @@
"url": "https://github.com/topology-foundation/ts-topology/issues"
},
"scripts": {
"docs": "typedoc",
"release": "release-it",
"test": "vitest"
},
"devDependencies": {
"@release-it-plugins/workspaces": "^4.2.0",
"@types/node": "^20.14.10",
"release-it": "^17.4.1",
"release-it": "^17.6.0",
"typedoc": "^0.26.4",
"typescript": "^5.4.5",
"vitest": "^2.0.2"
"vitest": "^2.0.3"
},
"workspaces": [
"packages/*",
Expand Down
37 changes: 37 additions & 0 deletions packages/crdt/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Conflict-free Replicated Data Types (CRDTs)

This package contains the CRDT implementations intended to use as builtins for the Topology Protocol.

## Usage

This package is intended to be used as a dependency for the Topology Protocol. However, you can use it as a standalone package. For that, you can install it using:

```bash
# yarn
yarn add @topology-foundation/crdt

# npm
npm install @topology-foundation/crdt
```

### Build

To build the package, you can run:

```bash
yarn build
```

### Tests

To run the tests, you can run:

```bash
yarn test
```

## CRDTs Implementations
- [x] G-Counter
- [x] PN-Counter
- [x] G-Set
- [x] 2P-Set
2 changes: 1 addition & 1 deletion packages/crdt/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@topology-foundation/crdt",
"version": "0.0.20",
"version": "0.0.22-2",
"license": "MIT",
"repository": {
"type": "git",
Expand Down
6 changes: 6 additions & 0 deletions packages/crdt/typedoc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"$schema": "https://typedoc.org/schema.json",
"includeVersion": true,
"entryPoints": ["src/index.ts"],
"readme": "README.md"
}
33 changes: 33 additions & 0 deletions packages/network/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Topology Network Stack

This package contains the network middleware to abstract libp2p for the Topology Protocol.

To do so, we define a `TopologyNetworkNode` where we can pass the configs that we want and it "magically" configures libp2p and gives connectivity to the Topology Network.

## Usage

This package is intended to be used as a dependency for the Topology Protocol. However, you can use it as a standalone package. For that, you can install it using:

```bash
# yarn
yarn add @topology-foundation/network

# npm
npm install @topology-foundation/network
```

### Build

To build the package, you can run:

```bash
yarn build
```

### Tests

To run the tests, you can run:

```bash
yarn test
```
15 changes: 10 additions & 5 deletions packages/network/package.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
{
"name": "@topology-foundation/network",
"version": "0.0.20",
"version": "0.0.22-2",
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/topology-foundation/ts-topology.git"
},
"type": "module",
"types": "./dist/src/index.d.ts",
"files": ["src", "dist", "!dist/test", "!**/*.tsbuildinfo"],
"files": [
"src",
"dist",
"!dist/test",
"!**/*.tsbuildinfo"
],
"exports": {
".": {
"types": "./dist/src/index.d.ts",
Expand All @@ -31,17 +36,17 @@
"@chainsafe/libp2p-yamux": "^6.0.2",
"@libp2p/autonat": "^1.0.0",
"@libp2p/bootstrap": "^10.1.0",
"@libp2p/circuit-relay-v2": "^1.0.24",
"@libp2p/circuit-relay-v2": "^1.1.2",
"@libp2p/dcutr": "^1.1.0",
"@libp2p/identify": "^2.0.2",
"@libp2p/interface-pubsub": "^4.0.1",
"@libp2p/mdns": "^10.1.1",
"@libp2p/pubsub-peer-discovery": "^10.0.2",
"@libp2p/webrtc": "^4.1.1",
"@libp2p/webrtc": "^4.1.2",
"@libp2p/websockets": "^8.1.1",
"@libp2p/webtransport": "^4.1.1",
"@multiformats/multiaddr": "^12.3.0",
"it-pipe": "^3.0.1",
"libp2p": "^1.6.0"
"libp2p": "^1.8.1"
}
}
6 changes: 6 additions & 0 deletions packages/network/typedoc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"$schema": "https://typedoc.org/schema.json",
"includeVersion": true,
"entryPoints": ["src/index.ts"],
"readme": "README.md"
}
Loading

0 comments on commit a608e59

Please sign in to comment.