@latticexyz/services 2.0.0-next.0 → 2.0.0-next.10

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/README.md CHANGED
@@ -1,241 +1 @@
1
- # Services
2
-
3
- This package contains MUD services -- complimentary software components for enhanced interactions with on-chain state when building with MUD. Services work out-of-the-box with any project built with MUD.
4
-
5
- ## V2 Services
6
-
7
- ### [📄 Docs](#)
8
-
9
- The following services are available for use with MUD V2. For more details on each service, see the linked docs page.
10
-
11
- | Service | Description | Proto / Spec | Default Port |
12
- | ------- | :------------------------------------------------------------------------------------ | :------------------------------- | -----------: |
13
- | mode | A node for MUD. PostgresDB-based indexer of MUD V2 events across chains + MUD worlds. | [mode.proto](./proto/mode.proto) | 50091 |
14
-
15
- ### 🏃 Quickstart
16
-
17
- #### Running MODE with Docker Compose
18
-
19
- (Only tested on MacOS for now.)
20
-
21
- 1. Install Docker for Mac (https://docs.docker.com/docker-for-mac/install/)
22
- 2. Install Docker Compose (https://docs.docker.com/compose/install/)
23
- 3. Run `docker-compose -f docker-compose.mode.yaml up`. This will start services for both MODE and PostgresDB.
24
- 4. By default it will connect to a local anvil node at `localhost:8545`. If you want to connect to a different node, you can change the `rpc.http` and `rpc.ws` fields in the `config.mode-docker.yaml` file.
25
-
26
- #### Running the MODE service
27
-
28
- 1. Install Go
29
- 2. Install Postgres
30
- 3. Deside which database you want to use, e.g. `mode` and create the database
31
- 4. Set up logical replication on the database of your choice, e.g. `mode`. Logical replication is used to enable fast MUD state change streaming using the WAL (Write-Ahead Log) of the database. For more infromation on logical replication, see the [Postgres documentation](https://www.postgresql.org/docs/current/logical-replication.html). For this you need to
32
- 1. Modify the DB config to use logical replication. This is done by adding the following to the `postgresql.conf` file:
33
- ```
34
- wal_level = logical
35
- max_replication_slots = 1
36
- max_wal_senders = 1
37
- ```
38
- alternatively you can use the following SQL commands:
39
- ```sql
40
- ALTER SYSTEM SET wal_level = logical;
41
- ALTER SYSTEM SET max_replication_slots = 1;
42
- ALTER SYSTEM SET max_wal_senders = 1;
43
- ```
44
- 2. Restart the DB
45
- 5. Build the source. This will build the MODE service
46
-
47
- ```bash
48
- make mode
49
- ```
50
-
51
- 6. Modify `config.mode.yaml` MODE config file to match your preferences. MODE can be configured either with a config file or via command line arguments (both will do the same thing). In this step you should probably change the `dsn` section to match your database name created in step (3): this is what MODE uses to connect to Postgres. Additionally change the `chains` section in case you'd like to connect and have MODE index a different chain other than a local node. You can also change the `port`s to match your preferences. Example config file:
52
-
53
- ```yaml
54
- chains:
55
- - name: "localhost"
56
- id: "31337"
57
- rpc:
58
- http: "http://localhost:8545"
59
- ws: "ws://localhost:8545"
60
- db:
61
- dsn: "postgresql://localhost:5432/mode_ephemeral?sslmode=disable&replication=database"
62
- wipe: false
63
- sync:
64
- enabled: true
65
- startBlock: 0
66
- blockBatchCount: 10000
67
- ql:
68
- port: 50091
69
- metrics:
70
- port: 6060
71
- ```
72
-
73
- 7. If you're running with the default localhost / `31337` chain, make sure there is a local node running for the chain you want to connect to. For example, a hardhat node or an anvil node.
74
- 8. Run the MODE service
75
-
76
- ```bash
77
- ./bin/mode -config config.mode.yaml
78
- ```
79
-
80
- or
81
-
82
- ```bash
83
- make run-mode
84
- ```
85
-
86
- 9. Optionally, install `grpcurl` to interact with the MODE service API from the command line. For example, on MacOS you can use `brew` to install `grpcurl`:
87
-
88
- ```bash
89
- brew install grpcurl
90
- ```
91
-
92
- 10. MODE exposes a `QueryLayer` gRPC server on port `50091` by default. You can use a gRPC client to interact with the service API. For example, to query for the current state of an indexed MUD world deployed at address `0xff738496c8cd898dC31b670D067162200C5c20A1` and on local chain with ID `31337`, you can use the `GetState` RPC endpoint:
93
-
94
- ```bash
95
- grpcurl -plaintext -d '{"chainTables": [], "worldTables": [], "namespace": {"chainId":"31337", "worldAddress": "0xff738496c8cd898dC31b670D067162200C5c20A1"}}' localhost:50091 mode.QueryLayer/GetState
96
- ```
97
-
98
- After the initial setup, to quickly re-build and run the MODE service, you can use
99
-
100
- ```bash
101
- make mode run-mode
102
- ```
103
-
104
- #### MODE and MUD
105
-
106
- Certain parts of MODE depend on MUD, specifically the `storecore` package of MODE which allows us to work with data coming from MUD and perfom encoding/decodings between MUD SchemaTypes, Go types, and Postgres types when the data is store in the DB. If modifications are made to MUD StoreCore, MODE `storecore.go` needs to be re-generated. To do this, perform these steps:
107
-
108
- 1. Get the latest MUD StoreCore abi and save it to a file, e.g. `storecore.json` or `storecore.abi`. It should look something like this
109
-
110
- ```json
111
- [
112
- {
113
- "anonymous": false,
114
- "inputs": [
115
- {
116
- "indexed": false,
117
- "internalType": "bytes32",
118
- "name": "tableId",
119
- "type": "bytes32"
120
- },
121
- {
122
- "indexed": false,
123
- "internalType": "bytes32[]",
124
- "name": "key",
125
- "type": "bytes32[]"
126
- }
127
- ],
128
- "name": "StoreDeleteRecord",
129
- "type": "event"
130
- },
131
- {
132
- "anonymous": false,
133
- "inputs": [
134
- {
135
- "indexed": false,
136
- "internalType": "bytes32",
137
- "name": "tableId",
138
- "type": "bytes32"
139
- },
140
- {
141
- "indexed": false,
142
- "internalType": "bytes32[]",
143
- "name": "key",
144
- "type": "bytes32[]"
145
- },
146
- {
147
- "indexed": false,
148
- "internalType": "uint8",
149
- "name": "schemaIndex",
150
- "type": "uint8"
151
- },
152
- {
153
- "indexed": false,
154
- "internalType": "bytes",
155
- "name": "data",
156
- "type": "bytes"
157
- }
158
- ],
159
- "name": "StoreSetField",
160
- "type": "event"
161
- },
162
- {
163
- "anonymous": false,
164
- "inputs": [
165
- {
166
- "indexed": false,
167
- "internalType": "bytes32",
168
- "name": "tableId",
169
- "type": "bytes32"
170
- },
171
- {
172
- "indexed": false,
173
- "internalType": "bytes32[]",
174
- "name": "key",
175
- "type": "bytes32[]"
176
- },
177
- {
178
- "indexed": false,
179
- "internalType": "bytes",
180
- "name": "data",
181
- "type": "bytes"
182
- }
183
- ],
184
- "name": "StoreSetRecord",
185
- "type": "event"
186
- }
187
- ]
188
- ```
189
-
190
- 2. Run the following command to generate the MODE `storecore.go` file:
191
-
192
- ```bash
193
- abigen --abi storecore.abi --pkg storecore --out storecore.go
194
- ```
195
-
196
- 3. Copy the generated `storecore.go` file to the MODE `storecore` package. Alternatively, run the command in the storecore package directory and the file will overwrite the existing one.
197
-
198
- ## V1 Services
199
-
200
- ### [📄 Docs](./README.v1.md)
201
-
202
- The following services are available for use with MUD V1. For more details on each service, see the linked docs page.
203
-
204
- | Service | Description | Proto / Spec | Default Port |
205
- | ------------ | :--------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------- | -----------: |
206
- | ecs-snapshot | Indexer reducing ECS events into a single "current" state for fast snapshot client syncs | [ecs-snapshot.proto](./proto/ecs-snapshot.proto) | 50061 |
207
- | ecs-stream | Multiplexer for subscriptions to receive current block data, ECS events per block, and transaction origination data | [ecs-stream.proto](./proto/ecs-stream.proto) | 50051 |
208
- | ecs-relay | Generic message relayer, supporting signed messages, service-side signature verification, relay conditions for DDoS prevention, and more | [ecs-relay.proto](./proto/ecs-relay.proto) | 50071 |
209
- | faucet | Faucet supporting custom drip amounts, global limits, twitter verification, and integrations with MUD components | [faucet.proto](./proto/faucet.proto) | 50081 |
210
-
211
- ### 🏃 Quickstart
212
-
213
- #### Running the ECS Snapshot, Stream, Relay, and Faucet services
214
-
215
- 1. Install Go
216
- 2. Build the source. This will build all the services
217
-
218
- ```bash
219
- make build
220
- ```
221
-
222
- or to build only specific services
223
-
224
- ```bash
225
- make ecs-snapshot ecs-stream ecs-relay faucet
226
- ```
227
-
228
- 3. If you're running with the default chain, make sure there is a local node running for the chain you want to connect to. For example, a hardhat node or an anvil node.
229
- 4. Run whichever binary via [`Makefile`](./Makefile). For example, to run the snapshot service
230
-
231
- ```bash
232
- make run-ecs-snapshot
233
- ```
234
-
235
- ## Protobuf
236
-
237
- MUD services use [Protocol Buffers](https://developers.google.com/protocol-buffers) to define the data structures and message schemas. The `.proto` files are available in the `/proto` directory at the root of this repo. For more details about `.proto` files and a language guide, see the [Language Guide (proto3)](https://developers.google.com/protocol-buffers/docs/proto3). The package has the protobuf files checked in, but in case you want to regenerate those (based on an updated `.proto` file for instance), run
238
-
239
- ```bash
240
- make protoc
241
- ```
1
+ # DEPRECATED
package/dist/faucet.js CHANGED
@@ -911,6 +911,12 @@ if (_m0.util.Long !== Long) {
911
911
  _m0.util.Long = Long;
912
912
  _m0.configure();
913
913
  }
914
+
915
+ // ts/faucet/createFaucetService.ts
916
+ import { createChannel, createClient } from "nice-grpc-web";
917
+ function createFaucetService(url) {
918
+ return createClient(FaucetServiceDefinition, createChannel(url));
919
+ }
914
920
  export {
915
921
  DripDevRequest,
916
922
  DripRequest,
@@ -930,6 +936,7 @@ export {
930
936
  SetLinkedTwitterRequest,
931
937
  SetLinkedTwitterResponse,
932
938
  TimeUntilDripResponse,
939
+ createFaucetService,
933
940
  protobufPackage
934
941
  };
935
942
  //# sourceMappingURL=faucet.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../protobuf/ts/faucet/faucet.ts"],"sourcesContent":["/* eslint-disable */\nimport Long from \"long\";\nimport type { CallContext, CallOptions } from \"nice-grpc-common\";\nimport _m0 from \"protobufjs/minimal.js\";\n\nexport const protobufPackage = \"faucet\";\n\nexport interface LinkedTwitterPair {\n username: string;\n address: string;\n}\n\nexport interface FaucetStore {\n addressToUsername: { [key: string]: string };\n usernameToAddress: { [key: string]: string };\n /** User id/name/address to timestamp of latest drip. */\n latestDrip: { [key: string]: number };\n /** Global drip counter. */\n totalDripCount: number;\n}\n\nexport interface FaucetStore_AddressToUsernameEntry {\n key: string;\n value: string;\n}\n\nexport interface FaucetStore_UsernameToAddressEntry {\n key: string;\n value: string;\n}\n\nexport interface FaucetStore_LatestDripEntry {\n key: string;\n value: number;\n}\n\n/** Request for drip. */\nexport interface DripRequest {\n username: string;\n address: string;\n}\n\n/** Request for drip to any address when running in dev mode. */\nexport interface DripDevRequest {\n address: string;\n}\n\n/** Response for drip request that contains the transaction hash of the drip tx and the ECS component set hash (if any). */\nexport interface DripResponse {\n dripTxHash: string;\n ecsTxHash: string;\n}\n\n/** Response for the time until next drip request. */\nexport interface TimeUntilDripResponse {\n timeUntilDripMinutes: number;\n timeUntilDripSeconds: number;\n}\n\nexport interface GetLinkedTwittersRequest {}\n\nexport interface GetLinkedTwittersResponse {\n linkedTwitters: LinkedTwitterPair[];\n}\n\nexport interface LinkedTwitterForAddressRequest {\n address: string;\n}\n\nexport interface LinkedTwitterForAddressResponse {\n username: string;\n}\n\nexport interface LinkedAddressForTwitterRequest {\n username: string;\n}\n\nexport interface LinkedAddressForTwitterResponse {\n address: string;\n}\n\nexport interface SetLinkedTwitterRequest {\n address: string;\n username: string;\n signature: string;\n}\n\nexport interface SetLinkedTwitterResponse {}\n\nfunction createBaseLinkedTwitterPair(): LinkedTwitterPair {\n return { username: \"\", address: \"\" };\n}\n\nexport const LinkedTwitterPair = {\n encode(message: LinkedTwitterPair, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.username !== \"\") {\n writer.uint32(10).string(message.username);\n }\n if (message.address !== \"\") {\n writer.uint32(18).string(message.address);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LinkedTwitterPair {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLinkedTwitterPair();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.username = reader.string();\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n message.address = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<LinkedTwitterPair>): LinkedTwitterPair {\n return LinkedTwitterPair.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<LinkedTwitterPair>): LinkedTwitterPair {\n const message = createBaseLinkedTwitterPair();\n message.username = object.username ?? \"\";\n message.address = object.address ?? \"\";\n return message;\n },\n};\n\nfunction createBaseFaucetStore(): FaucetStore {\n return { addressToUsername: {}, usernameToAddress: {}, latestDrip: {}, totalDripCount: 0 };\n}\n\nexport const FaucetStore = {\n encode(message: FaucetStore, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n Object.entries(message.addressToUsername).forEach(([key, value]) => {\n FaucetStore_AddressToUsernameEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).ldelim();\n });\n Object.entries(message.usernameToAddress).forEach(([key, value]) => {\n FaucetStore_UsernameToAddressEntry.encode({ key: key as any, value }, writer.uint32(18).fork()).ldelim();\n });\n Object.entries(message.latestDrip).forEach(([key, value]) => {\n FaucetStore_LatestDripEntry.encode({ key: key as any, value }, writer.uint32(26).fork()).ldelim();\n });\n if (message.totalDripCount !== 0) {\n writer.uint32(33).double(message.totalDripCount);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): FaucetStore {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFaucetStore();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n const entry1 = FaucetStore_AddressToUsernameEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.addressToUsername[entry1.key] = entry1.value;\n }\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n const entry2 = FaucetStore_UsernameToAddressEntry.decode(reader, reader.uint32());\n if (entry2.value !== undefined) {\n message.usernameToAddress[entry2.key] = entry2.value;\n }\n continue;\n case 3:\n if (tag != 26) {\n break;\n }\n\n const entry3 = FaucetStore_LatestDripEntry.decode(reader, reader.uint32());\n if (entry3.value !== undefined) {\n message.latestDrip[entry3.key] = entry3.value;\n }\n continue;\n case 4:\n if (tag != 33) {\n break;\n }\n\n message.totalDripCount = reader.double();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<FaucetStore>): FaucetStore {\n return FaucetStore.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<FaucetStore>): FaucetStore {\n const message = createBaseFaucetStore();\n message.addressToUsername = Object.entries(object.addressToUsername ?? {}).reduce<{ [key: string]: string }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = String(value);\n }\n return acc;\n },\n {}\n );\n message.usernameToAddress = Object.entries(object.usernameToAddress ?? {}).reduce<{ [key: string]: string }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = String(value);\n }\n return acc;\n },\n {}\n );\n message.latestDrip = Object.entries(object.latestDrip ?? {}).reduce<{ [key: string]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = Number(value);\n }\n return acc;\n },\n {}\n );\n message.totalDripCount = object.totalDripCount ?? 0;\n return message;\n },\n};\n\nfunction createBaseFaucetStore_AddressToUsernameEntry(): FaucetStore_AddressToUsernameEntry {\n return { key: \"\", value: \"\" };\n}\n\nexport const FaucetStore_AddressToUsernameEntry = {\n encode(message: FaucetStore_AddressToUsernameEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): FaucetStore_AddressToUsernameEntry {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFaucetStore_AddressToUsernameEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<FaucetStore_AddressToUsernameEntry>): FaucetStore_AddressToUsernameEntry {\n return FaucetStore_AddressToUsernameEntry.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<FaucetStore_AddressToUsernameEntry>): FaucetStore_AddressToUsernameEntry {\n const message = createBaseFaucetStore_AddressToUsernameEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseFaucetStore_UsernameToAddressEntry(): FaucetStore_UsernameToAddressEntry {\n return { key: \"\", value: \"\" };\n}\n\nexport const FaucetStore_UsernameToAddressEntry = {\n encode(message: FaucetStore_UsernameToAddressEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): FaucetStore_UsernameToAddressEntry {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFaucetStore_UsernameToAddressEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<FaucetStore_UsernameToAddressEntry>): FaucetStore_UsernameToAddressEntry {\n return FaucetStore_UsernameToAddressEntry.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<FaucetStore_UsernameToAddressEntry>): FaucetStore_UsernameToAddressEntry {\n const message = createBaseFaucetStore_UsernameToAddressEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseFaucetStore_LatestDripEntry(): FaucetStore_LatestDripEntry {\n return { key: \"\", value: 0 };\n}\n\nexport const FaucetStore_LatestDripEntry = {\n encode(message: FaucetStore_LatestDripEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(16).int64(message.value);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): FaucetStore_LatestDripEntry {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFaucetStore_LatestDripEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag != 16) {\n break;\n }\n\n message.value = longToNumber(reader.int64() as Long);\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<FaucetStore_LatestDripEntry>): FaucetStore_LatestDripEntry {\n return FaucetStore_LatestDripEntry.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<FaucetStore_LatestDripEntry>): FaucetStore_LatestDripEntry {\n const message = createBaseFaucetStore_LatestDripEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseDripRequest(): DripRequest {\n return { username: \"\", address: \"\" };\n}\n\nexport const DripRequest = {\n encode(message: DripRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.username !== \"\") {\n writer.uint32(10).string(message.username);\n }\n if (message.address !== \"\") {\n writer.uint32(18).string(message.address);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): DripRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDripRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.username = reader.string();\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n message.address = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<DripRequest>): DripRequest {\n return DripRequest.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<DripRequest>): DripRequest {\n const message = createBaseDripRequest();\n message.username = object.username ?? \"\";\n message.address = object.address ?? \"\";\n return message;\n },\n};\n\nfunction createBaseDripDevRequest(): DripDevRequest {\n return { address: \"\" };\n}\n\nexport const DripDevRequest = {\n encode(message: DripDevRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.address !== \"\") {\n writer.uint32(10).string(message.address);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): DripDevRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDripDevRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.address = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<DripDevRequest>): DripDevRequest {\n return DripDevRequest.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<DripDevRequest>): DripDevRequest {\n const message = createBaseDripDevRequest();\n message.address = object.address ?? \"\";\n return message;\n },\n};\n\nfunction createBaseDripResponse(): DripResponse {\n return { dripTxHash: \"\", ecsTxHash: \"\" };\n}\n\nexport const DripResponse = {\n encode(message: DripResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.dripTxHash !== \"\") {\n writer.uint32(10).string(message.dripTxHash);\n }\n if (message.ecsTxHash !== \"\") {\n writer.uint32(18).string(message.ecsTxHash);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): DripResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDripResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.dripTxHash = reader.string();\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n message.ecsTxHash = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<DripResponse>): DripResponse {\n return DripResponse.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<DripResponse>): DripResponse {\n const message = createBaseDripResponse();\n message.dripTxHash = object.dripTxHash ?? \"\";\n message.ecsTxHash = object.ecsTxHash ?? \"\";\n return message;\n },\n};\n\nfunction createBaseTimeUntilDripResponse(): TimeUntilDripResponse {\n return { timeUntilDripMinutes: 0, timeUntilDripSeconds: 0 };\n}\n\nexport const TimeUntilDripResponse = {\n encode(message: TimeUntilDripResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.timeUntilDripMinutes !== 0) {\n writer.uint32(9).double(message.timeUntilDripMinutes);\n }\n if (message.timeUntilDripSeconds !== 0) {\n writer.uint32(17).double(message.timeUntilDripSeconds);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): TimeUntilDripResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTimeUntilDripResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 9) {\n break;\n }\n\n message.timeUntilDripMinutes = reader.double();\n continue;\n case 2:\n if (tag != 17) {\n break;\n }\n\n message.timeUntilDripSeconds = reader.double();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<TimeUntilDripResponse>): TimeUntilDripResponse {\n return TimeUntilDripResponse.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<TimeUntilDripResponse>): TimeUntilDripResponse {\n const message = createBaseTimeUntilDripResponse();\n message.timeUntilDripMinutes = object.timeUntilDripMinutes ?? 0;\n message.timeUntilDripSeconds = object.timeUntilDripSeconds ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetLinkedTwittersRequest(): GetLinkedTwittersRequest {\n return {};\n}\n\nexport const GetLinkedTwittersRequest = {\n encode(_: GetLinkedTwittersRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): GetLinkedTwittersRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetLinkedTwittersRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<GetLinkedTwittersRequest>): GetLinkedTwittersRequest {\n return GetLinkedTwittersRequest.fromPartial(base ?? {});\n },\n\n fromPartial(_: DeepPartial<GetLinkedTwittersRequest>): GetLinkedTwittersRequest {\n const message = createBaseGetLinkedTwittersRequest();\n return message;\n },\n};\n\nfunction createBaseGetLinkedTwittersResponse(): GetLinkedTwittersResponse {\n return { linkedTwitters: [] };\n}\n\nexport const GetLinkedTwittersResponse = {\n encode(message: GetLinkedTwittersResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.linkedTwitters) {\n LinkedTwitterPair.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): GetLinkedTwittersResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetLinkedTwittersResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.linkedTwitters.push(LinkedTwitterPair.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<GetLinkedTwittersResponse>): GetLinkedTwittersResponse {\n return GetLinkedTwittersResponse.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<GetLinkedTwittersResponse>): GetLinkedTwittersResponse {\n const message = createBaseGetLinkedTwittersResponse();\n message.linkedTwitters = object.linkedTwitters?.map((e) => LinkedTwitterPair.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseLinkedTwitterForAddressRequest(): LinkedTwitterForAddressRequest {\n return { address: \"\" };\n}\n\nexport const LinkedTwitterForAddressRequest = {\n encode(message: LinkedTwitterForAddressRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.address !== \"\") {\n writer.uint32(10).string(message.address);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LinkedTwitterForAddressRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLinkedTwitterForAddressRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.address = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<LinkedTwitterForAddressRequest>): LinkedTwitterForAddressRequest {\n return LinkedTwitterForAddressRequest.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<LinkedTwitterForAddressRequest>): LinkedTwitterForAddressRequest {\n const message = createBaseLinkedTwitterForAddressRequest();\n message.address = object.address ?? \"\";\n return message;\n },\n};\n\nfunction createBaseLinkedTwitterForAddressResponse(): LinkedTwitterForAddressResponse {\n return { username: \"\" };\n}\n\nexport const LinkedTwitterForAddressResponse = {\n encode(message: LinkedTwitterForAddressResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.username !== \"\") {\n writer.uint32(10).string(message.username);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LinkedTwitterForAddressResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLinkedTwitterForAddressResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.username = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<LinkedTwitterForAddressResponse>): LinkedTwitterForAddressResponse {\n return LinkedTwitterForAddressResponse.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<LinkedTwitterForAddressResponse>): LinkedTwitterForAddressResponse {\n const message = createBaseLinkedTwitterForAddressResponse();\n message.username = object.username ?? \"\";\n return message;\n },\n};\n\nfunction createBaseLinkedAddressForTwitterRequest(): LinkedAddressForTwitterRequest {\n return { username: \"\" };\n}\n\nexport const LinkedAddressForTwitterRequest = {\n encode(message: LinkedAddressForTwitterRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.username !== \"\") {\n writer.uint32(10).string(message.username);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LinkedAddressForTwitterRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLinkedAddressForTwitterRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.username = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<LinkedAddressForTwitterRequest>): LinkedAddressForTwitterRequest {\n return LinkedAddressForTwitterRequest.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<LinkedAddressForTwitterRequest>): LinkedAddressForTwitterRequest {\n const message = createBaseLinkedAddressForTwitterRequest();\n message.username = object.username ?? \"\";\n return message;\n },\n};\n\nfunction createBaseLinkedAddressForTwitterResponse(): LinkedAddressForTwitterResponse {\n return { address: \"\" };\n}\n\nexport const LinkedAddressForTwitterResponse = {\n encode(message: LinkedAddressForTwitterResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.address !== \"\") {\n writer.uint32(10).string(message.address);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LinkedAddressForTwitterResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLinkedAddressForTwitterResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.address = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<LinkedAddressForTwitterResponse>): LinkedAddressForTwitterResponse {\n return LinkedAddressForTwitterResponse.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<LinkedAddressForTwitterResponse>): LinkedAddressForTwitterResponse {\n const message = createBaseLinkedAddressForTwitterResponse();\n message.address = object.address ?? \"\";\n return message;\n },\n};\n\nfunction createBaseSetLinkedTwitterRequest(): SetLinkedTwitterRequest {\n return { address: \"\", username: \"\", signature: \"\" };\n}\n\nexport const SetLinkedTwitterRequest = {\n encode(message: SetLinkedTwitterRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.address !== \"\") {\n writer.uint32(10).string(message.address);\n }\n if (message.username !== \"\") {\n writer.uint32(18).string(message.username);\n }\n if (message.signature !== \"\") {\n writer.uint32(26).string(message.signature);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SetLinkedTwitterRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetLinkedTwitterRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.address = reader.string();\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n message.username = reader.string();\n continue;\n case 3:\n if (tag != 26) {\n break;\n }\n\n message.signature = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<SetLinkedTwitterRequest>): SetLinkedTwitterRequest {\n return SetLinkedTwitterRequest.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<SetLinkedTwitterRequest>): SetLinkedTwitterRequest {\n const message = createBaseSetLinkedTwitterRequest();\n message.address = object.address ?? \"\";\n message.username = object.username ?? \"\";\n message.signature = object.signature ?? \"\";\n return message;\n },\n};\n\nfunction createBaseSetLinkedTwitterResponse(): SetLinkedTwitterResponse {\n return {};\n}\n\nexport const SetLinkedTwitterResponse = {\n encode(_: SetLinkedTwitterResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SetLinkedTwitterResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetLinkedTwitterResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<SetLinkedTwitterResponse>): SetLinkedTwitterResponse {\n return SetLinkedTwitterResponse.fromPartial(base ?? {});\n },\n\n fromPartial(_: DeepPartial<SetLinkedTwitterResponse>): SetLinkedTwitterResponse {\n const message = createBaseSetLinkedTwitterResponse();\n return message;\n },\n};\n\n/** The Faucet Service definition. */\nexport type FaucetServiceDefinition = typeof FaucetServiceDefinition;\nexport const FaucetServiceDefinition = {\n name: \"FaucetService\",\n fullName: \"faucet.FaucetService\",\n methods: {\n drip: {\n name: \"Drip\",\n requestType: DripRequest,\n requestStream: false,\n responseType: DripResponse,\n responseStream: false,\n options: {},\n },\n dripDev: {\n name: \"DripDev\",\n requestType: DripDevRequest,\n requestStream: false,\n responseType: DripResponse,\n responseStream: false,\n options: {},\n },\n dripVerifyTweet: {\n name: \"DripVerifyTweet\",\n requestType: DripRequest,\n requestStream: false,\n responseType: DripResponse,\n responseStream: false,\n options: {},\n },\n timeUntilDrip: {\n name: \"TimeUntilDrip\",\n requestType: DripRequest,\n requestStream: false,\n responseType: TimeUntilDripResponse,\n responseStream: false,\n options: {},\n },\n getLinkedTwitters: {\n name: \"GetLinkedTwitters\",\n requestType: GetLinkedTwittersRequest,\n requestStream: false,\n responseType: GetLinkedTwittersResponse,\n responseStream: false,\n options: {},\n },\n getLinkedTwitterForAddress: {\n name: \"GetLinkedTwitterForAddress\",\n requestType: LinkedTwitterForAddressRequest,\n requestStream: false,\n responseType: LinkedTwitterForAddressResponse,\n responseStream: false,\n options: {},\n },\n getLinkedAddressForTwitter: {\n name: \"GetLinkedAddressForTwitter\",\n requestType: LinkedAddressForTwitterRequest,\n requestStream: false,\n responseType: LinkedAddressForTwitterResponse,\n responseStream: false,\n options: {},\n },\n /** Admin utility endpoints for modifying state. Requires a signature with faucet private key. */\n setLinkedTwitter: {\n name: \"SetLinkedTwitter\",\n requestType: SetLinkedTwitterRequest,\n requestStream: false,\n responseType: SetLinkedTwitterResponse,\n responseStream: false,\n options: {},\n },\n },\n} as const;\n\nexport interface FaucetServiceImplementation<CallContextExt = {}> {\n drip(request: DripRequest, context: CallContext & CallContextExt): Promise<DeepPartial<DripResponse>>;\n dripDev(request: DripDevRequest, context: CallContext & CallContextExt): Promise<DeepPartial<DripResponse>>;\n dripVerifyTweet(request: DripRequest, context: CallContext & CallContextExt): Promise<DeepPartial<DripResponse>>;\n timeUntilDrip(\n request: DripRequest,\n context: CallContext & CallContextExt\n ): Promise<DeepPartial<TimeUntilDripResponse>>;\n getLinkedTwitters(\n request: GetLinkedTwittersRequest,\n context: CallContext & CallContextExt\n ): Promise<DeepPartial<GetLinkedTwittersResponse>>;\n getLinkedTwitterForAddress(\n request: LinkedTwitterForAddressRequest,\n context: CallContext & CallContextExt\n ): Promise<DeepPartial<LinkedTwitterForAddressResponse>>;\n getLinkedAddressForTwitter(\n request: LinkedAddressForTwitterRequest,\n context: CallContext & CallContextExt\n ): Promise<DeepPartial<LinkedAddressForTwitterResponse>>;\n /** Admin utility endpoints for modifying state. Requires a signature with faucet private key. */\n setLinkedTwitter(\n request: SetLinkedTwitterRequest,\n context: CallContext & CallContextExt\n ): Promise<DeepPartial<SetLinkedTwitterResponse>>;\n}\n\nexport interface FaucetServiceClient<CallOptionsExt = {}> {\n drip(request: DeepPartial<DripRequest>, options?: CallOptions & CallOptionsExt): Promise<DripResponse>;\n dripDev(request: DeepPartial<DripDevRequest>, options?: CallOptions & CallOptionsExt): Promise<DripResponse>;\n dripVerifyTweet(request: DeepPartial<DripRequest>, options?: CallOptions & CallOptionsExt): Promise<DripResponse>;\n timeUntilDrip(\n request: DeepPartial<DripRequest>,\n options?: CallOptions & CallOptionsExt\n ): Promise<TimeUntilDripResponse>;\n getLinkedTwitters(\n request: DeepPartial<GetLinkedTwittersRequest>,\n options?: CallOptions & CallOptionsExt\n ): Promise<GetLinkedTwittersResponse>;\n getLinkedTwitterForAddress(\n request: DeepPartial<LinkedTwitterForAddressRequest>,\n options?: CallOptions & CallOptionsExt\n ): Promise<LinkedTwitterForAddressResponse>;\n getLinkedAddressForTwitter(\n request: DeepPartial<LinkedAddressForTwitterRequest>,\n options?: CallOptions & CallOptionsExt\n ): Promise<LinkedAddressForTwitterResponse>;\n /** Admin utility endpoints for modifying state. Requires a signature with faucet private key. */\n setLinkedTwitter(\n request: DeepPartial<SetLinkedTwitterRequest>,\n options?: CallOptions & CallOptionsExt\n ): Promise<SetLinkedTwitterResponse>;\n}\n\ndeclare var self: any | undefined;\ndeclare var window: any | undefined;\ndeclare var global: any | undefined;\nvar tsProtoGlobalThis: any = (() => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw \"Unable to locate global object\";\n})();\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new tsProtoGlobalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n return long.toNumber();\n}\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../protobuf/ts/faucet/faucet.ts","../ts/faucet/createFaucetService.ts"],"sourcesContent":["/* eslint-disable */\nimport Long from \"long\";\nimport type { CallContext, CallOptions } from \"nice-grpc-common\";\nimport _m0 from \"protobufjs/minimal.js\";\n\nexport const protobufPackage = \"faucet\";\n\nexport interface LinkedTwitterPair {\n username: string;\n address: string;\n}\n\nexport interface FaucetStore {\n addressToUsername: { [key: string]: string };\n usernameToAddress: { [key: string]: string };\n /** User id/name/address to timestamp of latest drip. */\n latestDrip: { [key: string]: number };\n /** Global drip counter. */\n totalDripCount: number;\n}\n\nexport interface FaucetStore_AddressToUsernameEntry {\n key: string;\n value: string;\n}\n\nexport interface FaucetStore_UsernameToAddressEntry {\n key: string;\n value: string;\n}\n\nexport interface FaucetStore_LatestDripEntry {\n key: string;\n value: number;\n}\n\n/** Request for drip. */\nexport interface DripRequest {\n username: string;\n address: string;\n}\n\n/** Request for drip to any address when running in dev mode. */\nexport interface DripDevRequest {\n address: string;\n}\n\n/** Response for drip request that contains the transaction hash of the drip tx and the ECS component set hash (if any). */\nexport interface DripResponse {\n dripTxHash: string;\n ecsTxHash: string;\n}\n\n/** Response for the time until next drip request. */\nexport interface TimeUntilDripResponse {\n timeUntilDripMinutes: number;\n timeUntilDripSeconds: number;\n}\n\nexport interface GetLinkedTwittersRequest {}\n\nexport interface GetLinkedTwittersResponse {\n linkedTwitters: LinkedTwitterPair[];\n}\n\nexport interface LinkedTwitterForAddressRequest {\n address: string;\n}\n\nexport interface LinkedTwitterForAddressResponse {\n username: string;\n}\n\nexport interface LinkedAddressForTwitterRequest {\n username: string;\n}\n\nexport interface LinkedAddressForTwitterResponse {\n address: string;\n}\n\nexport interface SetLinkedTwitterRequest {\n address: string;\n username: string;\n signature: string;\n}\n\nexport interface SetLinkedTwitterResponse {}\n\nfunction createBaseLinkedTwitterPair(): LinkedTwitterPair {\n return { username: \"\", address: \"\" };\n}\n\nexport const LinkedTwitterPair = {\n encode(message: LinkedTwitterPair, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.username !== \"\") {\n writer.uint32(10).string(message.username);\n }\n if (message.address !== \"\") {\n writer.uint32(18).string(message.address);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LinkedTwitterPair {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLinkedTwitterPair();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.username = reader.string();\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n message.address = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<LinkedTwitterPair>): LinkedTwitterPair {\n return LinkedTwitterPair.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<LinkedTwitterPair>): LinkedTwitterPair {\n const message = createBaseLinkedTwitterPair();\n message.username = object.username ?? \"\";\n message.address = object.address ?? \"\";\n return message;\n },\n};\n\nfunction createBaseFaucetStore(): FaucetStore {\n return { addressToUsername: {}, usernameToAddress: {}, latestDrip: {}, totalDripCount: 0 };\n}\n\nexport const FaucetStore = {\n encode(message: FaucetStore, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n Object.entries(message.addressToUsername).forEach(([key, value]) => {\n FaucetStore_AddressToUsernameEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).ldelim();\n });\n Object.entries(message.usernameToAddress).forEach(([key, value]) => {\n FaucetStore_UsernameToAddressEntry.encode({ key: key as any, value }, writer.uint32(18).fork()).ldelim();\n });\n Object.entries(message.latestDrip).forEach(([key, value]) => {\n FaucetStore_LatestDripEntry.encode({ key: key as any, value }, writer.uint32(26).fork()).ldelim();\n });\n if (message.totalDripCount !== 0) {\n writer.uint32(33).double(message.totalDripCount);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): FaucetStore {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFaucetStore();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n const entry1 = FaucetStore_AddressToUsernameEntry.decode(reader, reader.uint32());\n if (entry1.value !== undefined) {\n message.addressToUsername[entry1.key] = entry1.value;\n }\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n const entry2 = FaucetStore_UsernameToAddressEntry.decode(reader, reader.uint32());\n if (entry2.value !== undefined) {\n message.usernameToAddress[entry2.key] = entry2.value;\n }\n continue;\n case 3:\n if (tag != 26) {\n break;\n }\n\n const entry3 = FaucetStore_LatestDripEntry.decode(reader, reader.uint32());\n if (entry3.value !== undefined) {\n message.latestDrip[entry3.key] = entry3.value;\n }\n continue;\n case 4:\n if (tag != 33) {\n break;\n }\n\n message.totalDripCount = reader.double();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<FaucetStore>): FaucetStore {\n return FaucetStore.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<FaucetStore>): FaucetStore {\n const message = createBaseFaucetStore();\n message.addressToUsername = Object.entries(object.addressToUsername ?? {}).reduce<{ [key: string]: string }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = String(value);\n }\n return acc;\n },\n {}\n );\n message.usernameToAddress = Object.entries(object.usernameToAddress ?? {}).reduce<{ [key: string]: string }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = String(value);\n }\n return acc;\n },\n {}\n );\n message.latestDrip = Object.entries(object.latestDrip ?? {}).reduce<{ [key: string]: number }>(\n (acc, [key, value]) => {\n if (value !== undefined) {\n acc[key] = Number(value);\n }\n return acc;\n },\n {}\n );\n message.totalDripCount = object.totalDripCount ?? 0;\n return message;\n },\n};\n\nfunction createBaseFaucetStore_AddressToUsernameEntry(): FaucetStore_AddressToUsernameEntry {\n return { key: \"\", value: \"\" };\n}\n\nexport const FaucetStore_AddressToUsernameEntry = {\n encode(message: FaucetStore_AddressToUsernameEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): FaucetStore_AddressToUsernameEntry {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFaucetStore_AddressToUsernameEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<FaucetStore_AddressToUsernameEntry>): FaucetStore_AddressToUsernameEntry {\n return FaucetStore_AddressToUsernameEntry.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<FaucetStore_AddressToUsernameEntry>): FaucetStore_AddressToUsernameEntry {\n const message = createBaseFaucetStore_AddressToUsernameEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseFaucetStore_UsernameToAddressEntry(): FaucetStore_UsernameToAddressEntry {\n return { key: \"\", value: \"\" };\n}\n\nexport const FaucetStore_UsernameToAddressEntry = {\n encode(message: FaucetStore_UsernameToAddressEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): FaucetStore_UsernameToAddressEntry {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFaucetStore_UsernameToAddressEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n message.value = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<FaucetStore_UsernameToAddressEntry>): FaucetStore_UsernameToAddressEntry {\n return FaucetStore_UsernameToAddressEntry.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<FaucetStore_UsernameToAddressEntry>): FaucetStore_UsernameToAddressEntry {\n const message = createBaseFaucetStore_UsernameToAddressEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseFaucetStore_LatestDripEntry(): FaucetStore_LatestDripEntry {\n return { key: \"\", value: 0 };\n}\n\nexport const FaucetStore_LatestDripEntry = {\n encode(message: FaucetStore_LatestDripEntry, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== 0) {\n writer.uint32(16).int64(message.value);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): FaucetStore_LatestDripEntry {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseFaucetStore_LatestDripEntry();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.key = reader.string();\n continue;\n case 2:\n if (tag != 16) {\n break;\n }\n\n message.value = longToNumber(reader.int64() as Long);\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<FaucetStore_LatestDripEntry>): FaucetStore_LatestDripEntry {\n return FaucetStore_LatestDripEntry.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<FaucetStore_LatestDripEntry>): FaucetStore_LatestDripEntry {\n const message = createBaseFaucetStore_LatestDripEntry();\n message.key = object.key ?? \"\";\n message.value = object.value ?? 0;\n return message;\n },\n};\n\nfunction createBaseDripRequest(): DripRequest {\n return { username: \"\", address: \"\" };\n}\n\nexport const DripRequest = {\n encode(message: DripRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.username !== \"\") {\n writer.uint32(10).string(message.username);\n }\n if (message.address !== \"\") {\n writer.uint32(18).string(message.address);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): DripRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDripRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.username = reader.string();\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n message.address = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<DripRequest>): DripRequest {\n return DripRequest.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<DripRequest>): DripRequest {\n const message = createBaseDripRequest();\n message.username = object.username ?? \"\";\n message.address = object.address ?? \"\";\n return message;\n },\n};\n\nfunction createBaseDripDevRequest(): DripDevRequest {\n return { address: \"\" };\n}\n\nexport const DripDevRequest = {\n encode(message: DripDevRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.address !== \"\") {\n writer.uint32(10).string(message.address);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): DripDevRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDripDevRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.address = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<DripDevRequest>): DripDevRequest {\n return DripDevRequest.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<DripDevRequest>): DripDevRequest {\n const message = createBaseDripDevRequest();\n message.address = object.address ?? \"\";\n return message;\n },\n};\n\nfunction createBaseDripResponse(): DripResponse {\n return { dripTxHash: \"\", ecsTxHash: \"\" };\n}\n\nexport const DripResponse = {\n encode(message: DripResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.dripTxHash !== \"\") {\n writer.uint32(10).string(message.dripTxHash);\n }\n if (message.ecsTxHash !== \"\") {\n writer.uint32(18).string(message.ecsTxHash);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): DripResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseDripResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.dripTxHash = reader.string();\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n message.ecsTxHash = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<DripResponse>): DripResponse {\n return DripResponse.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<DripResponse>): DripResponse {\n const message = createBaseDripResponse();\n message.dripTxHash = object.dripTxHash ?? \"\";\n message.ecsTxHash = object.ecsTxHash ?? \"\";\n return message;\n },\n};\n\nfunction createBaseTimeUntilDripResponse(): TimeUntilDripResponse {\n return { timeUntilDripMinutes: 0, timeUntilDripSeconds: 0 };\n}\n\nexport const TimeUntilDripResponse = {\n encode(message: TimeUntilDripResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.timeUntilDripMinutes !== 0) {\n writer.uint32(9).double(message.timeUntilDripMinutes);\n }\n if (message.timeUntilDripSeconds !== 0) {\n writer.uint32(17).double(message.timeUntilDripSeconds);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): TimeUntilDripResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseTimeUntilDripResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 9) {\n break;\n }\n\n message.timeUntilDripMinutes = reader.double();\n continue;\n case 2:\n if (tag != 17) {\n break;\n }\n\n message.timeUntilDripSeconds = reader.double();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<TimeUntilDripResponse>): TimeUntilDripResponse {\n return TimeUntilDripResponse.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<TimeUntilDripResponse>): TimeUntilDripResponse {\n const message = createBaseTimeUntilDripResponse();\n message.timeUntilDripMinutes = object.timeUntilDripMinutes ?? 0;\n message.timeUntilDripSeconds = object.timeUntilDripSeconds ?? 0;\n return message;\n },\n};\n\nfunction createBaseGetLinkedTwittersRequest(): GetLinkedTwittersRequest {\n return {};\n}\n\nexport const GetLinkedTwittersRequest = {\n encode(_: GetLinkedTwittersRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): GetLinkedTwittersRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetLinkedTwittersRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<GetLinkedTwittersRequest>): GetLinkedTwittersRequest {\n return GetLinkedTwittersRequest.fromPartial(base ?? {});\n },\n\n fromPartial(_: DeepPartial<GetLinkedTwittersRequest>): GetLinkedTwittersRequest {\n const message = createBaseGetLinkedTwittersRequest();\n return message;\n },\n};\n\nfunction createBaseGetLinkedTwittersResponse(): GetLinkedTwittersResponse {\n return { linkedTwitters: [] };\n}\n\nexport const GetLinkedTwittersResponse = {\n encode(message: GetLinkedTwittersResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.linkedTwitters) {\n LinkedTwitterPair.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): GetLinkedTwittersResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseGetLinkedTwittersResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.linkedTwitters.push(LinkedTwitterPair.decode(reader, reader.uint32()));\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<GetLinkedTwittersResponse>): GetLinkedTwittersResponse {\n return GetLinkedTwittersResponse.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<GetLinkedTwittersResponse>): GetLinkedTwittersResponse {\n const message = createBaseGetLinkedTwittersResponse();\n message.linkedTwitters = object.linkedTwitters?.map((e) => LinkedTwitterPair.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseLinkedTwitterForAddressRequest(): LinkedTwitterForAddressRequest {\n return { address: \"\" };\n}\n\nexport const LinkedTwitterForAddressRequest = {\n encode(message: LinkedTwitterForAddressRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.address !== \"\") {\n writer.uint32(10).string(message.address);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LinkedTwitterForAddressRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLinkedTwitterForAddressRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.address = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<LinkedTwitterForAddressRequest>): LinkedTwitterForAddressRequest {\n return LinkedTwitterForAddressRequest.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<LinkedTwitterForAddressRequest>): LinkedTwitterForAddressRequest {\n const message = createBaseLinkedTwitterForAddressRequest();\n message.address = object.address ?? \"\";\n return message;\n },\n};\n\nfunction createBaseLinkedTwitterForAddressResponse(): LinkedTwitterForAddressResponse {\n return { username: \"\" };\n}\n\nexport const LinkedTwitterForAddressResponse = {\n encode(message: LinkedTwitterForAddressResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.username !== \"\") {\n writer.uint32(10).string(message.username);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LinkedTwitterForAddressResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLinkedTwitterForAddressResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.username = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<LinkedTwitterForAddressResponse>): LinkedTwitterForAddressResponse {\n return LinkedTwitterForAddressResponse.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<LinkedTwitterForAddressResponse>): LinkedTwitterForAddressResponse {\n const message = createBaseLinkedTwitterForAddressResponse();\n message.username = object.username ?? \"\";\n return message;\n },\n};\n\nfunction createBaseLinkedAddressForTwitterRequest(): LinkedAddressForTwitterRequest {\n return { username: \"\" };\n}\n\nexport const LinkedAddressForTwitterRequest = {\n encode(message: LinkedAddressForTwitterRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.username !== \"\") {\n writer.uint32(10).string(message.username);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LinkedAddressForTwitterRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLinkedAddressForTwitterRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.username = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<LinkedAddressForTwitterRequest>): LinkedAddressForTwitterRequest {\n return LinkedAddressForTwitterRequest.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<LinkedAddressForTwitterRequest>): LinkedAddressForTwitterRequest {\n const message = createBaseLinkedAddressForTwitterRequest();\n message.username = object.username ?? \"\";\n return message;\n },\n};\n\nfunction createBaseLinkedAddressForTwitterResponse(): LinkedAddressForTwitterResponse {\n return { address: \"\" };\n}\n\nexport const LinkedAddressForTwitterResponse = {\n encode(message: LinkedAddressForTwitterResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.address !== \"\") {\n writer.uint32(10).string(message.address);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LinkedAddressForTwitterResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLinkedAddressForTwitterResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.address = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<LinkedAddressForTwitterResponse>): LinkedAddressForTwitterResponse {\n return LinkedAddressForTwitterResponse.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<LinkedAddressForTwitterResponse>): LinkedAddressForTwitterResponse {\n const message = createBaseLinkedAddressForTwitterResponse();\n message.address = object.address ?? \"\";\n return message;\n },\n};\n\nfunction createBaseSetLinkedTwitterRequest(): SetLinkedTwitterRequest {\n return { address: \"\", username: \"\", signature: \"\" };\n}\n\nexport const SetLinkedTwitterRequest = {\n encode(message: SetLinkedTwitterRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.address !== \"\") {\n writer.uint32(10).string(message.address);\n }\n if (message.username !== \"\") {\n writer.uint32(18).string(message.username);\n }\n if (message.signature !== \"\") {\n writer.uint32(26).string(message.signature);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SetLinkedTwitterRequest {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetLinkedTwitterRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n if (tag != 10) {\n break;\n }\n\n message.address = reader.string();\n continue;\n case 2:\n if (tag != 18) {\n break;\n }\n\n message.username = reader.string();\n continue;\n case 3:\n if (tag != 26) {\n break;\n }\n\n message.signature = reader.string();\n continue;\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<SetLinkedTwitterRequest>): SetLinkedTwitterRequest {\n return SetLinkedTwitterRequest.fromPartial(base ?? {});\n },\n\n fromPartial(object: DeepPartial<SetLinkedTwitterRequest>): SetLinkedTwitterRequest {\n const message = createBaseSetLinkedTwitterRequest();\n message.address = object.address ?? \"\";\n message.username = object.username ?? \"\";\n message.signature = object.signature ?? \"\";\n return message;\n },\n};\n\nfunction createBaseSetLinkedTwitterResponse(): SetLinkedTwitterResponse {\n return {};\n}\n\nexport const SetLinkedTwitterResponse = {\n encode(_: SetLinkedTwitterResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): SetLinkedTwitterResponse {\n const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseSetLinkedTwitterResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n }\n if ((tag & 7) == 4 || tag == 0) {\n break;\n }\n reader.skipType(tag & 7);\n }\n return message;\n },\n\n create(base?: DeepPartial<SetLinkedTwitterResponse>): SetLinkedTwitterResponse {\n return SetLinkedTwitterResponse.fromPartial(base ?? {});\n },\n\n fromPartial(_: DeepPartial<SetLinkedTwitterResponse>): SetLinkedTwitterResponse {\n const message = createBaseSetLinkedTwitterResponse();\n return message;\n },\n};\n\n/** The Faucet Service definition. */\nexport type FaucetServiceDefinition = typeof FaucetServiceDefinition;\nexport const FaucetServiceDefinition = {\n name: \"FaucetService\",\n fullName: \"faucet.FaucetService\",\n methods: {\n drip: {\n name: \"Drip\",\n requestType: DripRequest,\n requestStream: false,\n responseType: DripResponse,\n responseStream: false,\n options: {},\n },\n dripDev: {\n name: \"DripDev\",\n requestType: DripDevRequest,\n requestStream: false,\n responseType: DripResponse,\n responseStream: false,\n options: {},\n },\n dripVerifyTweet: {\n name: \"DripVerifyTweet\",\n requestType: DripRequest,\n requestStream: false,\n responseType: DripResponse,\n responseStream: false,\n options: {},\n },\n timeUntilDrip: {\n name: \"TimeUntilDrip\",\n requestType: DripRequest,\n requestStream: false,\n responseType: TimeUntilDripResponse,\n responseStream: false,\n options: {},\n },\n getLinkedTwitters: {\n name: \"GetLinkedTwitters\",\n requestType: GetLinkedTwittersRequest,\n requestStream: false,\n responseType: GetLinkedTwittersResponse,\n responseStream: false,\n options: {},\n },\n getLinkedTwitterForAddress: {\n name: \"GetLinkedTwitterForAddress\",\n requestType: LinkedTwitterForAddressRequest,\n requestStream: false,\n responseType: LinkedTwitterForAddressResponse,\n responseStream: false,\n options: {},\n },\n getLinkedAddressForTwitter: {\n name: \"GetLinkedAddressForTwitter\",\n requestType: LinkedAddressForTwitterRequest,\n requestStream: false,\n responseType: LinkedAddressForTwitterResponse,\n responseStream: false,\n options: {},\n },\n /** Admin utility endpoints for modifying state. Requires a signature with faucet private key. */\n setLinkedTwitter: {\n name: \"SetLinkedTwitter\",\n requestType: SetLinkedTwitterRequest,\n requestStream: false,\n responseType: SetLinkedTwitterResponse,\n responseStream: false,\n options: {},\n },\n },\n} as const;\n\nexport interface FaucetServiceImplementation<CallContextExt = {}> {\n drip(request: DripRequest, context: CallContext & CallContextExt): Promise<DeepPartial<DripResponse>>;\n dripDev(request: DripDevRequest, context: CallContext & CallContextExt): Promise<DeepPartial<DripResponse>>;\n dripVerifyTweet(request: DripRequest, context: CallContext & CallContextExt): Promise<DeepPartial<DripResponse>>;\n timeUntilDrip(\n request: DripRequest,\n context: CallContext & CallContextExt\n ): Promise<DeepPartial<TimeUntilDripResponse>>;\n getLinkedTwitters(\n request: GetLinkedTwittersRequest,\n context: CallContext & CallContextExt\n ): Promise<DeepPartial<GetLinkedTwittersResponse>>;\n getLinkedTwitterForAddress(\n request: LinkedTwitterForAddressRequest,\n context: CallContext & CallContextExt\n ): Promise<DeepPartial<LinkedTwitterForAddressResponse>>;\n getLinkedAddressForTwitter(\n request: LinkedAddressForTwitterRequest,\n context: CallContext & CallContextExt\n ): Promise<DeepPartial<LinkedAddressForTwitterResponse>>;\n /** Admin utility endpoints for modifying state. Requires a signature with faucet private key. */\n setLinkedTwitter(\n request: SetLinkedTwitterRequest,\n context: CallContext & CallContextExt\n ): Promise<DeepPartial<SetLinkedTwitterResponse>>;\n}\n\nexport interface FaucetServiceClient<CallOptionsExt = {}> {\n drip(request: DeepPartial<DripRequest>, options?: CallOptions & CallOptionsExt): Promise<DripResponse>;\n dripDev(request: DeepPartial<DripDevRequest>, options?: CallOptions & CallOptionsExt): Promise<DripResponse>;\n dripVerifyTweet(request: DeepPartial<DripRequest>, options?: CallOptions & CallOptionsExt): Promise<DripResponse>;\n timeUntilDrip(\n request: DeepPartial<DripRequest>,\n options?: CallOptions & CallOptionsExt\n ): Promise<TimeUntilDripResponse>;\n getLinkedTwitters(\n request: DeepPartial<GetLinkedTwittersRequest>,\n options?: CallOptions & CallOptionsExt\n ): Promise<GetLinkedTwittersResponse>;\n getLinkedTwitterForAddress(\n request: DeepPartial<LinkedTwitterForAddressRequest>,\n options?: CallOptions & CallOptionsExt\n ): Promise<LinkedTwitterForAddressResponse>;\n getLinkedAddressForTwitter(\n request: DeepPartial<LinkedAddressForTwitterRequest>,\n options?: CallOptions & CallOptionsExt\n ): Promise<LinkedAddressForTwitterResponse>;\n /** Admin utility endpoints for modifying state. Requires a signature with faucet private key. */\n setLinkedTwitter(\n request: DeepPartial<SetLinkedTwitterRequest>,\n options?: CallOptions & CallOptionsExt\n ): Promise<SetLinkedTwitterResponse>;\n}\n\ndeclare var self: any | undefined;\ndeclare var window: any | undefined;\ndeclare var global: any | undefined;\nvar tsProtoGlobalThis: any = (() => {\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n if (typeof self !== \"undefined\") {\n return self;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n throw \"Unable to locate global object\";\n})();\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new tsProtoGlobalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n return long.toNumber();\n}\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n","import { FaucetServiceDefinition } from \"../../protobuf/ts/faucet/faucet\";\nimport { createChannel, createClient, RawClient } from \"nice-grpc-web\";\nimport { FromTsProtoServiceDefinition } from \"nice-grpc-web/lib/service-definitions/ts-proto\";\n\n/**\n * Create a FaucetServiceClient\n * @param url FaucetService URL\n * @returns FaucetServiceClient\n */\nexport function createFaucetService(\n url: string\n): RawClient<FromTsProtoServiceDefinition<typeof FaucetServiceDefinition>> {\n return createClient(FaucetServiceDefinition, createChannel(url));\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@latticexyz/services",
3
- "version": "2.0.0-next.0",
3
+ "version": "2.0.0-next.10",
4
4
  "description": "MUD services for enhanced interactions with on-chain ECS state",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,34 +10,19 @@
10
10
  "license": "MIT",
11
11
  "type": "module",
12
12
  "exports": {
13
- "./ecs-relay": "./dist/ecs-relay.js",
14
- "./ecs-snapshot": "./dist/ecs-snapshot.js",
15
- "./ecs-stream": "./dist/ecs-stream.js",
16
- "./faucet": "./dist/faucet.js",
17
- "./mode": "./dist/mode.js"
13
+ "./faucet": "./dist/faucet.js"
18
14
  },
19
15
  "typesVersions": {
20
16
  "*": {
21
- "ecs-relay": [
22
- "./protobuf/ts/ecs-relay/ecs-relay.ts"
23
- ],
24
- "ecs-snapshot": [
25
- "./protobuf/ts/ecs-snapshot/ecs-snapshot.ts"
26
- ],
27
- "ecs-stream": [
28
- "./protobuf/ts/ecs-stream/ecs-stream.ts"
29
- ],
30
17
  "faucet": [
31
- "./protobuf/ts/faucet/faucet.ts"
32
- ],
33
- "mode": [
34
- "./protobuf/ts/mode/mode.ts"
18
+ "./ts/faucet/index.ts"
35
19
  ]
36
20
  }
37
21
  },
38
22
  "dependencies": {
39
23
  "long": "^5.2.1",
40
24
  "nice-grpc-common": "^2.0.2",
25
+ "nice-grpc-web": "^2.0.1",
41
26
  "protobufjs": "^7.2.3"
42
27
  },
43
28
  "devDependencies": {
@@ -46,11 +31,10 @@
46
31
  },
47
32
  "gitHead": "914a1e0ae4a573d685841ca2ea921435057deb8f",
48
33
  "scripts": {
49
- "build": "pnpm run build:go && pnpm run build:protobuf && pnpm run build:js",
50
- "build:go": "make build",
34
+ "build": "pnpm run build:js",
51
35
  "build:js": "tsup",
52
- "build:protobuf": "make protoc-ts && prettier --write protobuf/ts/**/*.ts",
53
36
  "dev": "tsup --watch",
54
- "test": "tsc --noEmit && echo 'todo: add tests'"
37
+ "test": "echo 'no tests'",
38
+ "test:ci": "pnpm run test"
55
39
  }
56
40
  }
@@ -1,4 +1 @@
1
- export * as ECSSnapshot from "./ecs-snapshot/ecs-snapshot";
2
- export * as ECSStream from "./ecs-stream/ecs-stream";
3
- export * as ECSRelay from "./ecs-relay/ecs-relay";
4
1
  export * as Faucet from "./faucet/faucet";
@@ -0,0 +1,14 @@
1
+ import { FaucetServiceDefinition } from "../../protobuf/ts/faucet/faucet";
2
+ import { createChannel, createClient, RawClient } from "nice-grpc-web";
3
+ import { FromTsProtoServiceDefinition } from "nice-grpc-web/lib/service-definitions/ts-proto";
4
+
5
+ /**
6
+ * Create a FaucetServiceClient
7
+ * @param url FaucetService URL
8
+ * @returns FaucetServiceClient
9
+ */
10
+ export function createFaucetService(
11
+ url: string
12
+ ): RawClient<FromTsProtoServiceDefinition<typeof FaucetServiceDefinition>> {
13
+ return createClient(FaucetServiceDefinition, createChannel(url));
14
+ }
@@ -0,0 +1,2 @@
1
+ export * from "../../protobuf/ts/faucet/faucet";
2
+ export { createFaucetService } from "./createFaucetService";