@towns-labs/sdk 2.0.4 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/createApp.d.ts.map +1 -1
- package/dist/createApp.js +7 -1
- package/dist/createApp.js.map +1 -1
- package/dist/id.d.ts +1 -0
- package/dist/id.d.ts.map +1 -1
- package/dist/id.js +3 -0
- package/dist/id.js.map +1 -1
- package/dist/sync-agent/dms/models/dm.d.ts +2 -4
- package/dist/sync-agent/dms/models/dm.d.ts.map +1 -1
- package/dist/sync-agent/dms/models/dm.js +2 -30
- package/dist/sync-agent/dms/models/dm.js.map +1 -1
- package/dist/sync-agent/gdms/models/gdm.d.ts +2 -4
- package/dist/sync-agent/gdms/models/gdm.d.ts.map +1 -1
- package/dist/sync-agent/gdms/models/gdm.js +2 -30
- package/dist/sync-agent/gdms/models/gdm.js.map +1 -1
- package/dist/sync-agent/river-connection/riverConnection.d.ts +1 -3
- package/dist/sync-agent/river-connection/riverConnection.d.ts.map +1 -1
- package/dist/sync-agent/river-connection/riverConnection.js +5 -3
- package/dist/sync-agent/river-connection/riverConnection.js.map +1 -1
- package/dist/sync-agent/spaces/models/channel.d.ts +3 -6
- package/dist/sync-agent/spaces/models/channel.d.ts.map +1 -1
- package/dist/sync-agent/spaces/models/channel.js +4 -76
- package/dist/sync-agent/spaces/models/channel.js.map +1 -1
- package/dist/sync-agent/spaces/models/space.d.ts +6 -6
- package/dist/sync-agent/spaces/models/space.d.ts.map +1 -1
- package/dist/sync-agent/spaces/models/space.js +8 -30
- package/dist/sync-agent/spaces/models/space.js.map +1 -1
- package/dist/sync-agent/spaces/spaces.d.ts +3 -4
- package/dist/sync-agent/spaces/spaces.d.ts.map +1 -1
- package/dist/sync-agent/spaces/spaces.js +6 -25
- package/dist/sync-agent/spaces/spaces.js.map +1 -1
- package/dist/sync-agent/syncAgent.d.ts.map +1 -1
- package/dist/sync-agent/syncAgent.js +2 -7
- package/dist/sync-agent/syncAgent.js.map +1 -1
- package/dist/townsEnv.d.ts +6 -1
- package/dist/townsEnv.d.ts.map +1 -1
- package/dist/townsEnv.js +29 -5
- package/dist/townsEnv.js.map +1 -1
- package/package.json +10 -10
- package/dist/createBot.d.ts +0 -159
- package/dist/createBot.d.ts.map +0 -1
- package/dist/createBot.js +0 -206
- package/dist/createBot.js.map +0 -1
- package/dist/makeRiverRpcClient.d.ts +0 -6
- package/dist/makeRiverRpcClient.d.ts.map +0 -1
- package/dist/makeRiverRpcClient.js +0 -9
- package/dist/makeRiverRpcClient.js.map +0 -1
- package/dist/streamStateView_ChannelMetadata.d.ts +0 -22
- package/dist/streamStateView_ChannelMetadata.d.ts.map +0 -1
- package/dist/streamStateView_ChannelMetadata.js +0 -77
- package/dist/streamStateView_ChannelMetadata.js.map +0 -1
- package/dist/sync-agent/entitlements/entitlements.d.ts +0 -10
- package/dist/sync-agent/entitlements/entitlements.d.ts.map +0 -1
- package/dist/sync-agent/entitlements/entitlements.js +0 -20
- package/dist/sync-agent/entitlements/entitlements.js.map +0 -1
- package/dist/sync-agent/river-connection/models/riverChain.d.ts +0 -24
- package/dist/sync-agent/river-connection/models/riverChain.d.ts.map +0 -1
- package/dist/sync-agent/river-connection/models/riverChain.js +0 -66
- package/dist/sync-agent/river-connection/models/riverChain.js.map +0 -1
- package/dist/tests/multi/appRegistryService.test.d.ts +0 -2
- package/dist/tests/multi/appRegistryService.test.d.ts.map +0 -1
- package/dist/tests/multi/appRegistryService.test.js +0 -41
- package/dist/tests/multi/appRegistryService.test.js.map +0 -1
- package/dist/tests/multi/botEntitlements.test.d.ts +0 -5
- package/dist/tests/multi/botEntitlements.test.d.ts.map +0 -1
- package/dist/tests/multi/botEntitlements.test.js +0 -178
- package/dist/tests/multi/botEntitlements.test.js.map +0 -1
- package/dist/tests/multi/botMembership.test.d.ts +0 -5
- package/dist/tests/multi/botMembership.test.d.ts.map +0 -1
- package/dist/tests/multi/botMembership.test.js +0 -295
- package/dist/tests/multi/botMembership.test.js.map +0 -1
- package/dist/tests/multi/botStreamCreation.test.d.ts +0 -5
- package/dist/tests/multi/botStreamCreation.test.d.ts.map +0 -1
- package/dist/tests/multi/botStreamCreation.test.js +0 -60
- package/dist/tests/multi/botStreamCreation.test.js.map +0 -1
- package/dist/tests/multi/channelScrubbing.test.d.ts +0 -5
- package/dist/tests/multi/channelScrubbing.test.d.ts.map +0 -1
- package/dist/tests/multi/channelScrubbing.test.js +0 -102
- package/dist/tests/multi/channelScrubbing.test.js.map +0 -1
- package/dist/tests/multi_ne/nodeSelection.test.d.ts +0 -5
- package/dist/tests/multi_ne/nodeSelection.test.d.ts.map +0 -1
- package/dist/tests/multi_ne/nodeSelection.test.js +0 -41
- package/dist/tests/multi_ne/nodeSelection.test.js.map +0 -1
- package/dist/tests/multi_ne/trading.solana.test.d.ts +0 -2
- package/dist/tests/multi_ne/trading.solana.test.d.ts.map +0 -1
- package/dist/tests/multi_ne/trading.solana.test.js +0 -229
- package/dist/tests/multi_ne/trading.solana.test.js.map +0 -1
- package/dist/tests/multi_ne/trading.test.d.ts +0 -2
- package/dist/tests/multi_ne/trading.test.d.ts.map +0 -1
- package/dist/tests/multi_ne/trading.test.js +0 -243
- package/dist/tests/multi_ne/trading.test.js.map +0 -1
package/dist/townsEnv.js
CHANGED
|
@@ -6,6 +6,7 @@ export var TownsService;
|
|
|
6
6
|
TownsService[TownsService["AppRegistry"] = 1] = "AppRegistry";
|
|
7
7
|
TownsService[TownsService["StreamMetadata"] = 2] = "StreamMetadata";
|
|
8
8
|
TownsService[TownsService["Node"] = 3] = "Node";
|
|
9
|
+
TownsService[TownsService["Relayer"] = 4] = "Relayer";
|
|
9
10
|
})(TownsService || (TownsService = {}));
|
|
10
11
|
// we have multiple keys for the same value for backwards compatibility, priority is left to right
|
|
11
12
|
const envKey = {
|
|
@@ -16,6 +17,7 @@ const envKey = {
|
|
|
16
17
|
NOTIFICATION_SERVICE_URL: ['NOTIFICATION_SERVICE_URL'],
|
|
17
18
|
STREAM_METADATA_URL: ['STREAM_METADATA_URL'],
|
|
18
19
|
APP_REGISTRY_URL: ['APP_REGISTRY_URL'],
|
|
20
|
+
RELAYER_URL: ['RELAYER_URL'],
|
|
19
21
|
};
|
|
20
22
|
function getBaseRpcUrlForChain(chainId, opts) {
|
|
21
23
|
switch (chainId) {
|
|
@@ -81,7 +83,7 @@ export function townsEnv(opts) {
|
|
|
81
83
|
}
|
|
82
84
|
switch (environmentId) {
|
|
83
85
|
case 'local_dev':
|
|
84
|
-
return '
|
|
86
|
+
return 'https://localhost:5170';
|
|
85
87
|
case 'alpha':
|
|
86
88
|
return 'https://river-notification-service-alpha.towns.com';
|
|
87
89
|
case 'beta':
|
|
@@ -147,9 +149,9 @@ export function townsEnv(opts) {
|
|
|
147
149
|
case 'delta':
|
|
148
150
|
return 'https://app-registry.delta.towns.com';
|
|
149
151
|
case 'stage':
|
|
150
|
-
return 'https://
|
|
152
|
+
return 'https://chat1.nodes.staging.towns.com';
|
|
151
153
|
case 'prod':
|
|
152
|
-
return 'https://
|
|
154
|
+
return 'https://chat1.nodes.prod.towns.com';
|
|
153
155
|
default:
|
|
154
156
|
throw new Error(`No app registry url for environmentId ${environmentId}`);
|
|
155
157
|
}
|
|
@@ -168,13 +170,33 @@ export function townsEnv(opts) {
|
|
|
168
170
|
case 'omega':
|
|
169
171
|
return 'https://river1.nodes.omega.towns.com/';
|
|
170
172
|
case 'stage':
|
|
171
|
-
return 'https://
|
|
173
|
+
return 'https://chat1.nodes.staging.towns.com';
|
|
172
174
|
case 'prod':
|
|
173
|
-
return 'https://
|
|
175
|
+
return 'https://chat1.nodes.prod.towns.com';
|
|
174
176
|
default:
|
|
175
177
|
throw new Error(`No node url for environmentId ${environmentId}`);
|
|
176
178
|
}
|
|
177
179
|
};
|
|
180
|
+
const getRelayerUrl = (inEnvironmentId) => {
|
|
181
|
+
const environmentId = inEnvironmentId ?? getEnvironmentId();
|
|
182
|
+
// check for override
|
|
183
|
+
if (environmentId === web3.riverEnv) {
|
|
184
|
+
const url = safeEnv(envKey.RELAYER_URL, opts);
|
|
185
|
+
if (url) {
|
|
186
|
+
return url;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
switch (environmentId) {
|
|
190
|
+
case 'local_dev':
|
|
191
|
+
return 'http://127.0.0.1:8787';
|
|
192
|
+
case 'stage':
|
|
193
|
+
return 'https://relayer-worker-stage.johnhntlabs.workers.dev';
|
|
194
|
+
case 'prod':
|
|
195
|
+
return 'https://relayer-worker-prod.johnhntlabs.workers.dev';
|
|
196
|
+
default:
|
|
197
|
+
throw new Error(`No relayer url for environmentId ${environmentId}`);
|
|
198
|
+
}
|
|
199
|
+
};
|
|
178
200
|
const makeRiverChainConfig = (environmentId) => {
|
|
179
201
|
const envId = environmentId ?? getEnvironmentId();
|
|
180
202
|
const env = web3.getDeployment(envId);
|
|
@@ -210,6 +232,7 @@ export function townsEnv(opts) {
|
|
|
210
232
|
appRegistry: { url: getAppRegistryUrl(environmentId) },
|
|
211
233
|
streamMetadata: { url: getStreamMetadataUrl(environmentId) },
|
|
212
234
|
node: { url: getNodeUrl(environmentId) },
|
|
235
|
+
relayer: { url: getRelayerUrl(environmentId) },
|
|
213
236
|
},
|
|
214
237
|
};
|
|
215
238
|
return config;
|
|
@@ -243,6 +266,7 @@ export function townsEnv(opts) {
|
|
|
243
266
|
getAppRegistryUrl,
|
|
244
267
|
getStreamMetadataUrl,
|
|
245
268
|
getNodeUrl,
|
|
269
|
+
getRelayerUrl,
|
|
246
270
|
};
|
|
247
271
|
}
|
|
248
272
|
//# sourceMappingURL=townsEnv.js.map
|
package/dist/townsEnv.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"townsEnv.js","sourceRoot":"","sources":["../src/townsEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAe,MAAM,mBAAmB,CAAA;AAEnE,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"townsEnv.js","sourceRoot":"","sources":["../src/townsEnv.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@towns-labs/sdk",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
"@ethereumjs/util": "^10.0.0",
|
|
22
22
|
"@noble/curves": "^1.9.1",
|
|
23
23
|
"@noble/hashes": "^1.8.0",
|
|
24
|
-
"@towns-labs/encryption": "
|
|
25
|
-
"@towns-labs/generated": "
|
|
26
|
-
"@towns-labs/proto": "
|
|
27
|
-
"@towns-labs/rpc-connector": "
|
|
28
|
-
"@towns-labs/sdk-crypto": "
|
|
29
|
-
"@towns-labs/utils": "
|
|
30
|
-
"@towns-labs/web3": "
|
|
24
|
+
"@towns-labs/encryption": "^2.0.6",
|
|
25
|
+
"@towns-labs/generated": "^2.0.6",
|
|
26
|
+
"@towns-labs/proto": "^2.0.6",
|
|
27
|
+
"@towns-labs/rpc-connector": "^2.0.6",
|
|
28
|
+
"@towns-labs/sdk-crypto": "^2.0.6",
|
|
29
|
+
"@towns-labs/utils": "^2.0.6",
|
|
30
|
+
"@towns-labs/web3": "^2.0.6",
|
|
31
31
|
"debug": "^4.3.4",
|
|
32
32
|
"dexie": "^4.2.1",
|
|
33
33
|
"ethereum-cryptography": "^3.2.0",
|
|
@@ -35,11 +35,11 @@
|
|
|
35
35
|
"lodash-es": "^4.17.21",
|
|
36
36
|
"nanoid": "^4.0.0",
|
|
37
37
|
"p-limit": "^6.1.0",
|
|
38
|
-
"viem": "
|
|
38
|
+
"viem": "2.45.1"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@connectrpc/connect-web": "^2.1.0",
|
|
42
|
-
"@towns-labs/relayer-client": "
|
|
42
|
+
"@towns-labs/relayer-client": "^2.0.6",
|
|
43
43
|
"@types/bun": "^1.3.1",
|
|
44
44
|
"@types/debug": "^4.1.8",
|
|
45
45
|
"@types/lodash-es": "^4.17.12",
|
package/dist/createBot.d.ts
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* createBot - Create a bot (app) account for Towns
|
|
3
|
-
*
|
|
4
|
-
* This function handles the full setup flow:
|
|
5
|
-
* 1. Creates a smart account via EIP-7702 relayer
|
|
6
|
-
* 2. Initializes the user on the River network
|
|
7
|
-
* 3. Sets up encryption keys
|
|
8
|
-
* 4. Returns the app private data needed to run the bot
|
|
9
|
-
*/
|
|
10
|
-
import type { Address, Hex, PublicClient } from 'viem';
|
|
11
|
-
import type { RelayerActions } from '@towns-labs/relayer-client';
|
|
12
|
-
import { type TownsConfig } from './townsEnv';
|
|
13
|
-
/**
|
|
14
|
-
* Input parameters for createBot
|
|
15
|
-
*/
|
|
16
|
-
export interface CreateBotParams {
|
|
17
|
-
/**
|
|
18
|
-
* Bot owner's address - this address will have super admin permissions on the bot account
|
|
19
|
-
*/
|
|
20
|
-
ownerAddress: Address;
|
|
21
|
-
/**
|
|
22
|
-
* Viem public client extended with relayer actions
|
|
23
|
-
*/
|
|
24
|
-
publicClient: PublicClient & RelayerActions;
|
|
25
|
-
/**
|
|
26
|
-
* Contract address for the account proxy (delegation target)
|
|
27
|
-
* Can be obtained from contract deployments: `getAddresses(env, chainId)?.accountProxy`
|
|
28
|
-
*/
|
|
29
|
-
accountProxy: Address;
|
|
30
|
-
/**
|
|
31
|
-
* Towns environment configuration
|
|
32
|
-
* Can be created with `townsEnv().makeTownsConfig()` or provided directly
|
|
33
|
-
*/
|
|
34
|
-
townsConfig?: TownsConfig;
|
|
35
|
-
/**
|
|
36
|
-
* Optional private key for the bot account
|
|
37
|
-
* If not provided, a new random key will be generated
|
|
38
|
-
*/
|
|
39
|
-
botPrivateKey?: Hex;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Result from createBot
|
|
43
|
-
*/
|
|
44
|
-
export interface CreateBotResult {
|
|
45
|
-
/**
|
|
46
|
-
* The app address (smart account address) for the bot
|
|
47
|
-
*/
|
|
48
|
-
appAddress: Address;
|
|
49
|
-
/**
|
|
50
|
-
* The private key for the bot account
|
|
51
|
-
* Store this securely if you didn't provide your own
|
|
52
|
-
*/
|
|
53
|
-
botPrivateKey: Hex;
|
|
54
|
-
/**
|
|
55
|
-
* The encoded app private data string
|
|
56
|
-
* This contains everything needed to initialize the bot:
|
|
57
|
-
* - Private key
|
|
58
|
-
* - Encryption device
|
|
59
|
-
* - Environment
|
|
60
|
-
* - App address
|
|
61
|
-
*
|
|
62
|
-
* Use this with `makeTownsAgent()` from `@towns-labs/agent`
|
|
63
|
-
*/
|
|
64
|
-
appPrivateData: string;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Creates a bot account for Towns.
|
|
68
|
-
*
|
|
69
|
-
* This sets up everything needed to run a bot:
|
|
70
|
-
* - Creates an EIP-7702 smart account via the relayer
|
|
71
|
-
* - Initializes the user on the River network
|
|
72
|
-
* - Sets up encryption keys for E2E encrypted messaging
|
|
73
|
-
* - Returns the app private data needed to run the bot
|
|
74
|
-
*
|
|
75
|
-
* @example
|
|
76
|
-
* ```typescript
|
|
77
|
-
* import { createPublicClient, http } from 'viem'
|
|
78
|
-
* import { base } from 'viem/chains'
|
|
79
|
-
* import { relayerActions } from '@towns-labs/relayer-client'
|
|
80
|
-
* import { getAddresses } from '@towns-labs/contracts/deployments'
|
|
81
|
-
* import { createBot, townsEnv } from '@towns-labs/sdk'
|
|
82
|
-
*
|
|
83
|
-
* // Set up public client with relayer
|
|
84
|
-
* const publicClient = createPublicClient({
|
|
85
|
-
* chain: base,
|
|
86
|
-
* transport: http('https://mainnet.base.org'),
|
|
87
|
-
* }).extend(relayerActions({ relayerUrl: 'https://relayer.towns.com' }))
|
|
88
|
-
*
|
|
89
|
-
* // Get contract addresses for your environment
|
|
90
|
-
* const contracts = getAddresses('omega', base.id)
|
|
91
|
-
*
|
|
92
|
-
* // Create the bot
|
|
93
|
-
* const { appAddress, appPrivateData, botPrivateKey } = await createBot({
|
|
94
|
-
* ownerAddress: '0x...your-wallet-address...',
|
|
95
|
-
* publicClient,
|
|
96
|
-
* accountProxy: contracts.accountProxy,
|
|
97
|
-
* })
|
|
98
|
-
*
|
|
99
|
-
* console.log('Bot created:', appAddress)
|
|
100
|
-
* console.log('Save this app private data securely:', appPrivateData)
|
|
101
|
-
*
|
|
102
|
-
* // Now you can use appPrivateData with makeTownsAgent()
|
|
103
|
-
* ```
|
|
104
|
-
*/
|
|
105
|
-
export declare function createBot(params: CreateBotParams): Promise<CreateBotResult>;
|
|
106
|
-
/**
|
|
107
|
-
* Options for createBotFromWallet - uses WalletClient instead of private key
|
|
108
|
-
*/
|
|
109
|
-
export interface CreateBotFromWalletParams {
|
|
110
|
-
/**
|
|
111
|
-
* Bot owner's address - this address will have super admin permissions on the bot account
|
|
112
|
-
*/
|
|
113
|
-
ownerAddress: Address;
|
|
114
|
-
/**
|
|
115
|
-
* Viem public client extended with relayer actions
|
|
116
|
-
*/
|
|
117
|
-
publicClient: PublicClient & RelayerActions;
|
|
118
|
-
/**
|
|
119
|
-
* Contract address for the account proxy (delegation target)
|
|
120
|
-
*/
|
|
121
|
-
accountProxy: Address;
|
|
122
|
-
/**
|
|
123
|
-
* Viem WalletClient for signing (must have account configured)
|
|
124
|
-
*/
|
|
125
|
-
walletClient: Parameters<RelayerActions['createAccountWithWallet']>[0]['walletClient'];
|
|
126
|
-
/**
|
|
127
|
-
* Towns environment configuration
|
|
128
|
-
*/
|
|
129
|
-
townsConfig?: TownsConfig;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Creates a bot account using a WalletClient for signing.
|
|
133
|
-
*
|
|
134
|
-
* This variant is useful when you want to use a browser wallet or
|
|
135
|
-
* other wallet provider that doesn't expose private keys directly.
|
|
136
|
-
*
|
|
137
|
-
* Note: You must provide a separate private key for the bot's encryption
|
|
138
|
-
* device since the WalletClient can't export keys.
|
|
139
|
-
*
|
|
140
|
-
* @example
|
|
141
|
-
* ```typescript
|
|
142
|
-
* import { createWalletClient, custom } from 'viem'
|
|
143
|
-
*
|
|
144
|
-
* const walletClient = createWalletClient({
|
|
145
|
-
* account: window.ethereum.selectedAddress,
|
|
146
|
-
* chain: base,
|
|
147
|
-
* transport: custom(window.ethereum),
|
|
148
|
-
* })
|
|
149
|
-
*
|
|
150
|
-
* const result = await createBotFromWallet({
|
|
151
|
-
* ownerAddress: walletClient.account.address,
|
|
152
|
-
* publicClient,
|
|
153
|
-
* accountProxy: contracts.accountProxy,
|
|
154
|
-
* walletClient,
|
|
155
|
-
* })
|
|
156
|
-
* ```
|
|
157
|
-
*/
|
|
158
|
-
export declare function createBotFromWallet(params: CreateBotFromWalletParams): Promise<CreateBotResult>;
|
|
159
|
-
//# sourceMappingURL=createBot.d.ts.map
|
package/dist/createBot.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createBot.d.ts","sourceRoot":"","sources":["../src/createBot.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAItD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAOhE,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAEvD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,YAAY,EAAE,OAAO,CAAA;IAErB;;OAEG;IACH,YAAY,EAAE,YAAY,GAAG,cAAc,CAAA;IAE3C;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAA;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAA;IAEzB;;;OAGG;IACH,aAAa,CAAC,EAAE,GAAG,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,UAAU,EAAE,OAAO,CAAA;IAEnB;;;OAGG;IACH,aAAa,EAAE,GAAG,CAAA;IAElB;;;;;;;;;OASG;IACH,cAAc,EAAE,MAAM,CAAA;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAmFjF;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,YAAY,EAAE,OAAO,CAAA;IAErB;;OAEG;IACH,YAAY,EAAE,YAAY,GAAG,cAAc,CAAA;IAE3C;;OAEG;IACH,YAAY,EAAE,OAAO,CAAA;IAErB;;OAEG;IACH,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAA;IAEtF;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,yBAAyB,GAClC,OAAO,CAAC,eAAe,CAAC,CAmF1B"}
|
package/dist/createBot.js
DELETED
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* createBot - Create a bot (app) account for Towns
|
|
3
|
-
*
|
|
4
|
-
* This function handles the full setup flow:
|
|
5
|
-
* 1. Creates a smart account via EIP-7702 relayer
|
|
6
|
-
* 2. Initializes the user on the River network
|
|
7
|
-
* 3. Sets up encryption keys
|
|
8
|
-
* 4. Returns the app private data needed to run the bot
|
|
9
|
-
*/
|
|
10
|
-
import { privateKeyToAccount, generatePrivateKey } from 'viem/accounts';
|
|
11
|
-
import { encodeAbiParameters } from 'viem';
|
|
12
|
-
import { ethers } from 'ethers';
|
|
13
|
-
import { Client } from './client';
|
|
14
|
-
import { makeSignerContext } from './signerContext';
|
|
15
|
-
import { makeStreamRpcClient } from './makeStreamRpcClient';
|
|
16
|
-
import { RiverDbManager } from './riverDbManager';
|
|
17
|
-
import { MockEntitlementsDelegate } from './utils';
|
|
18
|
-
import { makeAppPrivateData } from './id';
|
|
19
|
-
import { townsEnv } from './townsEnv';
|
|
20
|
-
/**
|
|
21
|
-
* Creates a bot account for Towns.
|
|
22
|
-
*
|
|
23
|
-
* This sets up everything needed to run a bot:
|
|
24
|
-
* - Creates an EIP-7702 smart account via the relayer
|
|
25
|
-
* - Initializes the user on the River network
|
|
26
|
-
* - Sets up encryption keys for E2E encrypted messaging
|
|
27
|
-
* - Returns the app private data needed to run the bot
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* ```typescript
|
|
31
|
-
* import { createPublicClient, http } from 'viem'
|
|
32
|
-
* import { base } from 'viem/chains'
|
|
33
|
-
* import { relayerActions } from '@towns-labs/relayer-client'
|
|
34
|
-
* import { getAddresses } from '@towns-labs/contracts/deployments'
|
|
35
|
-
* import { createBot, townsEnv } from '@towns-labs/sdk'
|
|
36
|
-
*
|
|
37
|
-
* // Set up public client with relayer
|
|
38
|
-
* const publicClient = createPublicClient({
|
|
39
|
-
* chain: base,
|
|
40
|
-
* transport: http('https://mainnet.base.org'),
|
|
41
|
-
* }).extend(relayerActions({ relayerUrl: 'https://relayer.towns.com' }))
|
|
42
|
-
*
|
|
43
|
-
* // Get contract addresses for your environment
|
|
44
|
-
* const contracts = getAddresses('omega', base.id)
|
|
45
|
-
*
|
|
46
|
-
* // Create the bot
|
|
47
|
-
* const { appAddress, appPrivateData, botPrivateKey } = await createBot({
|
|
48
|
-
* ownerAddress: '0x...your-wallet-address...',
|
|
49
|
-
* publicClient,
|
|
50
|
-
* accountProxy: contracts.accountProxy,
|
|
51
|
-
* })
|
|
52
|
-
*
|
|
53
|
-
* console.log('Bot created:', appAddress)
|
|
54
|
-
* console.log('Save this app private data securely:', appPrivateData)
|
|
55
|
-
*
|
|
56
|
-
* // Now you can use appPrivateData with makeTownsAgent()
|
|
57
|
-
* ```
|
|
58
|
-
*/
|
|
59
|
-
export async function createBot(params) {
|
|
60
|
-
const { ownerAddress, publicClient, accountProxy, botPrivateKey: providedPrivateKey } = params;
|
|
61
|
-
// Get or create the towns config
|
|
62
|
-
const townsConfig = params.townsConfig ?? townsEnv().makeTownsConfig();
|
|
63
|
-
// Generate or use provided private key
|
|
64
|
-
const botPrivateKey = providedPrivateKey ?? generatePrivateKey();
|
|
65
|
-
const botAccount = privateKeyToAccount(botPrivateKey);
|
|
66
|
-
// Encode the owner address for super admin key authorization
|
|
67
|
-
const encodedSuperAdminKey = encodeAbiParameters([{ type: 'address' }], [ownerAddress]);
|
|
68
|
-
// Step 1: Create the smart account via relayer
|
|
69
|
-
const { accountAddress, success, error } = await publicClient.createAccount({
|
|
70
|
-
accountAddress: botAccount.address,
|
|
71
|
-
signerKey: botPrivateKey,
|
|
72
|
-
delegation: accountProxy,
|
|
73
|
-
authorizeKeys: [
|
|
74
|
-
{
|
|
75
|
-
expiry: '0', // No expiry
|
|
76
|
-
type: 'secp256k1',
|
|
77
|
-
role: 'admin',
|
|
78
|
-
publicKey: encodedSuperAdminKey,
|
|
79
|
-
permissions: [],
|
|
80
|
-
},
|
|
81
|
-
],
|
|
82
|
-
});
|
|
83
|
-
if (!success || !accountAddress) {
|
|
84
|
-
throw new Error(`Failed to create bot account: ${error ?? 'Unknown error'}`);
|
|
85
|
-
}
|
|
86
|
-
// Step 2: Create signer context using viem account for primary, ethers for delegate
|
|
87
|
-
const delegatePrivateKey = generatePrivateKey();
|
|
88
|
-
const delegateWallet = new ethers.Wallet(delegatePrivateKey);
|
|
89
|
-
const signerContext = await makeSignerContext(botAccount, delegateWallet);
|
|
90
|
-
// Step 3: Create RPC client
|
|
91
|
-
const rpcClient = makeStreamRpcClient(townsConfig.services.node.url);
|
|
92
|
-
// Step 4: Create crypto store
|
|
93
|
-
const cryptoStore = RiverDbManager.getCryptoDb(accountAddress);
|
|
94
|
-
// Step 5: Create and initialize the client
|
|
95
|
-
const botClient = new Client(signerContext, accountAddress, rpcClient, cryptoStore, new MockEntitlementsDelegate());
|
|
96
|
-
try {
|
|
97
|
-
// Step 6: Initialize user on the River network
|
|
98
|
-
await botClient.initializeUser({ appOwnerAddress: ownerAddress, skipSync: true });
|
|
99
|
-
// Step 7: Upload device keys for encryption
|
|
100
|
-
await botClient.uploadDeviceKeys();
|
|
101
|
-
// Step 8: Export the encryption device
|
|
102
|
-
const exportedDevice = await botClient.cryptoBackend?.exportDevice();
|
|
103
|
-
if (!exportedDevice) {
|
|
104
|
-
throw new Error('Failed to export encryption device');
|
|
105
|
-
}
|
|
106
|
-
// Step 9: Create the app private data
|
|
107
|
-
const appPrivateData = makeAppPrivateData(botPrivateKey, exportedDevice, townsConfig.environmentId, accountAddress);
|
|
108
|
-
return {
|
|
109
|
-
appAddress: accountAddress,
|
|
110
|
-
botPrivateKey,
|
|
111
|
-
appPrivateData,
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
finally {
|
|
115
|
-
// Always stop the client
|
|
116
|
-
await botClient.stop();
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Creates a bot account using a WalletClient for signing.
|
|
121
|
-
*
|
|
122
|
-
* This variant is useful when you want to use a browser wallet or
|
|
123
|
-
* other wallet provider that doesn't expose private keys directly.
|
|
124
|
-
*
|
|
125
|
-
* Note: You must provide a separate private key for the bot's encryption
|
|
126
|
-
* device since the WalletClient can't export keys.
|
|
127
|
-
*
|
|
128
|
-
* @example
|
|
129
|
-
* ```typescript
|
|
130
|
-
* import { createWalletClient, custom } from 'viem'
|
|
131
|
-
*
|
|
132
|
-
* const walletClient = createWalletClient({
|
|
133
|
-
* account: window.ethereum.selectedAddress,
|
|
134
|
-
* chain: base,
|
|
135
|
-
* transport: custom(window.ethereum),
|
|
136
|
-
* })
|
|
137
|
-
*
|
|
138
|
-
* const result = await createBotFromWallet({
|
|
139
|
-
* ownerAddress: walletClient.account.address,
|
|
140
|
-
* publicClient,
|
|
141
|
-
* accountProxy: contracts.accountProxy,
|
|
142
|
-
* walletClient,
|
|
143
|
-
* })
|
|
144
|
-
* ```
|
|
145
|
-
*/
|
|
146
|
-
export async function createBotFromWallet(params) {
|
|
147
|
-
const { ownerAddress, publicClient, accountProxy, walletClient } = params;
|
|
148
|
-
// Get or create the towns config
|
|
149
|
-
const townsConfig = params.townsConfig ?? townsEnv().makeTownsConfig();
|
|
150
|
-
// Generate a new private key for the bot
|
|
151
|
-
const botPrivateKey = generatePrivateKey();
|
|
152
|
-
const botAccount = privateKeyToAccount(botPrivateKey);
|
|
153
|
-
// Encode the owner address for super admin key authorization
|
|
154
|
-
const encodedSuperAdminKey = encodeAbiParameters([{ type: 'address' }], [ownerAddress]);
|
|
155
|
-
// Step 1: Create the smart account via relayer using wallet client
|
|
156
|
-
const { accountAddress, success, error } = await publicClient.createAccountWithWallet({
|
|
157
|
-
accountAddress: botAccount.address,
|
|
158
|
-
walletClient,
|
|
159
|
-
delegation: accountProxy,
|
|
160
|
-
authorizeKeys: [
|
|
161
|
-
{
|
|
162
|
-
expiry: '0',
|
|
163
|
-
type: 'secp256k1',
|
|
164
|
-
role: 'admin',
|
|
165
|
-
publicKey: encodedSuperAdminKey,
|
|
166
|
-
permissions: [],
|
|
167
|
-
},
|
|
168
|
-
],
|
|
169
|
-
});
|
|
170
|
-
if (!success || !accountAddress) {
|
|
171
|
-
throw new Error(`Failed to create bot account: ${error ?? 'Unknown error'}`);
|
|
172
|
-
}
|
|
173
|
-
// Step 2: Create signer context using viem account for primary, ethers for delegate
|
|
174
|
-
const delegatePrivateKey = generatePrivateKey();
|
|
175
|
-
const delegateWallet = new ethers.Wallet(delegatePrivateKey);
|
|
176
|
-
const signerContext = await makeSignerContext(botAccount, delegateWallet);
|
|
177
|
-
// Step 3: Create RPC client
|
|
178
|
-
const rpcClient = makeStreamRpcClient(townsConfig.services.node.url);
|
|
179
|
-
// Step 4: Create crypto store
|
|
180
|
-
const cryptoStore = RiverDbManager.getCryptoDb(accountAddress);
|
|
181
|
-
// Step 5: Create and initialize the client
|
|
182
|
-
const botClient = new Client(signerContext, accountAddress, rpcClient, cryptoStore, new MockEntitlementsDelegate());
|
|
183
|
-
try {
|
|
184
|
-
// Step 6: Initialize user on the River network
|
|
185
|
-
await botClient.initializeUser({ appOwnerAddress: ownerAddress, skipSync: true });
|
|
186
|
-
// Step 7: Upload device keys for encryption
|
|
187
|
-
await botClient.uploadDeviceKeys();
|
|
188
|
-
// Step 8: Export the encryption device
|
|
189
|
-
const exportedDevice = await botClient.cryptoBackend?.exportDevice();
|
|
190
|
-
if (!exportedDevice) {
|
|
191
|
-
throw new Error('Failed to export encryption device');
|
|
192
|
-
}
|
|
193
|
-
// Step 9: Create the app private data
|
|
194
|
-
const appPrivateData = makeAppPrivateData(botPrivateKey, exportedDevice, townsConfig.environmentId, accountAddress);
|
|
195
|
-
return {
|
|
196
|
-
appAddress: accountAddress,
|
|
197
|
-
botPrivateKey,
|
|
198
|
-
appPrivateData,
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
finally {
|
|
202
|
-
// Always stop the client
|
|
203
|
-
await botClient.stop();
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
//# sourceMappingURL=createBot.js.map
|
package/dist/createBot.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createBot.js","sourceRoot":"","sources":["../src/createBot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { RiverChainConfig } from '@towns-protocol/web3';
|
|
2
|
-
import { StreamRpcClient } from './makeStreamRpcClient';
|
|
3
|
-
import { ethers } from 'ethers';
|
|
4
|
-
import { RpcOptions } from './rpcCommon';
|
|
5
|
-
export declare function makeRiverRpcClient(provider: ethers.providers.Provider, config: RiverChainConfig, opts?: RpcOptions): Promise<StreamRpcClient>;
|
|
6
|
-
//# sourceMappingURL=makeRiverRpcClient.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"makeRiverRpcClient.d.ts","sourceRoot":"","sources":["../src/makeRiverRpcClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,sBAAsB,CAAA;AAC5E,OAAO,EAAE,eAAe,EAAuB,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,wBAAsB,kBAAkB,CACpC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,MAAM,EAAE,gBAAgB,EACxB,IAAI,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,eAAe,CAAC,CAK1B"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { createRiverRegistry } from '@towns-protocol/web3';
|
|
2
|
-
import { makeStreamRpcClient } from './makeStreamRpcClient';
|
|
3
|
-
export async function makeRiverRpcClient(provider, config, opts) {
|
|
4
|
-
const riverRegistry = createRiverRegistry(provider, config);
|
|
5
|
-
const urls = await riverRegistry.getOperationalNodeUrls();
|
|
6
|
-
const rpcClient = makeStreamRpcClient(urls, () => riverRegistry.getOperationalNodeUrls(), opts);
|
|
7
|
-
return rpcClient;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=makeRiverRpcClient.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"makeRiverRpcClient.js","sourceRoot":"","sources":["../src/makeRiverRpcClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC5E,OAAO,EAAmB,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAI5E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,QAAmC,EACnC,MAAwB,EACxB,IAAiB;IAEjB,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC3D,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,sBAAsB,EAAE,CAAA;IACzD,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,sBAAsB,EAAE,EAAE,IAAI,CAAC,CAAA;IAC/F,OAAO,SAAS,CAAA;AACpB,CAAC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import TypedEmitter from 'typed-emitter';
|
|
2
|
-
import { ChannelProperties, WrappedEncryptedData } from '@towns-labs/proto';
|
|
3
|
-
import { DecryptedContent } from './encryptedContentTypes';
|
|
4
|
-
import { StreamEncryptionEvents, StreamEvents, StreamStateEvents } from './streamEvents';
|
|
5
|
-
import { RemoteTimelineEvent } from './types';
|
|
6
|
-
import { GdmStreamModel, GdmStreamsView } from './views/streams/gdmStreams';
|
|
7
|
-
export declare class StreamStateView_ChannelMetadata {
|
|
8
|
-
private gdmStreamsView;
|
|
9
|
-
log: import("@towns-labs/utils").DLogger;
|
|
10
|
-
readonly streamId: string;
|
|
11
|
-
get channelProperties(): ChannelProperties | undefined;
|
|
12
|
-
get metadataEventId(): string | undefined;
|
|
13
|
-
get gdmStreamModel(): GdmStreamModel;
|
|
14
|
-
constructor(streamId: string, gdmStreamsView: GdmStreamsView);
|
|
15
|
-
applySnapshot(encryptedChannelProperties: WrappedEncryptedData, cleartexts: Record<string, Uint8Array | string> | undefined, encryptionEmitter: TypedEmitter<StreamEncryptionEvents> | undefined): void;
|
|
16
|
-
appendEvent(event: RemoteTimelineEvent, cleartext: Uint8Array | string | undefined, emitter: TypedEmitter<StreamEvents> | undefined): void;
|
|
17
|
-
prependEvent(_event: RemoteTimelineEvent, _cleartext: Uint8Array | string | undefined, _emitter: TypedEmitter<StreamEvents> | undefined): void;
|
|
18
|
-
onDecryptedContent(eventId: string, content: DecryptedContent, stateEmitter: TypedEmitter<StreamStateEvents>): void;
|
|
19
|
-
private decryptPayload;
|
|
20
|
-
private handleDecryptedContent;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=streamStateView_ChannelMetadata.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streamStateView_ChannelMetadata.d.ts","sourceRoot":"","sources":["../src/streamStateView_ChannelMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAiB,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAE1F,OAAO,EAAE,gBAAgB,EAAsB,MAAM,yBAAyB,CAAA;AAC9E,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAG3E,qBAAa,+BAA+B;IAmBpC,OAAO,CAAC,cAAc;IAlB1B,GAAG,sCAAuC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IAGzB,IAAI,iBAAiB,IAAI,iBAAiB,GAAG,SAAS,CAErD;IAED,IAAI,eAAe,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,IAAI,cAAc,IAAI,cAAc,CAEnC;gBAGG,QAAQ,EAAE,MAAM,EACR,cAAc,EAAE,cAAc;IAK1C,aAAa,CACT,0BAA0B,EAAE,oBAAoB,EAChD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC,GAAG,SAAS,EAC3D,iBAAiB,EAAE,YAAY,CAAC,sBAAsB,CAAC,GAAG,SAAS,GACpE,IAAI;IAWP,WAAW,CACP,KAAK,EAAE,mBAAmB,EAC1B,SAAS,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,EAC1C,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC,GAAG,SAAS,GAChD,IAAI;IAQP,YAAY,CACR,MAAM,EAAE,mBAAmB,EAC3B,UAAU,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,EAC3C,QAAQ,EAAE,YAAY,CAAC,YAAY,CAAC,GAAG,SAAS,GACjD,IAAI;IAIP,kBAAkB,CACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,YAAY,CAAC,iBAAiB,CAAC,GAC9C,IAAI;IAIP,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,sBAAsB;CAwBjC"}
|