github.com/vcilabs/webrpc@v0.5.2-0.20201116131534-162e27b1b33b/_examples/hello-webrpc-with-goschema-ts/webapp/src/client.gen.ts (about) 1 /* tslint:disable */ 2 // 3 // -- 4 // This file has been generated by https://github.com/webrpc/webrpc using gen/typescript 5 // Do not edit by hand. Update your webrpc schema and re-generate. 6 7 8 // 9 // Types 10 // 11 12 13 export enum Kind { 14 } 15 16 17 18 export interface Empty { 19 } 20 21 22 23 export interface Page { 24 num: number 25 } 26 27 28 29 export interface User { 30 id: number 31 username: string 32 role: *Kind 33 meta: {[key: string]: interface{}} 34 internalID: number 35 } 36 37 export interface ExampleService { 38 findUsers(args: FindUsersArgs, headers?: object): Promise<FindUsersReturn> 39 getUser(args: GetUserArgs, headers?: object): Promise<GetUserReturn> 40 ping(headers?: object): Promise<PingReturn> 41 } 42 43 export interface FindUsersArgs { 44 q: string 45 } 46 47 export interface FindUsersReturn { 48 page: *Page 49 user: Array<*User> 50 } 51 export interface GetUserArgs { 52 userID: number 53 } 54 55 export interface GetUserReturn { 56 user: *User 57 } 58 export interface PingArgs { 59 } 60 61 export interface PingReturn { 62 bool: boolean 63 } 64 65 66 67 // 68 // Client 69 // 70 export class ExampleService implements ExampleService { 71 private hostname: string 72 private fetch: Fetch 73 private path = '/rpc/ExampleService/' 74 75 constructor(hostname: string, fetch: Fetch) { 76 this.hostname = hostname 77 this.fetch = fetch 78 } 79 80 private url(name: string): string { 81 return this.hostname + this.path + name 82 } 83 84 findUsers = (args: FindUsersArgs, headers?: object): Promise<FindUsersReturn> => { 85 return this.fetch( 86 this.url('FindUsers'), 87 createHTTPRequest(args, headers)).then((res) => { 88 return buildResponse(res).then(_data => { 89 return { 90 page: <*Page>(_data.page), 91 user: <Array<*User>>(_data.user) 92 } 93 }) 94 }) 95 } 96 97 getUser = (args: GetUserArgs, headers?: object): Promise<GetUserReturn> => { 98 return this.fetch( 99 this.url('GetUser'), 100 createHTTPRequest(args, headers)).then((res) => { 101 return buildResponse(res).then(_data => { 102 return { 103 user: <*User>(_data.user) 104 } 105 }) 106 }) 107 } 108 109 ping = (headers?: object): Promise<PingReturn> => { 110 return this.fetch( 111 this.url('Ping'), 112 createHTTPRequest({}, headers) 113 ).then((res) => { 114 return buildResponse(res).then(_data => { 115 return { 116 bool: <boolean>(_data.bool) 117 } 118 }) 119 }) 120 } 121 122 } 123 124 125 export interface WebRPCError extends Error { 126 code: string 127 msg: string 128 status: number 129 } 130 131 const createHTTPRequest = (body: object = {}, headers: object = {}): object => { 132 return { 133 method: 'POST', 134 headers: { ...headers, 'Content-Type': 'application/json' }, 135 body: JSON.stringify(body || {}) 136 } 137 } 138 139 const buildResponse = (res: Response): Promise<any> => { 140 return res.text().then(text => { 141 let data 142 try { 143 data = JSON.parse(text) 144 } catch(err) { 145 throw { code: 'unknown', msg: `expecting JSON, got: ${text}`, status: res.status } as WebRPCError 146 } 147 if (!res.ok) { 148 throw data // webrpc error response 149 } 150 return data 151 }) 152 } 153 154 export type Fetch = (input: RequestInfo, init?: RequestInit) => Promise<Response>