@latticexyz/services 2.0.0-snapshot-test-32d38619 → 2.0.0
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 +1 -241
- package/dist/faucet.d.ts +369 -0
- package/dist/faucet.js.map +1 -1
- package/package.json +5 -25
- package/protobuf/ts/faucet/faucet.ts +19 -19
- package/protobuf/ts/index.ts +0 -3
- package/ts/faucet/createFaucetService.ts +1 -1
- package/README.v1.md +0 -119
- package/bin/faucet +0 -0
- package/bin/mode +0 -0
- package/dist/ecs-relay.js +0 -683
- package/dist/ecs-relay.js.map +0 -1
- package/dist/ecs-snapshot.js +0 -810
- package/dist/ecs-snapshot.js.map +0 -1
- package/dist/ecs-stream.js +0 -391
- package/dist/ecs-stream.js.map +0 -1
- package/dist/mode.js +0 -1481
- package/dist/mode.js.map +0 -1
- package/protobuf/go/ecs-relay/ecs-relay.pb.go +0 -971
- package/protobuf/go/ecs-relay/ecs-relay_grpc.pb.go +0 -545
- package/protobuf/go/ecs-snapshot/ecs-snapshot.pb.go +0 -1124
- package/protobuf/go/ecs-snapshot/ecs-snapshot_grpc.pb.go +0 -502
- package/protobuf/go/ecs-stream/ecs-stream.pb.go +0 -525
- package/protobuf/go/ecs-stream/ecs-stream_grpc.pb.go +0 -138
- package/protobuf/go/faucet/faucet.pb.go +0 -1133
- package/protobuf/go/faucet/faucet_grpc.pb.go +0 -370
- package/protobuf/go/mode/mode.pb.go +0 -1772
- package/protobuf/go/mode/mode_grpc.pb.go +0 -283
- package/protobuf/ts/ecs-relay/ecs-relay.ts +0 -889
- package/protobuf/ts/ecs-snapshot/ecs-snapshot.ts +0 -1078
- package/protobuf/ts/ecs-stream/ecs-stream.ts +0 -508
- package/protobuf/ts/mode/google/protobuf/any.ts +0 -191
- package/protobuf/ts/mode/mode.ts +0 -1875
package/dist/faucet.js.map
CHANGED
@@ -1 +1 @@
|
|
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":[]}
|
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":";AACA,OAAO,UAAU;AAEjB,OAAO,SAAS;AAET,IAAM,kBAAkB;AAoF/B,SAAS,8BAAiD;AACxD,SAAO,EAAE,UAAU,IAAI,SAAS,GAAG;AACrC;AAEO,IAAM,oBAAoB;AAAA,EAC/B,OAAO,SAA4B,SAAqB,IAAI,OAAO,OAAO,GAAe;AACvF,QAAI,QAAQ,aAAa,IAAI;AAC3B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,QAAQ;AAAA,IAC3C;AACA,QAAI,QAAQ,YAAY,IAAI;AAC1B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,OAAO;AAAA,IAC1C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAAoC;AACzE,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,4BAA4B;AAC5C,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,WAAW,OAAO,OAAO;AACjC;AAAA,QACF,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,UAAU,OAAO,OAAO;AAChC;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAA0D;AAC/D,WAAO,kBAAkB,YAAY,QAAQ,CAAC,CAAC;AAAA,EACjD;AAAA,EAEA,YAAY,QAA2D;AACrE,UAAM,UAAU,4BAA4B;AAC5C,YAAQ,WAAW,OAAO,YAAY;AACtC,YAAQ,UAAU,OAAO,WAAW;AACpC,WAAO;AAAA,EACT;AACF;AAEA,SAAS,wBAAqC;AAC5C,SAAO,EAAE,mBAAmB,CAAC,GAAG,mBAAmB,CAAC,GAAG,YAAY,CAAC,GAAG,gBAAgB,EAAE;AAC3F;AAEO,IAAM,cAAc;AAAA,EACzB,OAAO,SAAsB,SAAqB,IAAI,OAAO,OAAO,GAAe;AACjF,WAAO,QAAQ,QAAQ,iBAAiB,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAClE,yCAAmC,OAAO,EAAE,KAAiB,MAAM,GAAG,OAAO,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO;AAAA,IACzG,CAAC;AACD,WAAO,QAAQ,QAAQ,iBAAiB,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAClE,yCAAmC,OAAO,EAAE,KAAiB,MAAM,GAAG,OAAO,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO;AAAA,IACzG,CAAC;AACD,WAAO,QAAQ,QAAQ,UAAU,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC3D,kCAA4B,OAAO,EAAE,KAAiB,MAAM,GAAG,OAAO,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO;AAAA,IAClG,CAAC;AACD,QAAI,QAAQ,mBAAmB,GAAG;AAChC,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,cAAc;AAAA,IACjD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAA8B;AACnE,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,sBAAsB;AACtC,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,gBAAM,SAAS,mCAAmC,OAAO,QAAQ,OAAO,OAAO,CAAC;AAChF,cAAI,OAAO,UAAU,QAAW;AAC9B,oBAAQ,kBAAkB,OAAO,GAAG,IAAI,OAAO;AAAA,UACjD;AACA;AAAA,QACF,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,gBAAM,SAAS,mCAAmC,OAAO,QAAQ,OAAO,OAAO,CAAC;AAChF,cAAI,OAAO,UAAU,QAAW;AAC9B,oBAAQ,kBAAkB,OAAO,GAAG,IAAI,OAAO;AAAA,UACjD;AACA;AAAA,QACF,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,gBAAM,SAAS,4BAA4B,OAAO,QAAQ,OAAO,OAAO,CAAC;AACzE,cAAI,OAAO,UAAU,QAAW;AAC9B,oBAAQ,WAAW,OAAO,GAAG,IAAI,OAAO;AAAA,UAC1C;AACA;AAAA,QACF,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,iBAAiB,OAAO,OAAO;AACvC;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAA8C;AACnD,WAAO,YAAY,YAAY,QAAQ,CAAC,CAAC;AAAA,EAC3C;AAAA,EAEA,YAAY,QAA+C;AACzD,UAAM,UAAU,sBAAsB;AACtC,YAAQ,oBAAoB,OAAO,QAAQ,OAAO,qBAAqB,CAAC,CAAC,EAAE;AAAA,MACzE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACrB,YAAI,UAAU,QAAW;AACvB,cAAI,GAAG,IAAI,OAAO,KAAK;AAAA,QACzB;AACA,eAAO;AAAA,MACT;AAAA,MACA,CAAC;AAAA,IACH;AACA,YAAQ,oBAAoB,OAAO,QAAQ,OAAO,qBAAqB,CAAC,CAAC,EAAE;AAAA,MACzE,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACrB,YAAI,UAAU,QAAW;AACvB,cAAI,GAAG,IAAI,OAAO,KAAK;AAAA,QACzB;AACA,eAAO;AAAA,MACT;AAAA,MACA,CAAC;AAAA,IACH;AACA,YAAQ,aAAa,OAAO,QAAQ,OAAO,cAAc,CAAC,CAAC,EAAE;AAAA,MAC3D,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACrB,YAAI,UAAU,QAAW;AACvB,cAAI,GAAG,IAAI,OAAO,KAAK;AAAA,QACzB;AACA,eAAO;AAAA,MACT;AAAA,MACA,CAAC;AAAA,IACH;AACA,YAAQ,iBAAiB,OAAO,kBAAkB;AAClD,WAAO;AAAA,EACT;AACF;AAEA,SAAS,+CAAmF;AAC1F,SAAO,EAAE,KAAK,IAAI,OAAO,GAAG;AAC9B;AAEO,IAAM,qCAAqC;AAAA,EAChD,OAAO,SAA6C,SAAqB,IAAI,OAAO,OAAO,GAAe;AACxG,QAAI,QAAQ,QAAQ,IAAI;AACtB,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,GAAG;AAAA,IACtC;AACA,QAAI,QAAQ,UAAU,IAAI;AACxB,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,KAAK;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAAqD;AAC1F,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,6CAA6C;AAC7D,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,MAAM,OAAO,OAAO;AAC5B;AAAA,QACF,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,QAAQ,OAAO,OAAO;AAC9B;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAA4F;AACjG,WAAO,mCAAmC,YAAY,QAAQ,CAAC,CAAC;AAAA,EAClE;AAAA,EAEA,YAAY,QAA6F;AACvG,UAAM,UAAU,6CAA6C;AAC7D,YAAQ,MAAM,OAAO,OAAO;AAC5B,YAAQ,QAAQ,OAAO,SAAS;AAChC,WAAO;AAAA,EACT;AACF;AAEA,SAAS,+CAAmF;AAC1F,SAAO,EAAE,KAAK,IAAI,OAAO,GAAG;AAC9B;AAEO,IAAM,qCAAqC;AAAA,EAChD,OAAO,SAA6C,SAAqB,IAAI,OAAO,OAAO,GAAe;AACxG,QAAI,QAAQ,QAAQ,IAAI;AACtB,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,GAAG;AAAA,IACtC;AACA,QAAI,QAAQ,UAAU,IAAI;AACxB,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,KAAK;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAAqD;AAC1F,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,6CAA6C;AAC7D,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,MAAM,OAAO,OAAO;AAC5B;AAAA,QACF,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,QAAQ,OAAO,OAAO;AAC9B;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAA4F;AACjG,WAAO,mCAAmC,YAAY,QAAQ,CAAC,CAAC;AAAA,EAClE;AAAA,EAEA,YAAY,QAA6F;AACvG,UAAM,UAAU,6CAA6C;AAC7D,YAAQ,MAAM,OAAO,OAAO;AAC5B,YAAQ,QAAQ,OAAO,SAAS;AAChC,WAAO;AAAA,EACT;AACF;AAEA,SAAS,wCAAqE;AAC5E,SAAO,EAAE,KAAK,IAAI,OAAO,EAAE;AAC7B;AAEO,IAAM,8BAA8B;AAAA,EACzC,OAAO,SAAsC,SAAqB,IAAI,OAAO,OAAO,GAAe;AACjG,QAAI,QAAQ,QAAQ,IAAI;AACtB,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,GAAG;AAAA,IACtC;AACA,QAAI,QAAQ,UAAU,GAAG;AACvB,aAAO,OAAO,EAAE,EAAE,MAAM,QAAQ,KAAK;AAAA,IACvC;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAA8C;AACnF,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,sCAAsC;AACtD,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,MAAM,OAAO,OAAO;AAC5B;AAAA,QACF,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,QAAQ,aAAa,OAAO,MAAM,CAAS;AACnD;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAA8E;AACnF,WAAO,4BAA4B,YAAY,QAAQ,CAAC,CAAC;AAAA,EAC3D;AAAA,EAEA,YAAY,QAA+E;AACzF,UAAM,UAAU,sCAAsC;AACtD,YAAQ,MAAM,OAAO,OAAO;AAC5B,YAAQ,QAAQ,OAAO,SAAS;AAChC,WAAO;AAAA,EACT;AACF;AAEA,SAAS,wBAAqC;AAC5C,SAAO,EAAE,UAAU,IAAI,SAAS,GAAG;AACrC;AAEO,IAAM,cAAc;AAAA,EACzB,OAAO,SAAsB,SAAqB,IAAI,OAAO,OAAO,GAAe;AACjF,QAAI,QAAQ,aAAa,IAAI;AAC3B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,QAAQ;AAAA,IAC3C;AACA,QAAI,QAAQ,YAAY,IAAI;AAC1B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,OAAO;AAAA,IAC1C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAA8B;AACnE,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,sBAAsB;AACtC,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,WAAW,OAAO,OAAO;AACjC;AAAA,QACF,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,UAAU,OAAO,OAAO;AAChC;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAA8C;AACnD,WAAO,YAAY,YAAY,QAAQ,CAAC,CAAC;AAAA,EAC3C;AAAA,EAEA,YAAY,QAA+C;AACzD,UAAM,UAAU,sBAAsB;AACtC,YAAQ,WAAW,OAAO,YAAY;AACtC,YAAQ,UAAU,OAAO,WAAW;AACpC,WAAO;AAAA,EACT;AACF;AAEA,SAAS,2BAA2C;AAClD,SAAO,EAAE,SAAS,GAAG;AACvB;AAEO,IAAM,iBAAiB;AAAA,EAC5B,OAAO,SAAyB,SAAqB,IAAI,OAAO,OAAO,GAAe;AACpF,QAAI,QAAQ,YAAY,IAAI;AAC1B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,OAAO;AAAA,IAC1C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAAiC;AACtE,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,yBAAyB;AACzC,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,UAAU,OAAO,OAAO;AAChC;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAoD;AACzD,WAAO,eAAe,YAAY,QAAQ,CAAC,CAAC;AAAA,EAC9C;AAAA,EAEA,YAAY,QAAqD;AAC/D,UAAM,UAAU,yBAAyB;AACzC,YAAQ,UAAU,OAAO,WAAW;AACpC,WAAO;AAAA,EACT;AACF;AAEA,SAAS,yBAAuC;AAC9C,SAAO,EAAE,YAAY,IAAI,WAAW,GAAG;AACzC;AAEO,IAAM,eAAe;AAAA,EAC1B,OAAO,SAAuB,SAAqB,IAAI,OAAO,OAAO,GAAe;AAClF,QAAI,QAAQ,eAAe,IAAI;AAC7B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,UAAU;AAAA,IAC7C;AACA,QAAI,QAAQ,cAAc,IAAI;AAC5B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,SAAS;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAA+B;AACpE,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,uBAAuB;AACvC,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,aAAa,OAAO,OAAO;AACnC;AAAA,QACF,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,YAAY,OAAO,OAAO;AAClC;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAgD;AACrD,WAAO,aAAa,YAAY,QAAQ,CAAC,CAAC;AAAA,EAC5C;AAAA,EAEA,YAAY,QAAiD;AAC3D,UAAM,UAAU,uBAAuB;AACvC,YAAQ,aAAa,OAAO,cAAc;AAC1C,YAAQ,YAAY,OAAO,aAAa;AACxC,WAAO;AAAA,EACT;AACF;AAEA,SAAS,kCAAyD;AAChE,SAAO,EAAE,sBAAsB,GAAG,sBAAsB,EAAE;AAC5D;AAEO,IAAM,wBAAwB;AAAA,EACnC,OAAO,SAAgC,SAAqB,IAAI,OAAO,OAAO,GAAe;AAC3F,QAAI,QAAQ,yBAAyB,GAAG;AACtC,aAAO,OAAO,CAAC,EAAE,OAAO,QAAQ,oBAAoB;AAAA,IACtD;AACA,QAAI,QAAQ,yBAAyB,GAAG;AACtC,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,oBAAoB;AAAA,IACvD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAAwC;AAC7E,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,gCAAgC;AAChD,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,GAAG;AACZ;AAAA,UACF;AAEA,kBAAQ,uBAAuB,OAAO,OAAO;AAC7C;AAAA,QACF,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,uBAAuB,OAAO,OAAO;AAC7C;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAkE;AACvE,WAAO,sBAAsB,YAAY,QAAQ,CAAC,CAAC;AAAA,EACrD;AAAA,EAEA,YAAY,QAAmE;AAC7E,UAAM,UAAU,gCAAgC;AAChD,YAAQ,uBAAuB,OAAO,wBAAwB;AAC9D,YAAQ,uBAAuB,OAAO,wBAAwB;AAC9D,WAAO;AAAA,EACT;AACF;AAEA,SAAS,qCAA+D;AACtE,SAAO,CAAC;AACV;AAEO,IAAM,2BAA2B;AAAA,EACtC,OAAO,GAA6B,SAAqB,IAAI,OAAO,OAAO,GAAe;AACxF,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAA2C;AAChF,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,mCAAmC;AACnD,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,MACnB;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAwE;AAC7E,WAAO,yBAAyB,YAAY,QAAQ,CAAC,CAAC;AAAA,EACxD;AAAA,EAEA,YAAY,GAAoE;AAC9E,UAAM,UAAU,mCAAmC;AACnD,WAAO;AAAA,EACT;AACF;AAEA,SAAS,sCAAiE;AACxE,SAAO,EAAE,gBAAgB,CAAC,EAAE;AAC9B;AAEO,IAAM,4BAA4B;AAAA,EACvC,OAAO,SAAoC,SAAqB,IAAI,OAAO,OAAO,GAAe;AAC/F,eAAW,KAAK,QAAQ,gBAAgB;AACtC,wBAAkB,OAAO,GAAI,OAAO,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO;AAAA,IAChE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAA4C;AACjF,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,oCAAoC;AACpD,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,eAAe,KAAK,kBAAkB,OAAO,QAAQ,OAAO,OAAO,CAAC,CAAC;AAC7E;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAA0E;AAC/E,WAAO,0BAA0B,YAAY,QAAQ,CAAC,CAAC;AAAA,EACzD;AAAA,EAEA,YAAY,QAA2E;AACrF,UAAM,UAAU,oCAAoC;AACpD,YAAQ,iBAAiB,OAAO,gBAAgB,IAAI,CAAC,MAAM,kBAAkB,YAAY,CAAC,CAAC,KAAK,CAAC;AACjG,WAAO;AAAA,EACT;AACF;AAEA,SAAS,2CAA2E;AAClF,SAAO,EAAE,SAAS,GAAG;AACvB;AAEO,IAAM,iCAAiC;AAAA,EAC5C,OAAO,SAAyC,SAAqB,IAAI,OAAO,OAAO,GAAe;AACpG,QAAI,QAAQ,YAAY,IAAI;AAC1B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,OAAO;AAAA,IAC1C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAAiD;AACtF,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,yCAAyC;AACzD,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,UAAU,OAAO,OAAO;AAChC;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAoF;AACzF,WAAO,+BAA+B,YAAY,QAAQ,CAAC,CAAC;AAAA,EAC9D;AAAA,EAEA,YAAY,QAAqF;AAC/F,UAAM,UAAU,yCAAyC;AACzD,YAAQ,UAAU,OAAO,WAAW;AACpC,WAAO;AAAA,EACT;AACF;AAEA,SAAS,4CAA6E;AACpF,SAAO,EAAE,UAAU,GAAG;AACxB;AAEO,IAAM,kCAAkC;AAAA,EAC7C,OAAO,SAA0C,SAAqB,IAAI,OAAO,OAAO,GAAe;AACrG,QAAI,QAAQ,aAAa,IAAI;AAC3B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,QAAQ;AAAA,IAC3C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAAkD;AACvF,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,0CAA0C;AAC1D,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,WAAW,OAAO,OAAO;AACjC;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAsF;AAC3F,WAAO,gCAAgC,YAAY,QAAQ,CAAC,CAAC;AAAA,EAC/D;AAAA,EAEA,YAAY,QAAuF;AACjG,UAAM,UAAU,0CAA0C;AAC1D,YAAQ,WAAW,OAAO,YAAY;AACtC,WAAO;AAAA,EACT;AACF;AAEA,SAAS,2CAA2E;AAClF,SAAO,EAAE,UAAU,GAAG;AACxB;AAEO,IAAM,iCAAiC;AAAA,EAC5C,OAAO,SAAyC,SAAqB,IAAI,OAAO,OAAO,GAAe;AACpG,QAAI,QAAQ,aAAa,IAAI;AAC3B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,QAAQ;AAAA,IAC3C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAAiD;AACtF,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,yCAAyC;AACzD,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,WAAW,OAAO,OAAO;AACjC;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAoF;AACzF,WAAO,+BAA+B,YAAY,QAAQ,CAAC,CAAC;AAAA,EAC9D;AAAA,EAEA,YAAY,QAAqF;AAC/F,UAAM,UAAU,yCAAyC;AACzD,YAAQ,WAAW,OAAO,YAAY;AACtC,WAAO;AAAA,EACT;AACF;AAEA,SAAS,4CAA6E;AACpF,SAAO,EAAE,SAAS,GAAG;AACvB;AAEO,IAAM,kCAAkC;AAAA,EAC7C,OAAO,SAA0C,SAAqB,IAAI,OAAO,OAAO,GAAe;AACrG,QAAI,QAAQ,YAAY,IAAI;AAC1B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,OAAO;AAAA,IAC1C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAAkD;AACvF,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,0CAA0C;AAC1D,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,UAAU,OAAO,OAAO;AAChC;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAsF;AAC3F,WAAO,gCAAgC,YAAY,QAAQ,CAAC,CAAC;AAAA,EAC/D;AAAA,EAEA,YAAY,QAAuF;AACjG,UAAM,UAAU,0CAA0C;AAC1D,YAAQ,UAAU,OAAO,WAAW;AACpC,WAAO;AAAA,EACT;AACF;AAEA,SAAS,oCAA6D;AACpE,SAAO,EAAE,SAAS,IAAI,UAAU,IAAI,WAAW,GAAG;AACpD;AAEO,IAAM,0BAA0B;AAAA,EACrC,OAAO,SAAkC,SAAqB,IAAI,OAAO,OAAO,GAAe;AAC7F,QAAI,QAAQ,YAAY,IAAI;AAC1B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,OAAO;AAAA,IAC1C;AACA,QAAI,QAAQ,aAAa,IAAI;AAC3B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,QAAQ;AAAA,IAC3C;AACA,QAAI,QAAQ,cAAc,IAAI;AAC5B,aAAO,OAAO,EAAE,EAAE,OAAO,QAAQ,SAAS;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAA0C;AAC/E,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,kCAAkC;AAClD,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,QACjB,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,UAAU,OAAO,OAAO;AAChC;AAAA,QACF,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,WAAW,OAAO,OAAO;AACjC;AAAA,QACF,KAAK;AACH,cAAI,OAAO,IAAI;AACb;AAAA,UACF;AAEA,kBAAQ,YAAY,OAAO,OAAO;AAClC;AAAA,MACJ;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAsE;AAC3E,WAAO,wBAAwB,YAAY,QAAQ,CAAC,CAAC;AAAA,EACvD;AAAA,EAEA,YAAY,QAAuE;AACjF,UAAM,UAAU,kCAAkC;AAClD,YAAQ,UAAU,OAAO,WAAW;AACpC,YAAQ,WAAW,OAAO,YAAY;AACtC,YAAQ,YAAY,OAAO,aAAa;AACxC,WAAO;AAAA,EACT;AACF;AAEA,SAAS,qCAA+D;AACtE,SAAO,CAAC;AACV;AAEO,IAAM,2BAA2B;AAAA,EACtC,OAAO,GAA6B,SAAqB,IAAI,OAAO,OAAO,GAAe;AACxF,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,OAAgC,QAA2C;AAChF,UAAM,SAAS,iBAAiB,IAAI,SAAS,QAAQ,IAAI,OAAO,OAAO,KAAK;AAC5E,QAAI,MAAM,WAAW,SAAY,OAAO,MAAM,OAAO,MAAM;AAC3D,UAAM,UAAU,mCAAmC;AACnD,WAAO,OAAO,MAAM,KAAK;AACvB,YAAM,MAAM,OAAO,OAAO;AAC1B,cAAQ,QAAQ,GAAG;AAAA,MACnB;AACA,WAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAC9B;AAAA,MACF;AACA,aAAO,SAAS,MAAM,CAAC;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAAwE;AAC7E,WAAO,yBAAyB,YAAY,QAAQ,CAAC,CAAC;AAAA,EACxD;AAAA,EAEA,YAAY,GAAoE;AAC9E,UAAM,UAAU,mCAAmC;AACnD,WAAO;AAAA,EACT;AACF;AAIO,IAAM,0BAA0B;AAAA,EACrC,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,IACP,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,eAAe;AAAA,MACf,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MACb,eAAe;AAAA,MACf,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,aAAa;AAAA,MACb,eAAe;AAAA,MACf,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,eAAe;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,eAAe;AAAA,MACf,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,mBAAmB;AAAA,MACjB,MAAM;AAAA,MACN,aAAa;AAAA,MACb,eAAe;AAAA,MACf,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,4BAA4B;AAAA,MAC1B,MAAM;AAAA,MACN,aAAa;AAAA,MACb,eAAe;AAAA,MACf,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,4BAA4B;AAAA,MAC1B,MAAM;AAAA,MACN,aAAa;AAAA,MACb,eAAe;AAAA,MACf,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,SAAS,CAAC;AAAA,IACZ;AAAA;AAAA,IAEA,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,aAAa;AAAA,MACb,eAAe;AAAA,MACf,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,SAAS,CAAC;AAAA,IACZ;AAAA,EACF;AACF;AA2DA,IAAI,qBAA0B,MAAM;AAClC,MAAI,OAAO,eAAe,aAAa;AACrC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,SAAS,aAAa;AAC/B,WAAO;AAAA,EACT;AACA,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO;AAAA,EACT;AACA,QAAM;AACR,GAAG;AAcH,SAAS,aAAa,MAAoB;AACxC,MAAI,KAAK,GAAG,OAAO,gBAAgB,GAAG;AACpC,UAAM,IAAI,kBAAkB,MAAM,8CAA8C;AAAA,EAClF;AACA,SAAO,KAAK,SAAS;AACvB;AAEA,IAAI,IAAI,KAAK,SAAS,MAAM;AAC1B,MAAI,KAAK,OAAO;AAChB,MAAI,UAAU;AAChB;;;AC9pCA,SAAS,eAAe,oBAA+B;AAQhD,SAAS,oBACd,KACyE;AACzE,SAAO,aAAa,yBAAyB,cAAc,GAAG,CAAC;AACjE;","names":[]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@latticexyz/services",
|
3
|
-
"version": "2.0.0
|
3
|
+
"version": "2.0.0",
|
4
4
|
"description": "MUD services for enhanced interactions with on-chain ECS state",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -10,28 +10,12 @@
|
|
10
10
|
"license": "MIT",
|
11
11
|
"type": "module",
|
12
12
|
"exports": {
|
13
|
-
"./
|
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
18
|
"./ts/faucet/index.ts"
|
32
|
-
],
|
33
|
-
"mode": [
|
34
|
-
"./protobuf/ts/mode/mode.ts"
|
35
19
|
]
|
36
20
|
}
|
37
21
|
},
|
@@ -45,15 +29,11 @@
|
|
45
29
|
"ts-proto": "^1.146.0",
|
46
30
|
"tsup": "^6.7.0"
|
47
31
|
},
|
48
|
-
"gitHead": "914a1e0ae4a573d685841ca2ea921435057deb8f",
|
49
32
|
"scripts": {
|
50
|
-
"build": "pnpm run build:
|
51
|
-
"build:go": "make build",
|
33
|
+
"build": "pnpm run build:js",
|
52
34
|
"build:js": "tsup",
|
53
|
-
"build:protobuf": "make protoc-ts && prettier --write protobuf/ts/**/*.ts",
|
54
35
|
"dev": "tsup --watch",
|
55
|
-
"test": "
|
56
|
-
"test:ci": "pnpm run test"
|
57
|
-
"test:go": "go test -v ./..."
|
36
|
+
"test": "echo 'no tests'",
|
37
|
+
"test:ci": "pnpm run test"
|
58
38
|
}
|
59
39
|
}
|
@@ -231,7 +231,7 @@ export const FaucetStore = {
|
|
231
231
|
}
|
232
232
|
return acc;
|
233
233
|
},
|
234
|
-
{}
|
234
|
+
{},
|
235
235
|
);
|
236
236
|
message.usernameToAddress = Object.entries(object.usernameToAddress ?? {}).reduce<{ [key: string]: string }>(
|
237
237
|
(acc, [key, value]) => {
|
@@ -240,7 +240,7 @@ export const FaucetStore = {
|
|
240
240
|
}
|
241
241
|
return acc;
|
242
242
|
},
|
243
|
-
{}
|
243
|
+
{},
|
244
244
|
);
|
245
245
|
message.latestDrip = Object.entries(object.latestDrip ?? {}).reduce<{ [key: string]: number }>(
|
246
246
|
(acc, [key, value]) => {
|
@@ -249,7 +249,7 @@ export const FaucetStore = {
|
|
249
249
|
}
|
250
250
|
return acc;
|
251
251
|
},
|
252
|
-
{}
|
252
|
+
{},
|
253
253
|
);
|
254
254
|
message.totalDripCount = object.totalDripCount ?? 0;
|
255
255
|
return message;
|
@@ -1092,24 +1092,24 @@ export interface FaucetServiceImplementation<CallContextExt = {}> {
|
|
1092
1092
|
dripVerifyTweet(request: DripRequest, context: CallContext & CallContextExt): Promise<DeepPartial<DripResponse>>;
|
1093
1093
|
timeUntilDrip(
|
1094
1094
|
request: DripRequest,
|
1095
|
-
context: CallContext & CallContextExt
|
1095
|
+
context: CallContext & CallContextExt,
|
1096
1096
|
): Promise<DeepPartial<TimeUntilDripResponse>>;
|
1097
1097
|
getLinkedTwitters(
|
1098
1098
|
request: GetLinkedTwittersRequest,
|
1099
|
-
context: CallContext & CallContextExt
|
1099
|
+
context: CallContext & CallContextExt,
|
1100
1100
|
): Promise<DeepPartial<GetLinkedTwittersResponse>>;
|
1101
1101
|
getLinkedTwitterForAddress(
|
1102
1102
|
request: LinkedTwitterForAddressRequest,
|
1103
|
-
context: CallContext & CallContextExt
|
1103
|
+
context: CallContext & CallContextExt,
|
1104
1104
|
): Promise<DeepPartial<LinkedTwitterForAddressResponse>>;
|
1105
1105
|
getLinkedAddressForTwitter(
|
1106
1106
|
request: LinkedAddressForTwitterRequest,
|
1107
|
-
context: CallContext & CallContextExt
|
1107
|
+
context: CallContext & CallContextExt,
|
1108
1108
|
): Promise<DeepPartial<LinkedAddressForTwitterResponse>>;
|
1109
1109
|
/** Admin utility endpoints for modifying state. Requires a signature with faucet private key. */
|
1110
1110
|
setLinkedTwitter(
|
1111
1111
|
request: SetLinkedTwitterRequest,
|
1112
|
-
context: CallContext & CallContextExt
|
1112
|
+
context: CallContext & CallContextExt,
|
1113
1113
|
): Promise<DeepPartial<SetLinkedTwitterResponse>>;
|
1114
1114
|
}
|
1115
1115
|
|
@@ -1119,24 +1119,24 @@ export interface FaucetServiceClient<CallOptionsExt = {}> {
|
|
1119
1119
|
dripVerifyTweet(request: DeepPartial<DripRequest>, options?: CallOptions & CallOptionsExt): Promise<DripResponse>;
|
1120
1120
|
timeUntilDrip(
|
1121
1121
|
request: DeepPartial<DripRequest>,
|
1122
|
-
options?: CallOptions & CallOptionsExt
|
1122
|
+
options?: CallOptions & CallOptionsExt,
|
1123
1123
|
): Promise<TimeUntilDripResponse>;
|
1124
1124
|
getLinkedTwitters(
|
1125
1125
|
request: DeepPartial<GetLinkedTwittersRequest>,
|
1126
|
-
options?: CallOptions & CallOptionsExt
|
1126
|
+
options?: CallOptions & CallOptionsExt,
|
1127
1127
|
): Promise<GetLinkedTwittersResponse>;
|
1128
1128
|
getLinkedTwitterForAddress(
|
1129
1129
|
request: DeepPartial<LinkedTwitterForAddressRequest>,
|
1130
|
-
options?: CallOptions & CallOptionsExt
|
1130
|
+
options?: CallOptions & CallOptionsExt,
|
1131
1131
|
): Promise<LinkedTwitterForAddressResponse>;
|
1132
1132
|
getLinkedAddressForTwitter(
|
1133
1133
|
request: DeepPartial<LinkedAddressForTwitterRequest>,
|
1134
|
-
options?: CallOptions & CallOptionsExt
|
1134
|
+
options?: CallOptions & CallOptionsExt,
|
1135
1135
|
): Promise<LinkedAddressForTwitterResponse>;
|
1136
1136
|
/** Admin utility endpoints for modifying state. Requires a signature with faucet private key. */
|
1137
1137
|
setLinkedTwitter(
|
1138
1138
|
request: DeepPartial<SetLinkedTwitterRequest>,
|
1139
|
-
options?: CallOptions & CallOptionsExt
|
1139
|
+
options?: CallOptions & CallOptionsExt,
|
1140
1140
|
): Promise<SetLinkedTwitterResponse>;
|
1141
1141
|
}
|
1142
1142
|
|
@@ -1164,12 +1164,12 @@ type Builtin = Date | Function | Uint8Array | string | number | boolean | undefi
|
|
1164
1164
|
export type DeepPartial<T> = T extends Builtin
|
1165
1165
|
? T
|
1166
1166
|
: T extends Array<infer U>
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
-
|
1167
|
+
? Array<DeepPartial<U>>
|
1168
|
+
: T extends ReadonlyArray<infer U>
|
1169
|
+
? ReadonlyArray<DeepPartial<U>>
|
1170
|
+
: T extends {}
|
1171
|
+
? { [K in keyof T]?: DeepPartial<T[K]> }
|
1172
|
+
: Partial<T>;
|
1173
1173
|
|
1174
1174
|
function longToNumber(long: Long): number {
|
1175
1175
|
if (long.gt(Number.MAX_SAFE_INTEGER)) {
|
package/protobuf/ts/index.ts
CHANGED
@@ -8,7 +8,7 @@ import { FromTsProtoServiceDefinition } from "nice-grpc-web/lib/service-definiti
|
|
8
8
|
* @returns FaucetServiceClient
|
9
9
|
*/
|
10
10
|
export function createFaucetService(
|
11
|
-
url: string
|
11
|
+
url: string,
|
12
12
|
): RawClient<FromTsProtoServiceDefinition<typeof FaucetServiceDefinition>> {
|
13
13
|
return createClient(FaucetServiceDefinition, createChannel(url));
|
14
14
|
}
|
package/README.v1.md
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
## Technical Details
|
2
|
-
|
3
|
-
Every service is a Go stand-alone binary that can be run individually. Entry-points (`main.go` files) for each service can be found linked in each sub-section below.
|
4
|
-
|
5
|
-
#### General
|
6
|
-
|
7
|
-
Each service exposes a gRPC server and a wrapper HTPP server (for ability to make gRPC wrapped requests from a web client, e.g. TypeScript MUD client). By default the gRPC server runs at the default `PORT` (specified above and in each `main.go` file) and the HTTP server runs at that `PORT + 1`. For example, the snapshot service has a gRPC server exposed on `50061` and a wrapper server is automatically exposed on `50062`.
|
8
|
-
|
9
|
-
Each service has specific command-line arguments. Each service requires a connection to an Ethereum node (for same network where your MUD application is deployed on) via a websocket. By default, all websocket connection URL parameters use a `localhost` instance running at port `8545`, so the full URL is `ws://localhost:8545`.
|
10
|
-
|
11
|
-
#### Dockerfile
|
12
|
-
|
13
|
-
There are Dockerfiles for each service available at the root of this repo -- `Dockerfile.{faucet|relay|snapshot|stream}`. Note that if you want to modify the Dockerfiles, one thing to make sure of is the exposed port to matching the port that each binary is configured to listen to by default.
|
14
|
-
|
15
|
-
Each service can be built and used within a Kubernetes cluster (via a resource that can pull the container image) by pushing the images to a container registry. For example, to build the snapshot server via the Dockerfile, we can build the image
|
16
|
-
|
17
|
-
```
|
18
|
-
docker build -f Dockerfile.snapshot . --tag ghcr.io/latticexyz/mud-ecs-snapshot:<YOUR_TAG>
|
19
|
-
```
|
20
|
-
|
21
|
-
and then push to the container registry
|
22
|
-
|
23
|
-
```
|
24
|
-
docker push ghcr.io/latticexyz/mud-ecs-snapshot:<YOUR_TAG>
|
25
|
-
```
|
26
|
-
|
27
|
-
#### Protobuf
|
28
|
-
|
29
|
-
We use [Protocol Buffers](https://developers.google.com/protocol-buffers) to define the data structures and message schemas for each service. The `.proto` files are available in the `/proto` directory at the root of this repo -- `/proto/{ecs-relay|ecs-snapshot|ecs-stream|faucet}.proto`. For more details about `.proto` files and a language guide, see the [Language Guide (proto3)](https://developers.google.com/protocol-buffers/docs/proto3).
|
30
|
-
|
31
|
-
#### gRPC
|
32
|
-
|
33
|
-
We use [gRPC](https://grpc.io/docs/what-is-grpc/introduction/) along with protobuf for the complete Interface Definition Language (IDL) and message format. The `.proto` files in the `/proto` files directory contain the service definitions for each MUD service.
|
34
|
-
|
35
|
-
The benefit of using gRPC + protobuf is the abilitiy to generate both Golang and TypeScript stubs from the service + message definitions in `.proto` files. This way, we define what the service does and what kind of messages it can receive/send only once. We then generated the stubs for whatever language we want to use with the respective client-side or service-side codebase and we do so using the [protocol](https://grpc.io/docs/protoc-installation/) protocol buffer compiler. The generated stubs are placed in the `/protobuf` directory at the root of this repo, and are separated by subdirectories according to the language of the generated stubs. You may expect a directory structure like this
|
36
|
-
|
37
|
-
```
|
38
|
-
/protobuf
|
39
|
-
/go
|
40
|
-
/ecs-relay
|
41
|
-
/ecs-snapshot
|
42
|
-
/ecs-stream
|
43
|
-
/faucet
|
44
|
-
/ts
|
45
|
-
/ecs-relay
|
46
|
-
/ecs-snapshot
|
47
|
-
/ecs-stream
|
48
|
-
/faucet
|
49
|
-
```
|
50
|
-
|
51
|
-
If you would like to make edits to the service/message definitions in the protobuf files, it's as easy as editing the relevant `.proto` files and re-running the `protoc` command (more on this in "Getting Started"), which will re-generate the stubs for the languages that have been configured (Golang and TypeScript). If you'd like to add more languages, take a look at the linked resources on gRPC + protobufs and make edits to the [`Makefile`](./Makefile).
|
52
|
-
|
53
|
-
#### gRPC-web
|
54
|
-
|
55
|
-
As mentioned earlier, there is an HTTP server that gets run along the gRPC server in order to receive requests from gRPC-web (which are just POST routes). To do this we wrap the gRPC server in a HTTP listener server behind a "proxy". The services use a wrapper Go library to wrap the gRPC server and expose the HTTP server which will listen for gRPC-web requests and do the proxying.
|
56
|
-
|
57
|
-
#### grpcurl
|
58
|
-
|
59
|
-
For quick testing or experimentation with the services, we recommend using [grpcurl](https://github.com/fullstorydev/grpcurl). For example, once you build and run the snapshot service locally you can test the endpoint which returns the latest known and computed state to the service like this
|
60
|
-
|
61
|
-
```
|
62
|
-
grpcurl -plaintext -d '{"worldAddress": "<WORLD_ADDRESS>"}' localhost:50061 ecssnapshot.ECSStateSnapshotService/GetStateLatest
|
63
|
-
```
|
64
|
-
|
65
|
-
Note that the port is the gRPC server port and not the HTTP server port, since we are sending a raw gRPC request directly.
|
66
|
-
|
67
|
-
### [`ecs-snapshot`](./cmd/ecs-snapshot/main.go)
|
68
|
-
|
69
|
-
This service's function is to compute and save the ECS state from the chain via "snapshots", such that a client can perform an initial sync to the ECS world state without having to process all ECS state changes (in the form of events).
|
70
|
-
|
71
|
-
Because every update in MUD ECS is driven by events emitted on the world and triggered by individual component updates, to "catch up" to the "present time", any client needs to process and reduce the events that have been emitted on-chain. While possible to do and reasonable for applications with sparse component updates, once enough time passes (can reason about this as the chain getting "older"), it becomes infeasible and very redundant for every client to perform such a sync by manually reducing events. For example, two clients (even two browser windows on a single machine) would have to perform the same event processing steps in-browser to join a running instance of a deployed on-chain MUD application. Hence, we motivate the job of a snapshot service as a task to "catch" events as they are emitted, parse them out of every block, and reduce them into a state. In this way, the snapshot service effectively computes the "current" world state as it is updated on-chain. Put differently, it "indexes" the events into the state so that clients don't have to, hence the interchangeable use of "indexer" to call the snapshot service.
|
72
|
-
|
73
|
-
The interaction from a client perspective now becomes simpler. If a client needs to sync (as it has to if a new user is attempting to interact with an instance of deployed MUD application), it simply makes a call to an API endpoint that the snapshot service exposes and receives the current state encoded according to a spec over the wire.
|
74
|
-
|
75
|
-
There are multiple endpoints defined in the protobuf file and implemented in the gRPC Go server. For example, you can request the state as a single object via `/GetStateLatest`, but for larger states, there is an endpoint that can chunk the snapshot object according to a variable percentage, `/GetStateLatestStream`. This allows the client to load the state in, for instance, chunks of 1% to reduce the bandwidth load. State growth means that snapshots might get large enough that even a streamed RPC is a bit too much for a web client to handle. For this, there are a number of "pruned" state endpoints that return the snapshot state but with some specific components and their data omitted. Note that these endpoints are experimental and can be tweaked according to specific use cases when dealing with large state growth.
|
76
|
-
|
77
|
-
### [`ecs-stream`](./cmd/ecs-stream/main.go)
|
78
|
-
|
79
|
-
This service's function is to serve as a multiplexer, subscribing to a feed of data from an EVM-based network and allowing multiple clients to selectively subscribe to subsets of the data that they care about.
|
80
|
-
|
81
|
-
When building with MUD, you're likely to want to know when new blocks are produced and what transactions are included in those blocks since transactions generate state changes that are expressed as ECS events and hence are of interest to the application. One naive way to implement an app's "update" functionality is to "poll" the network at certain time intervals to get up-to-date information. For instance, the client can make an RPC call to a chain such as `eth_getBlockByNumber`. This approach is limiting because it creates unnecessary overhead where clients must initiate requests instead of reacting to state change.
|
82
|
-
|
83
|
-
The stream service provides a flexible way to receive updates and is integrated with MUD to provide specific per-block data, such as all ECS events in that block. The stream service intakes block updates when connected to a network node and makes the data available for multiple consumers. This means that the service consumes data once but makes it available to as many clients as connected to the service. Additionally, the service has a flexible message subscription schema where clients can specify exactly what data they're interested in subscribing to. For example, if a client only cares about what block number it is, it's sufficient to subscribe to the block number only. Clients who also care about the timestamp or the block hash are free to request those when subscribing to the stream.
|
84
|
-
|
85
|
-
The stream service contains a single RPC method called `/SubscribeToStreamLatest` that the clients connect to. We also refer to connected clients on this endpoint as "opening a cursor", since clients, by default, are kept connected and receive updates from the service as a server-side stream until they explicitly disconnect or there's a connection error.
|
86
|
-
|
87
|
-
### [`ecs-relay`](./cmd/ecs-relay/main.go)
|
88
|
-
|
89
|
-
This service's function is to act as an arbitrary, configurable message relay for data that does not _have_ to go on chain but which an application built with MUD can plug in to utilize seamlessly. The relay service is configurable to support arbitrary messages, messages with signatures, signature verification, and conditions for message relay, such as "do not relay message if balance < threshold" for DDoS prevention.
|
90
|
-
|
91
|
-
The relay works by exposing a system of "topics" and subscriptions/unsubscriptions that clients can opt in and opt-out of depending on interests. On top of the topic system, the relay exposes an endpoint for clients to "push" messages with topics attached to them that are then relayed. Messages are relayed to clients who subscribe to the aforementioned topic, which is done via a different endpoint akin to opening a cursor and listening for relayed events.
|
92
|
-
|
93
|
-
The flow in detail may resemble something like this.
|
94
|
-
|
95
|
-
1. Client "authenticates" with the service by making RPC on `/Authenticate` endpoint. The client has to identify itself to the service by providing a signature, at which point the public key of the message signer is registered as an identity by the service (which does this by recovering the signer from the signature). If this RPC returns successfully, then the service has registered this client.
|
96
|
-
|
97
|
-
2. Client subscribes to any labels that it is interested in via the `/Subscribe` endpoint. For example, this can be a recurrent process where the client keeps subscribing / unsubscribing to chunks as the player moves around a map. We needed to "authenticate" first to associate these subscriptions with a given client. This way, the service knows who is sending what. So as part of the request, the "identity" is provided to this RPC by the client in the form of a signature. The service again recovers the signer and checks against known registrations.
|
98
|
-
|
99
|
-
3. At the same time as subscribing (in another thread, for instance, or something similar), a client opens a cursor to receive events via `/OpenCursor`, again providing a signature to identify itself. This will use any current subscriptions at a given time from step (2) and pipe any messages to a stream. There is a timeout feature designed to disconnect idle clients, so we also need to keep sending a `/Ping` RPC to keep this stream open.
|
100
|
-
|
101
|
-
4. At this point, steps (2) and (3) are active, `/Subscribe` & `/Unsubscribe` keep being called to update what the client wants to see via the opened cursor, and `/Ping`s are sent to keep the connection alive
|
102
|
-
|
103
|
-
5. Last but not least, in parallel with all of this, the client most likely needs to send a bunch of stuff to be relayed, so to do that, it uses the `/Push` or `/PushStream` RPC and sends messages with some given label that identifies a topic that others might subscribe to. These labeled "pushes" are then relayed to whoever is subscribed to the labels and has a `/OpenCursor` active, etc., etc., and so on.
|
104
|
-
|
105
|
-
The `main.go` entry point for the relay service contains several command line arguments that can be tweaked to enhance and restrict the message relay flows as desired.
|
106
|
-
|
107
|
-
### [`faucet`](./cmd/faucet/main.go)
|
108
|
-
|
109
|
-
This service's function is to act as a configurable faucet with in-service integrations for MUD transactions. A faucet, by definition, is a service that distributes a pre-set amount of currency on a network limited by a global limit and/or a time limit. For example, a faucet might be able to "drip" 0.01 ETH on a testnet, claimable by the same address no more than once per 12 hours, with a total daily limit of 100 ETH. This service allows you to run a faucet just like this and more.
|
110
|
-
|
111
|
-
#### Twitter Verification
|
112
|
-
|
113
|
-
The faucet additionally supports verification via Twitter, utilizing the Twitter API and digital signature verification. Note that this requires a Twitter API secret & key that should be obtained from the Twitter Developer portal. A Twitter verification allows you to run a faucet with an extra condition enforced on the ability of your users to claim a "drip". In addition to the time / amount limits, with Twitter verification, a user of your app will have to tweet a valid digital signature to serve as proof of ownership over the address that they are requesting the drip to. In this way, the user "links" the Twitter username with an address and after making an RPC call to verify the tweet, receive a drip. Follow-up requests for a drip from the faucet service do not require extra tweets. Drip limits, time limits, and global ETH emission limits are still enforced the same way as running without Twitter verification.
|
114
|
-
|
115
|
-
#### MUD Transaction Support
|
116
|
-
|
117
|
-
The faucet also supports integration with the MUD World contracts and Components and allows you to insert custom code on "drip" events to set MUD Component values. This allows for close integration with your deployed on-chain MUD application. For example, you can build an extended faucet, which accepts drip requests with Twitter verification, and after verifying the signature in the Tweet, sends an on-chain transaction to set a Component value to link the Twitter username and signer address on-chain. This then can allow the client, for instance, a web app, to display the linked Twitter username for the user by getting the state directly from the on-chain state without relying on any server, even the faucet itself.
|
118
|
-
|
119
|
-
Similarly, as for other services, check out the services `main.go` entry point file for more command-line arguments that can be configured to tweak the configuration of the faucet and turn features on or off.
|
package/bin/faucet
DELETED
Binary file
|
package/bin/mode
DELETED
Binary file
|