@towns-labs/sdk 2.0.5 → 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.js +5 -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/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": "^2.0.
|
|
25
|
-
"@towns-labs/generated": "^2.0.
|
|
26
|
-
"@towns-labs/proto": "^2.0.
|
|
27
|
-
"@towns-labs/rpc-connector": "^2.0.
|
|
28
|
-
"@towns-labs/sdk-crypto": "^2.0.
|
|
29
|
-
"@towns-labs/utils": "^2.0.
|
|
30
|
-
"@towns-labs/web3": "^2.0.
|
|
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": "^2.0.
|
|
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"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { bin_toHexString, dlog, check } from '@towns-labs/utils';
|
|
2
|
-
import { toDecryptedContent } from './encryptedContentTypes';
|
|
3
|
-
// channel metadata is only used by gdms, could be moved back into the _GDMChannel helper
|
|
4
|
-
export class StreamStateView_ChannelMetadata {
|
|
5
|
-
gdmStreamsView;
|
|
6
|
-
log = dlog('csb:streams:channel_metadata');
|
|
7
|
-
streamId;
|
|
8
|
-
// named channelProperties for backwards compatibility
|
|
9
|
-
get channelProperties() {
|
|
10
|
-
return this.gdmStreamModel.metadata;
|
|
11
|
-
}
|
|
12
|
-
get metadataEventId() {
|
|
13
|
-
return this.gdmStreamModel.metadataEventId;
|
|
14
|
-
}
|
|
15
|
-
get gdmStreamModel() {
|
|
16
|
-
return this.gdmStreamsView.get(this.streamId);
|
|
17
|
-
}
|
|
18
|
-
constructor(streamId, gdmStreamsView) {
|
|
19
|
-
this.gdmStreamsView = gdmStreamsView;
|
|
20
|
-
this.streamId = streamId;
|
|
21
|
-
}
|
|
22
|
-
applySnapshot(encryptedChannelProperties, cleartexts, encryptionEmitter) {
|
|
23
|
-
if (!encryptedChannelProperties.data) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
const eventId = bin_toHexString(encryptedChannelProperties.eventHash);
|
|
27
|
-
const cleartext = cleartexts?.[eventId];
|
|
28
|
-
this.gdmStreamsView.setLatestMetadataEventId(this.streamId, eventId);
|
|
29
|
-
this.decryptPayload(encryptedChannelProperties.data, eventId, cleartext, encryptionEmitter);
|
|
30
|
-
}
|
|
31
|
-
appendEvent(event, cleartext, emitter) {
|
|
32
|
-
check(event.remoteEvent.event.payload.case === 'gdmChannelPayload');
|
|
33
|
-
check(event.remoteEvent.event.payload.value.content.case === 'channelProperties');
|
|
34
|
-
const payload = event.remoteEvent.event.payload.value.content.value;
|
|
35
|
-
this.gdmStreamsView.setLatestMetadataEventId(this.streamId, event.hashStr);
|
|
36
|
-
this.decryptPayload(payload, event.hashStr, cleartext, emitter);
|
|
37
|
-
}
|
|
38
|
-
prependEvent(_event, _cleartext, _emitter) {
|
|
39
|
-
// conveyed in snapshot
|
|
40
|
-
}
|
|
41
|
-
onDecryptedContent(eventId, content, stateEmitter) {
|
|
42
|
-
this.handleDecryptedContent(eventId, content, stateEmitter);
|
|
43
|
-
}
|
|
44
|
-
decryptPayload(payload, eventId, cleartext, encryptionEmitter) {
|
|
45
|
-
if (cleartext) {
|
|
46
|
-
const decryptedContent = toDecryptedContent('channelProperties', payload.version, cleartext);
|
|
47
|
-
this.handleDecryptedContent(eventId, decryptedContent, encryptionEmitter);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
encryptionEmitter?.emit('newEncryptedContent', this.streamId, eventId, {
|
|
51
|
-
kind: 'channelProperties',
|
|
52
|
-
content: payload,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
handleDecryptedContent(eventId, content, emitter) {
|
|
57
|
-
if (content.kind === 'channelProperties') {
|
|
58
|
-
if (!this.gdmStreamModel.metadataEventId ||
|
|
59
|
-
!this.gdmStreamModel.metadata ||
|
|
60
|
-
this.gdmStreamModel.latestMetadataEventId === eventId) {
|
|
61
|
-
this.gdmStreamsView.setMetadata(this.streamId, content.content, eventId);
|
|
62
|
-
emitter?.emit('streamChannelPropertiesUpdated', this.streamId);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
this.log('channelProperties eventId mismatch', {
|
|
66
|
-
eventId,
|
|
67
|
-
content,
|
|
68
|
-
gdmStreamModel: this.gdmStreamModel,
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
check(false);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=streamStateView_ChannelMetadata.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streamStateView_ChannelMetadata.js","sourceRoot":"","sources":["../src/streamStateView_ChannelMetadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { EntitlementsDelegate } from '../../decryptionExtensions';
|
|
2
|
-
import { Permission, SpaceDapp } from '@towns-labs/web3';
|
|
3
|
-
import { TownsConfig } from '../../townsEnv';
|
|
4
|
-
export declare class Entitlements implements EntitlementsDelegate {
|
|
5
|
-
private config;
|
|
6
|
-
private spaceDapp;
|
|
7
|
-
constructor(config: TownsConfig, spaceDapp: SpaceDapp);
|
|
8
|
-
isEntitled(spaceId: string | undefined, channelId: string | undefined, user: string, permission: Permission): Promise<boolean>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=entitlements.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entitlements.d.ts","sourceRoot":"","sources":["../../../src/sync-agent/entitlements/entitlements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,qBAAa,YAAa,YAAW,oBAAoB;IAEjD,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;gBADT,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,SAAS;IAG1B,UAAU,CACZ,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,UAAU;CAU7B"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export class Entitlements {
|
|
2
|
-
config;
|
|
3
|
-
spaceDapp;
|
|
4
|
-
constructor(config, spaceDapp) {
|
|
5
|
-
this.config = config;
|
|
6
|
-
this.spaceDapp = spaceDapp;
|
|
7
|
-
}
|
|
8
|
-
async isEntitled(spaceId, channelId, user, permission) {
|
|
9
|
-
if (channelId && spaceId) {
|
|
10
|
-
return this.spaceDapp.isEntitledToChannel(spaceId, channelId, user, permission);
|
|
11
|
-
}
|
|
12
|
-
else if (spaceId) {
|
|
13
|
-
return this.spaceDapp.isEntitledToSpace(spaceId, user, permission);
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
return true;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=entitlements.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entitlements.js","sourceRoot":"","sources":["../../../src/sync-agent/entitlements/entitlements.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,YAAY;IAET;IACA;IAFZ,YACY,MAAmB,EACnB,SAAoB;QADpB,WAAM,GAAN,MAAM,CAAa;QACnB,cAAS,GAAT,SAAS,CAAW;IAC7B,CAAC;IAEJ,KAAK,CAAC,UAAU,CACZ,OAA2B,EAC3B,SAA6B,EAC7B,IAAY,EACZ,UAAsB;QAEtB,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;QACnF,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;QACtE,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAA;QACf,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { RiverRegistry } from '@towns-protocol/web3';
|
|
2
|
-
import { PersistedObservable } from '../../../observable/persistedObservable';
|
|
3
|
-
import { Store } from '../../../store/store';
|
|
4
|
-
export interface RiverChainModel {
|
|
5
|
-
id: '0';
|
|
6
|
-
urls: {
|
|
7
|
-
value: string;
|
|
8
|
-
fetchedAtMs?: number;
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
export declare class RiverChain extends PersistedObservable<RiverChainModel> {
|
|
12
|
-
private riverRegistryDapp;
|
|
13
|
-
private userId;
|
|
14
|
-
private log;
|
|
15
|
-
private sessionStartMs;
|
|
16
|
-
private stopped;
|
|
17
|
-
constructor(store: Store, riverRegistryDapp: RiverRegistry, userId: string, logId: string);
|
|
18
|
-
protected onLoaded(): void;
|
|
19
|
-
stop(): void;
|
|
20
|
-
urls(): Promise<string>;
|
|
21
|
-
fetchUrls(): Promise<string>;
|
|
22
|
-
private withInfiniteRetries;
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=riverChain.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"riverChain.d.ts","sourceRoot":"","sources":["../../../../src/sync-agent/river-connection/models/riverChain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAuB,MAAM,yCAAyC,CAAA;AAClG,OAAO,EAAgB,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAM1D,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,GAAG,CAAA;IAEP,IAAI,EAAE;QACF,KAAK,EAAE,MAAM,CAAA;QACb,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACJ;AAGD,qBAGa,UAAW,SAAQ,mBAAmB,CAAC,eAAe,CAAC;IAO5D,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,MAAM;IAPlB,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,OAAO,CAAQ;gBAGnB,KAAK,EAAE,KAAK,EACJ,iBAAiB,EAAE,aAAa,EAChC,MAAM,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM;cASE,QAAQ;IAK3B,IAAI;IAIE,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAQvB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAOlC,OAAO,CAAC,mBAAmB;CAY9B"}
|