Skip to content

Commit 2532fa1

Browse files
committed
new server API
1 parent 4029762 commit 2532fa1

17 files changed

+1458
-325
lines changed

README.md

+52-18
Original file line numberDiff line numberDiff line change
@@ -13,31 +13,43 @@ cd server-example
1313
yarn install
1414
yarn start
1515
```
16-
## Install TonLoginServer
16+
## Install Ton Connect Server
17+
18+
```
19+
$ yarn add @tonapps/tonconnect-server
20+
```
21+
22+
## Generate Static Secret
23+
1724
```
18-
yarn add @tonapps/tonlogin-server
25+
$ npx tonconnect-generate-secret
1926
```
27+
Put generated static secret to env vars or config
28+
29+
2030
## How to use the server API
2131

2232
```js
23-
// Generate static secret with generateServerSecret();
24-
// and put static secret to env vars or config
25-
import { generateServerSecret } from '@tonapps/tonlogin-server';
26-
console.log(generateServerSecret());
27-
33+
import { TonConnectServer, AuthRequestTypes } from '@tonapps/tonconnect-server';
2834

29-
// Create a TonLogin object configured with a static secret.
30-
const tonlogin = new TonLoginServer({ staticSecret: "%fsa$tgs..." });
35+
// Create a TonConnectServer instance configured with a static secret.
36+
const tonconnect = new TonConnectServer({
37+
staticSecret: process.env.TONCONNECT_SECRET
38+
});
3139

3240
// When we need to authenticate the user, create an authentication request:
33-
const request = tonlogin.generateAuthRequest({
34-
image_url: '<logo-url>',
35-
return_url: '<endpoint-url>',
41+
const request = tonconnect.createRequest({
42+
image_url: 'https://ddejfvww7sqtk.cloudfront.net/images/landing/ton-nft-tegro-dog/avatar/image_d0315e1461.jpg',
43+
callback_url: `${hostname}/tonconnect`,
3644
items: [{
37-
type: 'ton-address',
38-
require: true
45+
type: AuthRequestTypes.ADDRESS,
46+
required: true
47+
}, {
48+
type: AuthRequestTypes.OWNERSHIP,
49+
required: true
3950
}],
40-
})
51+
});
52+
4153

4254
res.send(request);
4355

@@ -50,9 +62,31 @@ const deeplinkURL = `https://app.tonkeeper.com/ton-login/${requestURL}`;
5062
Decode Auth Response
5163

5264
```js
53-
const decodedResponse = tonlogin.decodeAuthResponse(encodedResponse);
54-
55-
console.log(decodedResponse.client_id, decodedResponse.payload);
65+
try {
66+
const response = tonconnect.decodeResponse(req.query.tonlogin);
67+
68+
console.log('response', response);
69+
70+
for (let payload of response.payload) {
71+
switch (payload.type) {
72+
case AuthRequestTypes.OWNERSHIP:
73+
const isVerified = await tonconnect.verifyTonOwnership(payload, response.client_id);
74+
75+
if (isVerified) {
76+
console.log(`ton-ownership is verified for ${payload.address}`);
77+
} else {
78+
console.log(`ton-ownership is NOT verified`);
79+
}
80+
81+
break;
82+
case AuthRequestTypes.ADDRESS:
83+
console.log(`ton-address ${payload.address}`);
84+
break;
85+
}
86+
}
87+
} catch (err) {
88+
console.log(err);
89+
}
5690
```
5791

5892
[AuthPayload specification](TonConnectSpecification.md#auth-payload)

server-example/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"author": "",
1212
"license": "ISC",
1313
"dependencies": {
14-
"@tonapps/tonlogin-server": "../tonlogin-server",
14+
"@tonapps/tonconnect-server": "../tonconnect-server",
1515
"cors": "^2.8.5",
1616
"create-hmac": "^1.1.7",
1717
"express": "^4.17.3",

server-example/src/server.ts

+31-10
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { engine } from 'express-handlebars';
22
import express from 'express';
33
import path from 'path';
44
import cors from 'cors';
5-
import { TonLoginServer } from '@tonapps/tonlogin-server';
5+
import { TonConnectServer, AuthRequestTypes } from '@tonapps/tonconnect-server';
66
import { getLocalIPAddress } from './utils';
77

88
// use generateServerSecret();
@@ -19,29 +19,50 @@ function init() {
1919
app.set("view engine", "handlebars");
2020
app.set("views", path.resolve(__dirname, "./views"));
2121

22-
const tonlogin = new TonLoginServer({ staticSecret });
22+
const tonconnect = new TonConnectServer({ staticSecret });
2323

2424
app.get('/authRequest', (req, res) => {
25-
const request = tonlogin.generateAuthRequest({
25+
const request = tonconnect.createRequest({
2626
image_url: 'https://ddejfvww7sqtk.cloudfront.net/images/landing/ton-nft-tegro-dog/avatar/image_d0315e1461.jpg',
27-
return_url: `${hostname}/tonlogin`,
27+
return_url: `${hostname}/tonconnect`,
2828
items: [{
29-
type: 'ton-address',
30-
require: true
29+
type: AuthRequestTypes.ADDRESS,
30+
required: true
31+
}, {
32+
type: AuthRequestTypes.OWNERSHIP,
33+
required: true
3134
}],
35+
}, {
36+
customField: 'some data...'
3237
});
3338

3439
res.send(request);
3540
});
3641

37-
app.get('/tonlogin', (req, res) => {
42+
app.get('/tonconnect', async (req, res) => {
3843
try {
3944
const encodedResponse = req.query.tonlogin as string;
40-
const decodedResponse = tonlogin.decodeAuthResponse(encodedResponse);
45+
const response = tonconnect.decodeResponse(encodedResponse);
4146

42-
console.log(decodedResponse.client_id, decodedResponse.payload);
47+
const print: any = { response };
4348

44-
res.send(decodedResponse);
49+
for (let payload of response.payload) {
50+
switch (payload.type) {
51+
case AuthRequestTypes.OWNERSHIP:
52+
const isVerified = await tonconnect.verifyTonOwnership(payload, response.client_id);
53+
54+
print.message = isVerified
55+
? `ton-ownership is verified for ${payload.address}`
56+
: `ton-ownership is NOT verified`
57+
58+
break;
59+
case AuthRequestTypes.ADDRESS:
60+
print.message = `ton-address ${payload.address}`
61+
break;
62+
}
63+
}
64+
65+
res.send(print);
4566
} catch (err) {
4667
console.log(err);
4768
res.status(400).send({ error: true });

0 commit comments

Comments
 (0)