You've already forked npm-core-sdk
Latest generation
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
import type { RpcTransport } from "@protobuf-ts/runtime-rpc";
|
||||
import type { ServiceInfo } from "@protobuf-ts/runtime-rpc";
|
||||
import { AppointmentQuery } from "./appointmentQuery";
|
||||
import type { FindMineByMatchQuery } from "./appointmentQuery";
|
||||
import type { FindMineResult } from "./appointmentQuery";
|
||||
import type { FindMineQuery } from "./appointmentQuery";
|
||||
import type { CountLinesResult } from "./shared";
|
||||
@@ -59,6 +60,10 @@ export interface IAppointmentQueryClient {
|
||||
* @generated from protobuf rpc: FindMine
|
||||
*/
|
||||
findMine(input: FindMineQuery, options?: RpcOptions): UnaryCall<FindMineQuery, FindMineResult>;
|
||||
/**
|
||||
* @generated from protobuf rpc: FindMineMatchingFieldValues
|
||||
*/
|
||||
findMineMatchingFieldValues(input: FindMineByMatchQuery, options?: RpcOptions): UnaryCall<FindMineByMatchQuery, AppointmentByMatchResult>;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf service api.AppointmentQuery
|
||||
@@ -125,4 +130,11 @@ export class AppointmentQueryClient implements IAppointmentQueryClient, ServiceI
|
||||
const method = this.methods[7], opt = this._transport.mergeOptions(options);
|
||||
return stackIntercept<FindMineQuery, FindMineResult>("unary", this._transport, method, opt, input);
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf rpc: FindMineMatchingFieldValues
|
||||
*/
|
||||
findMineMatchingFieldValues(input: FindMineByMatchQuery, options?: RpcOptions): UnaryCall<FindMineByMatchQuery, AppointmentByMatchResult> {
|
||||
const method = this.methods[8], opt = this._transport.mergeOptions(options);
|
||||
return stackIntercept<FindMineByMatchQuery, AppointmentByMatchResult>("unary", this._transport, method, opt, input);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import { UnknownFieldHandler } from "@protobuf-ts/runtime";
|
||||
import type { PartialMessage } from "@protobuf-ts/runtime";
|
||||
import { reflectionMergePartial } from "@protobuf-ts/runtime";
|
||||
import { MessageType } from "@protobuf-ts/runtime";
|
||||
import { QueryBasicHeader } from "./shared";
|
||||
import { MatchFieldResult } from "./shared";
|
||||
import { MatchField } from "./shared";
|
||||
import { EntityType } from "./shared";
|
||||
@@ -165,11 +166,56 @@ export interface FindMineResult {
|
||||
* @generated from protobuf field: repeated api.Appointment Objects = 1
|
||||
*/
|
||||
Objects: Appointment[];
|
||||
/**
|
||||
* @generated from protobuf field: api.ResultHeader Header = 2
|
||||
*/
|
||||
Header?: ResultHeader;
|
||||
/**
|
||||
* @generated from protobuf field: string queryContext = 3
|
||||
*/
|
||||
queryContext: string;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message api.FindMineQuery
|
||||
*/
|
||||
export interface FindMineQuery {
|
||||
/**
|
||||
* @generated from protobuf field: api.QueryBasicHeader Header = 1
|
||||
*/
|
||||
Header?: QueryBasicHeader;
|
||||
/**
|
||||
* list of blockFilters structure for Find query, each element (BlockFilter) in the list is an "OR" part of the query, if not empty, simpleFilters (deprecated) & rangeFilters (deprecated) will be ignored
|
||||
*
|
||||
* @generated from protobuf field: repeated api.BlockFilter BlockFilters = 2
|
||||
*/
|
||||
BlockFilters: BlockFilter[];
|
||||
/**
|
||||
* Number of maximum result
|
||||
*
|
||||
* @generated from protobuf field: string limitFilter = 3
|
||||
*/
|
||||
limitFilter: string;
|
||||
}
|
||||
/**
|
||||
* @generated from protobuf message api.FindMineByMatchQuery
|
||||
*/
|
||||
export interface FindMineByMatchQuery {
|
||||
/**
|
||||
* @generated from protobuf field: api.QueryProjectHeader Header = 1
|
||||
*/
|
||||
Header?: QueryProjectHeader;
|
||||
/**
|
||||
* list of blockFilters structure for Find query, each element (BlockFilter) in the list is an "OR" part of the query, if not empty, simpleFilters (deprecated) & rangeFilters (deprecated) will be ignored
|
||||
*
|
||||
* @generated from protobuf field: repeated api.BlockFilter BlockFilters = 5
|
||||
*/
|
||||
BlockFilters: BlockFilter[];
|
||||
/**
|
||||
* MatchField list structure, for FindMatching query
|
||||
*
|
||||
* @generated from protobuf field: repeated api.MatchField MatchFields = 6
|
||||
*/
|
||||
MatchFields: MatchField[];
|
||||
}
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class AppointmentByIdQuery$Type extends MessageType<AppointmentByIdQuery> {
|
||||
@@ -608,12 +654,15 @@ export const AppointmentByMatchResult = new AppointmentByMatchResult$Type();
|
||||
class FindMineResult$Type extends MessageType<FindMineResult> {
|
||||
constructor() {
|
||||
super("api.FindMineResult", [
|
||||
{ no: 1, name: "Objects", kind: "message", localName: "Objects", jsonName: "Objects", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Appointment }
|
||||
{ no: 1, name: "Objects", kind: "message", localName: "Objects", jsonName: "Objects", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Appointment },
|
||||
{ no: 2, name: "Header", kind: "message", localName: "Header", jsonName: "Header", T: () => ResultHeader },
|
||||
{ no: 3, name: "queryContext", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<FindMineResult>): FindMineResult {
|
||||
const message = globalThis.Object.create((this.messagePrototype!));
|
||||
message.Objects = [];
|
||||
message.queryContext = "";
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<FindMineResult>(this, message, value);
|
||||
return message;
|
||||
@@ -626,6 +675,12 @@ class FindMineResult$Type extends MessageType<FindMineResult> {
|
||||
case /* repeated api.Appointment Objects */ 1:
|
||||
message.Objects.push(Appointment.internalBinaryRead(reader, reader.uint32(), options));
|
||||
break;
|
||||
case /* api.ResultHeader Header */ 2:
|
||||
message.Header = ResultHeader.internalBinaryRead(reader, reader.uint32(), options, message.Header);
|
||||
break;
|
||||
case /* string queryContext */ 3:
|
||||
message.queryContext = reader.string();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
if (u === "throw")
|
||||
@@ -641,6 +696,12 @@ class FindMineResult$Type extends MessageType<FindMineResult> {
|
||||
/* repeated api.Appointment Objects = 1; */
|
||||
for (let i = 0; i < message.Objects.length; i++)
|
||||
Appointment.internalBinaryWrite(message.Objects[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
|
||||
/* api.ResultHeader Header = 2; */
|
||||
if (message.Header)
|
||||
ResultHeader.internalBinaryWrite(message.Header, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
|
||||
/* string queryContext = 3; */
|
||||
if (message.queryContext !== "")
|
||||
writer.tag(3, WireType.LengthDelimited).string(message.queryContext);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||
@@ -654,10 +715,16 @@ export const FindMineResult = new FindMineResult$Type();
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class FindMineQuery$Type extends MessageType<FindMineQuery> {
|
||||
constructor() {
|
||||
super("api.FindMineQuery", []);
|
||||
super("api.FindMineQuery", [
|
||||
{ no: 1, name: "Header", kind: "message", localName: "Header", jsonName: "Header", T: () => QueryBasicHeader, options: { "validate.rules": { message: { required: true } } } },
|
||||
{ no: 2, name: "BlockFilters", kind: "message", localName: "BlockFilters", jsonName: "BlockFilters", repeat: 2 /*RepeatType.UNPACKED*/, T: () => BlockFilter },
|
||||
{ no: 3, name: "limitFilter", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field": { description: "Number of maximum result", example: "\"500\"" } } }
|
||||
], { "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema": { jsonSchema: { required: ["Header"] } } });
|
||||
}
|
||||
create(value?: PartialMessage<FindMineQuery>): FindMineQuery {
|
||||
const message = globalThis.Object.create((this.messagePrototype!));
|
||||
message.BlockFilters = [];
|
||||
message.limitFilter = "";
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<FindMineQuery>(this, message, value);
|
||||
return message;
|
||||
@@ -667,6 +734,15 @@ class FindMineQuery$Type extends MessageType<FindMineQuery> {
|
||||
while (reader.pos < end) {
|
||||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* api.QueryBasicHeader Header */ 1:
|
||||
message.Header = QueryBasicHeader.internalBinaryRead(reader, reader.uint32(), options, message.Header);
|
||||
break;
|
||||
case /* repeated api.BlockFilter BlockFilters */ 2:
|
||||
message.BlockFilters.push(BlockFilter.internalBinaryRead(reader, reader.uint32(), options));
|
||||
break;
|
||||
case /* string limitFilter */ 3:
|
||||
message.limitFilter = reader.string();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
if (u === "throw")
|
||||
@@ -679,6 +755,15 @@ class FindMineQuery$Type extends MessageType<FindMineQuery> {
|
||||
return message;
|
||||
}
|
||||
internalBinaryWrite(message: FindMineQuery, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* api.QueryBasicHeader Header = 1; */
|
||||
if (message.Header)
|
||||
QueryBasicHeader.internalBinaryWrite(message.Header, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
|
||||
/* repeated api.BlockFilter BlockFilters = 2; */
|
||||
for (let i = 0; i < message.BlockFilters.length; i++)
|
||||
BlockFilter.internalBinaryWrite(message.BlockFilters[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();
|
||||
/* string limitFilter = 3; */
|
||||
if (message.limitFilter !== "")
|
||||
writer.tag(3, WireType.LengthDelimited).string(message.limitFilter);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||
@@ -689,6 +774,68 @@ class FindMineQuery$Type extends MessageType<FindMineQuery> {
|
||||
* @generated MessageType for protobuf message api.FindMineQuery
|
||||
*/
|
||||
export const FindMineQuery = new FindMineQuery$Type();
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class FindMineByMatchQuery$Type extends MessageType<FindMineByMatchQuery> {
|
||||
constructor() {
|
||||
super("api.FindMineByMatchQuery", [
|
||||
{ no: 1, name: "Header", kind: "message", localName: "Header", jsonName: "Header", T: () => QueryProjectHeader, options: { "validate.rules": { message: { required: true } } } },
|
||||
{ no: 5, name: "BlockFilters", kind: "message", localName: "BlockFilters", jsonName: "BlockFilters", repeat: 2 /*RepeatType.UNPACKED*/, T: () => BlockFilter },
|
||||
{ no: 6, name: "MatchFields", kind: "message", localName: "MatchFields", jsonName: "MatchFields", repeat: 2 /*RepeatType.UNPACKED*/, T: () => MatchField, options: { "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field": { description: "MatchField list structure, for FindMatching query" } } }
|
||||
], { "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema": { jsonSchema: { required: ["Header"] } } });
|
||||
}
|
||||
create(value?: PartialMessage<FindMineByMatchQuery>): FindMineByMatchQuery {
|
||||
const message = globalThis.Object.create((this.messagePrototype!));
|
||||
message.BlockFilters = [];
|
||||
message.MatchFields = [];
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<FindMineByMatchQuery>(this, message, value);
|
||||
return message;
|
||||
}
|
||||
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: FindMineByMatchQuery): FindMineByMatchQuery {
|
||||
let message = target ?? this.create(), end = reader.pos + length;
|
||||
while (reader.pos < end) {
|
||||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* api.QueryProjectHeader Header */ 1:
|
||||
message.Header = QueryProjectHeader.internalBinaryRead(reader, reader.uint32(), options, message.Header);
|
||||
break;
|
||||
case /* repeated api.BlockFilter BlockFilters */ 5:
|
||||
message.BlockFilters.push(BlockFilter.internalBinaryRead(reader, reader.uint32(), options));
|
||||
break;
|
||||
case /* repeated api.MatchField MatchFields */ 6:
|
||||
message.MatchFields.push(MatchField.internalBinaryRead(reader, reader.uint32(), options));
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
if (u === "throw")
|
||||
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
||||
let d = reader.skip(wireType);
|
||||
if (u !== false)
|
||||
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
internalBinaryWrite(message: FindMineByMatchQuery, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* api.QueryProjectHeader Header = 1; */
|
||||
if (message.Header)
|
||||
QueryProjectHeader.internalBinaryWrite(message.Header, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
|
||||
/* repeated api.BlockFilter BlockFilters = 5; */
|
||||
for (let i = 0; i < message.BlockFilters.length; i++)
|
||||
BlockFilter.internalBinaryWrite(message.BlockFilters[i], writer.tag(5, WireType.LengthDelimited).fork(), options).join();
|
||||
/* repeated api.MatchField MatchFields = 6; */
|
||||
for (let i = 0; i < message.MatchFields.length; i++)
|
||||
MatchField.internalBinaryWrite(message.MatchFields[i], writer.tag(6, WireType.LengthDelimited).fork(), options).join();
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||
return writer;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @generated MessageType for protobuf message api.FindMineByMatchQuery
|
||||
*/
|
||||
export const FindMineByMatchQuery = new FindMineByMatchQuery$Type();
|
||||
/**
|
||||
* @generated ServiceType for protobuf service api.AppointmentQuery
|
||||
*/
|
||||
@@ -700,5 +847,6 @@ export const AppointmentQuery = new ServiceType("api.AppointmentQuery", [
|
||||
{ name: "Extract", options: { "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation": { tags: ["Appointment Query"], description: "Schedule a data extraction" }, "api.rscType": "Project", "api.roles": "", "api.moduleID": "appointment-scheduling", "google.api.method_visibility": { restriction: "PUBLIC" } }, I: ExtractQuery, O: ExtractResult },
|
||||
{ name: "GetKPIData", options: { "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation": { tags: ["Appointment Query"], description: "Get Appointment KPI data" }, "api.rscType": "Project", "api.roles": "", "api.moduleID": "appointment-scheduling", "google.api.method_visibility": { restriction: "PUBLIC" } }, I: GetKPIDataQuery, O: GetKPIDataResult },
|
||||
{ name: "CountLines", options: { "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation": { tags: ["Appointment Query"], description: "Count lines in database for project" }, "api.rscType": "Platform", "api.roles": "Platform.Project-Query", "api.moduleID": "appointment-scheduling", "google.api.method_visibility": { restriction: "PUBLIC" } }, I: CountLinesQuery, O: CountLinesResult },
|
||||
{ name: "FindMine", options: { "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation": { tags: ["Appointment Query"], description: "Find user's all Appointments across all sites in all organisations" }, "api.customQuery": true, "api.rscType": "Platform", "api.roles": "", "api.moduleID": "appointment-scheduling", "google.api.method_visibility": { restriction: "PUBLIC" } }, I: FindMineQuery, O: FindMineResult }
|
||||
{ name: "FindMine", options: { "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation": { tags: ["Appointment Query"], description: "Find user's all Appointments across all sites in all organisations" }, "api.customQuery": true, "api.rscType": "Platform", "api.roles": "", "api.moduleID": "appointment-scheduling", "google.api.method_visibility": { restriction: "PUBLIC" } }, I: FindMineQuery, O: FindMineResult },
|
||||
{ name: "FindMineMatchingFieldValues", options: { "grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation": { tags: ["Appointment Query"], description: "Using search criteria & a main field word, find the list of fields containing the searched word (used for auto completion purposes ...) " }, "api.rscType": "Platform", "api.roles": "", "api.moduleID": "appointment-scheduling", "google.api.method_visibility": { restriction: "PUBLIC" } }, I: FindMineByMatchQuery, O: AppointmentByMatchResult }
|
||||
], { "api.serviceType": "Query", "api.k8sService": "collab-query-server" });
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@reflex-platform/npm-core-sdk",
|
||||
"version": "1.12.0-SNAPSHOT-251030140547",
|
||||
"version": "1.12.0-SNAPSHOT-251030144953",
|
||||
"description": "npm libs from core model proto files",
|
||||
"homepage": "",
|
||||
"main": "index.ts",
|
||||
|
||||
82
shared.ts
82
shared.ts
@@ -241,6 +241,25 @@ export interface QueryHeader {
|
||||
*/
|
||||
LocalizedLabel: boolean;
|
||||
}
|
||||
/**
|
||||
* Header for all query messages
|
||||
*
|
||||
* @generated from protobuf message api.QueryBasicHeader
|
||||
*/
|
||||
export interface QueryBasicHeader {
|
||||
/**
|
||||
* @generated from protobuf field: string PagingState = 1
|
||||
*/
|
||||
PagingState: string;
|
||||
/**
|
||||
* @generated from protobuf field: string Limit = 2
|
||||
*/
|
||||
Limit: string;
|
||||
/**
|
||||
* @generated from protobuf field: bool LocalizedLabel = 3
|
||||
*/
|
||||
LocalizedLabel: boolean;
|
||||
}
|
||||
/**
|
||||
* Header for all query project messages
|
||||
*
|
||||
@@ -3280,6 +3299,69 @@ class QueryHeader$Type extends MessageType<QueryHeader> {
|
||||
*/
|
||||
export const QueryHeader = new QueryHeader$Type();
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class QueryBasicHeader$Type extends MessageType<QueryBasicHeader> {
|
||||
constructor() {
|
||||
super("api.QueryBasicHeader", [
|
||||
{ no: 1, name: "PagingState", kind: "scalar", localName: "PagingState", jsonName: "PagingState", T: 9 /*ScalarType.STRING*/ },
|
||||
{ no: 2, name: "Limit", kind: "scalar", localName: "Limit", jsonName: "Limit", T: 9 /*ScalarType.STRING*/ },
|
||||
{ no: 3, name: "LocalizedLabel", kind: "scalar", localName: "LocalizedLabel", jsonName: "LocalizedLabel", T: 8 /*ScalarType.BOOL*/ }
|
||||
]);
|
||||
}
|
||||
create(value?: PartialMessage<QueryBasicHeader>): QueryBasicHeader {
|
||||
const message = globalThis.Object.create((this.messagePrototype!));
|
||||
message.PagingState = "";
|
||||
message.Limit = "";
|
||||
message.LocalizedLabel = false;
|
||||
if (value !== undefined)
|
||||
reflectionMergePartial<QueryBasicHeader>(this, message, value);
|
||||
return message;
|
||||
}
|
||||
internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: QueryBasicHeader): QueryBasicHeader {
|
||||
let message = target ?? this.create(), end = reader.pos + length;
|
||||
while (reader.pos < end) {
|
||||
let [fieldNo, wireType] = reader.tag();
|
||||
switch (fieldNo) {
|
||||
case /* string PagingState */ 1:
|
||||
message.PagingState = reader.string();
|
||||
break;
|
||||
case /* string Limit */ 2:
|
||||
message.Limit = reader.string();
|
||||
break;
|
||||
case /* bool LocalizedLabel */ 3:
|
||||
message.LocalizedLabel = reader.bool();
|
||||
break;
|
||||
default:
|
||||
let u = options.readUnknownField;
|
||||
if (u === "throw")
|
||||
throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
|
||||
let d = reader.skip(wireType);
|
||||
if (u !== false)
|
||||
(u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
|
||||
}
|
||||
}
|
||||
return message;
|
||||
}
|
||||
internalBinaryWrite(message: QueryBasicHeader, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
|
||||
/* string PagingState = 1; */
|
||||
if (message.PagingState !== "")
|
||||
writer.tag(1, WireType.LengthDelimited).string(message.PagingState);
|
||||
/* string Limit = 2; */
|
||||
if (message.Limit !== "")
|
||||
writer.tag(2, WireType.LengthDelimited).string(message.Limit);
|
||||
/* bool LocalizedLabel = 3; */
|
||||
if (message.LocalizedLabel !== false)
|
||||
writer.tag(3, WireType.Varint).bool(message.LocalizedLabel);
|
||||
let u = options.writeUnknownFields;
|
||||
if (u !== false)
|
||||
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
||||
return writer;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @generated MessageType for protobuf message api.QueryBasicHeader
|
||||
*/
|
||||
export const QueryBasicHeader = new QueryBasicHeader$Type();
|
||||
// @generated message type with reflection information, may provide speed optimized methods
|
||||
class QueryProjectHeader$Type extends MessageType<QueryProjectHeader> {
|
||||
constructor() {
|
||||
super("api.QueryProjectHeader", [
|
||||
|
||||
Reference in New Issue
Block a user