Skip to content

Commit 6baf2b2

Browse files
authored
Merge pull request #1157 from dm3-org/lukso-poc
Lukso poc
2 parents 5da0caf + 7b445cb commit 6baf2b2

File tree

95 files changed

+7827
-181
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+7827
-181
lines changed

.github/workflows/deploy.yml

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ jobs:
6565
echo "ENCRYPTION_PUBLIC_KEY=${{ secrets.ENCRYPTION_PUBLIC_KEY }}" >> ./.env
6666
echo "ENCRYPTION_PRIVATE_KEY=${{ secrets.ENCRYPTION_PRIVATE_KEY }}" >> ./.env
6767
echo "RPC=${{ secrets.RPC }}" >> ./.env
68+
echo "LUKSO_RPC=${{ secrets.LUKSO_RPC }}" >> ./.env
6869
echo "URL=${{ vars.HOST_DOMAIN }}" >> ./.env
6970
echo "CERT_MAIL=${{ vars.CERT_MAIL }}" >> ./.env
7071
echo "DATABASE_URL=${{ secrets.DATABASE_URL }}" >> ./.env

docker/DockerfileBuild

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ FROM --platform=linux/amd64 node:22-alpine3.18 as build
22
WORKDIR /build
33
COPY . .
44
# we need coreutils for proper ls command
5-
RUN apk add --update coreutils python3 make g++ curl bash gawk jq\
5+
RUN apk add --update coreutils python3 make g++ curl bash gawk jq git\
66
&& rm -rf /var/cache/apk/*
77

88
## Build libraries

docker/docker-compose.yml

+3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ services:
3131
ENCRYPTION_PRIVATE_KEY: ${ENCRYPTION_PRIVATE_KEY}
3232
DISABLE_SESSION_CHECK: ${DISABLE_SESSION_CHECK}
3333
RPC: ${RPC}
34+
LUKSO_RPC: ${LUKSO_RPC}
3435
PORT: 8081
3536
LOG_LEVEL: 'debug'
3637
DATABASE_URL: ${DATABASE_URL}
@@ -58,6 +59,7 @@ services:
5859
ENCRYPTION_PUBLIC_KEY: ${ENCRYPTION_PUBLIC_KEY}
5960
ENCRYPTION_PRIVATE_KEY: ${ENCRYPTION_PRIVATE_KEY}
6061
RPC: ${RPC}
62+
LUKSO_RPC: ${LUKSO_RPC}
6163
PORT: 8083
6264
LOG_LEVEL: 'debug'
6365
volumes:
@@ -88,6 +90,7 @@ services:
8890
DATABASE_URL: postgresql://postgres:example@offchain-resolver-db:5432
8991
PORT: 8082
9092
RPC: ${RPC}
93+
LUKSO_RPC: ${LUKSO_RPC}
9194
RESOLVER_SUPPORTED_ADDR_ENS_SUBDOMAINS: ${RESOLVER_SUPPORTED_ADDR_ENS_SUBDOMAINS}
9295
RESOLVER_SUPPORTED_NAME_ENS_SUBDOMAINS: ${RESOLVER_SUPPORTED_NAME_ENS_SUBDOMAINS}
9396
LOG_LEVEL: 'debug'

docker/resolutions.json

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"@dm3-org/dm3-lib-shared": "file:/library_archives/lib-shared.tgz",
1111
"@dm3-org/dm3-lib-storage": "file:/library_archives/lib-storage.tgz",
1212
"@dm3-org/dm3-lib-test-helper": "file:/library_archives/lib-test-helper.tgz",
13+
"@dm3-org/dm3-lib-smart-account": "file:/library_archives/lib-smart-account.tgz",
1314
"@dm3-org/dm3-messenger-widget": "file:/library_archives/messenger-widget.tgz"
1415
}
1516
}

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
"packages/lib/storage",
1414
"packages/lib/delivery-api",
1515
"packages/lib/test-helper",
16+
"packages/lib/smart-account",
1617
"packages/lib/offchain-resolver-api",
1718
"packages/backend",
1819
"packages/integration-tests",
1920
"packages/offchain-resolver",
2021
"packages/messenger-widget",
22+
"packages/js-sdk",
2123
"packages/messenger-demo",
2224
"packages/next-messenger-demo",
2325
"packages/messenger-web",

packages/backend/src/index.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
getServerSecret,
66
logError,
77
logRequest,
8+
getLuksoProvider,
89
} from '@dm3-org/dm3-lib-server-side';
910
import { logInfo } from '@dm3-org/dm3-lib-shared';
1011
import bodyParser from 'body-parser';
@@ -30,14 +31,15 @@ app.use(bodyParser.json());
3031
(async () => {
3132
const db = await getDatabase();
3233
const web3Provider = await getCachedWebProvider(process.env);
34+
const luksoProvider = await getLuksoProvider(process.env);
3335
const serverSecret = getServerSecret(process.env);
3436

3537
app.use(logRequest);
3638

3739
app.get('/hello', (req, res) => {
3840
return res.status(200).send('Hello DM3');
3941
});
40-
app.use('/profile', Profile(db, web3Provider, serverSecret));
42+
app.use('/profile', Profile(db, web3Provider, luksoProvider, serverSecret));
4143
app.use('/storage', Storage(db, web3Provider, serverSecret));
4244
app.use('/auth', Authenticate(db, serverSecret, web3Provider));
4345
app.use(logError);

packages/backend/src/profile/profile.test.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ const setUpApp = async (
2929
db: IBackendDatabase,
3030
web3Provider: ethers.providers.JsonRpcProvider,
3131
serverSecret: string = 'my-secret',
32+
luksoProvider: ethers.providers.JsonRpcProvider = {} as ethers.providers.JsonRpcProvider,
3233
) => {
3334
app.use(bodyParser.json());
3435
const server = http.createServer(app);
35-
app.use(profile(db, web3Provider, serverSecret));
36+
app.use(profile(db, web3Provider, luksoProvider, serverSecret));
3637
};
3738

3839
const createDbMock = async () => {

packages/backend/src/profile/profile.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import { generateAuthJWT } from '@dm3-org/dm3-lib-server-side';
2-
import { getUserProfile } from '@dm3-org/dm3-lib-profile';
2+
import {
3+
getUserProfile,
4+
ProfileValidator,
5+
SignedUserProfile,
6+
} from '@dm3-org/dm3-lib-profile';
37

48
import {
59
checkUserProfile,
@@ -14,6 +18,7 @@ import { IBackendDatabase } from '../persistence/getDatabase';
1418
export default (
1519
db: IBackendDatabase,
1620
web3Provider: ethers.providers.JsonRpcProvider,
21+
luksoProvider: ethers.providers.JsonRpcProvider,
1722
serverSecret: string,
1823
) => {
1924
const router = express.Router();
@@ -60,6 +65,7 @@ export default (
6065
if (
6166
!(await checkUserProfile(
6267
web3Provider,
68+
luksoProvider,
6369
req.body, // as SignedUserProfile,
6470
normalizeEnsName(ensName),
6571
))

packages/backend/src/profile/submitUserProfile.ts

-36
This file was deleted.

packages/delivery-service/src/index.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
Authenticate,
44
errorHandler,
55
getCachedWebProvider,
6+
getLuksoProvider,
67
getServerSecret,
78
logError,
89
logRequest,
@@ -22,13 +23,13 @@ import { startCleanUpPendingMessagesJob } from './cleanup/cleanUpPendingMessages
2223
import { getDeliveryServiceProperties } from './config/getDeliveryServiceProperties';
2324
import Delivery from './delivery';
2425
import { onConnection } from './messaging';
26+
import Metrics from './metrics';
2527
import Notifications from './notifications';
2628
import { IDatabase, getDatabase } from './persistence/getDatabase';
2729
import { Profile } from './profile/profile';
2830
import RpcProxy from './rpc/rpc-proxy';
29-
import { WebSocketManager } from './ws/WebSocketManager';
3031
import { socketAuth } from './socketAuth';
31-
import Metrics from './metrics';
32+
import { WebSocketManager } from './ws/WebSocketManager';
3233

3334
const app = express();
3435
app.use(express.json({ limit: '50mb' }));
@@ -96,6 +97,7 @@ app.use(bodyParser.json());
9697
// load environment
9798
const deliveryServiceProperties = getDeliveryServiceProperties();
9899
const web3Provider = await getCachedWebProvider(process.env);
100+
const luksoProvider = await getLuksoProvider(process.env);
99101

100102
const db = getDbWithAddressResolvedGetAccount(
101103
await getDatabase(),
@@ -142,7 +144,7 @@ app.use(bodyParser.json());
142144

143145
app.use('/metrics', Metrics(db, deliveryServiceProperties));
144146
app.use('/auth', Authenticate(db, serverSecret, web3Provider));
145-
app.use('/profile', Profile(db, web3Provider, serverSecret));
147+
app.use('/profile', Profile(db, web3Provider, luksoProvider, serverSecret));
146148
app.use('/delivery', Delivery(web3Provider, db, serverSecret));
147149
app.use(
148150
'/notifications',

packages/delivery-service/src/profile/profile.test.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ const setUpApp = async (
2121
db: IDatabase,
2222
web3Provider: ethers.providers.JsonRpcProvider,
2323
serverSecret: string = 'my-secret',
24+
luksoProvider: ethers.providers.JsonRpcProvider = {} as ethers.providers.JsonRpcProvider,
2425
) => {
2526
app.use(bodyParser.json());
26-
app.use(profile(db, web3Provider, serverSecret));
27+
app.use(profile(db, web3Provider, luksoProvider, serverSecret));
2728
};
2829

2930
const createDbMock = async () => {

packages/delivery-service/src/profile/profile.ts

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { IDatabase } from '../persistence/getDatabase';
88
export const Profile = (
99
db: IDatabase,
1010
web3Provider: ethers.providers.JsonRpcProvider,
11+
luksoProvider: ethers.providers.JsonRpcProvider,
1112
serverSecret: string,
1213
) => {
1314
const router = express.Router();
@@ -69,6 +70,7 @@ export const Profile = (
6970
);
7071

7172
const data = await submitUserProfile(
73+
luksoProvider,
7274
db.getAccount,
7375
db.setAccount,
7476
//use normalized address

packages/js-sdk/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
lib/**

packages/js-sdk/jest.config.js

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
2+
module.exports = {
3+
preset: 'ts-jest/presets/js-with-ts',
4+
testEnvironment: 'node',
5+
modulePathIgnorePatterns: ['./dist'],
6+
};

packages/js-sdk/package.json

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{
2+
"name": "@dm3-org/dm3-js-sdk",
3+
"license": "BSD-2-Clause",
4+
"version": "0.0.1",
5+
"main": "dist/index.js",
6+
"types": "dist/index.d.ts",
7+
"dependencies": {
8+
"@dm3-org/dm3-lib-crypto": "workspace:^",
9+
"@dm3-org/dm3-lib-delivery": "workspace:^",
10+
"@dm3-org/dm3-lib-messaging": "workspace:^",
11+
"@dm3-org/dm3-lib-profile": "workspace:^",
12+
"@dm3-org/dm3-lib-server-side": "workspace:^",
13+
"@dm3-org/dm3-lib-shared": "workspace:^",
14+
"@dm3-org/dm3-lib-storage": "workspace:^",
15+
"@dm3-org/dm3-lib-test-helper": "workspace:^",
16+
"@web3-name-sdk/core": "^0.2.0",
17+
"axios": "^0.27.2",
18+
"dotenv": "^16.0.1",
19+
"ethers": "5.7.2"
20+
},
21+
"scripts": {
22+
"test": "jest --coverage --transformIgnorePatterns 'node_modules/(?!(dm3-lib-\\w*)/)'",
23+
"build": "yarn tsc --declaration --declarationMap"
24+
},
25+
"devDependencies": {
26+
"@babel/core": "^7.19.6",
27+
"@babel/preset-env": "^7.19.4",
28+
"@babel/preset-typescript": "^7.18.6",
29+
"@types/supertest": "^2.0.12",
30+
"babel-cli": "^6.26.0",
31+
"babel-jest": "^29.2.2",
32+
"babel-preset-env": "^1.7.0",
33+
"jest": "^29.2.2",
34+
"jest-mock-extended": "2.0.4",
35+
"prettier": "^2.6.2",
36+
"superagent": "^8.0.3",
37+
"ts-jest": "^28.0.4",
38+
"typescript": "^4.4.2"
39+
},
40+
"publish": true
41+
}

packages/js-sdk/src/Dm3.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Conversations } from './conversation/Conversations';
2+
import { Tld } from './tld/Tld';
3+
4+
export class Dm3 {
5+
public readonly conversations: Conversations;
6+
public readonly tld: Tld;
7+
8+
constructor(conversations: Conversations, tld: Tld) {
9+
this.conversations = conversations;
10+
this.tld = tld;
11+
}
12+
}

packages/js-sdk/src/Dm3Sdk.test.ts

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { ethers } from 'ethers';
2+
import { Dm3Sdk, Dm3SdkConfig } from './Dm3Sdk';
3+
import { StorageAPI } from '@dm3-org/dm3-lib-storage';
4+
5+
describe('Dm3Sdk', () => {
6+
let upController: ethers.Signer;
7+
8+
beforeEach(async () => {
9+
upController = ethers.Wallet.createRandom();
10+
});
11+
12+
it('test', async () => {
13+
const luksoProvider = () => ({
14+
send: () => Promise.resolve([]),
15+
getSigner: () => Promise.resolve(upController),
16+
});
17+
const mockConfig: Dm3SdkConfig = {
18+
mainnetProvider: {} as ethers.providers.JsonRpcProvider,
19+
lukso: luksoProvider as any,
20+
nonce: '1',
21+
defaultDeliveryService: 'test.io',
22+
addressEnsSubdomain: 'addr.test',
23+
userEnsSubdomain: 'user.test',
24+
resolverBackendUrl: 'resolver.io',
25+
backendUrl: 'backend.io',
26+
storageApi: {} as StorageAPI,
27+
};
28+
29+
// const dm3 = await new Dm3Sdk().universalProfileLogin();
30+
// await dm3.conversations.addConversation('karl.eth');
31+
// const c = dm3.conversations.list;
32+
// const karl = c[0];
33+
});
34+
});

0 commit comments

Comments
 (0)