diff --git a/examples/node/src/rest/api/v2010/account.ts b/examples/node/src/rest/api/v2010/account.ts index 0ca017570..061974065 100644 --- a/examples/node/src/rest/api/v2010/account.ts +++ b/examples/node/src/rest/api/v2010/account.ts @@ -13,6 +13,7 @@ */ import { inspect, InspectOptions } from "util"; + import Page, { TwilioResponsePayload } from "../../../base/Page"; import Response from "../../../http/response"; import V2010 from "../V2010"; @@ -115,6 +116,7 @@ export interface AccountListInstancePageOptions { dateCreatedAfter?: Date; /** */ pageSize?: number; + /** Page Number, this value is simply for client state */ pageNumber?: number; /** PageToken provided by the API */ @@ -717,7 +719,6 @@ export function AccountListInstance(version: V2010): AccountListInstance { method: "get", uri: targetUrl, }); - let pagePromise = operationPromise.then( (payload) => new AccountPage(instance._version, payload, instance._solution), diff --git a/examples/node/src/rest/flexApi/v1/credential/aws.ts b/examples/node/src/rest/flexApi/v1/credential/aws.ts index d74c9c601..f134a69ab 100644 --- a/examples/node/src/rest/flexApi/v1/credential/aws.ts +++ b/examples/node/src/rest/flexApi/v1/credential/aws.ts @@ -13,6 +13,7 @@ */ import { inspect, InspectOptions } from "util"; + import Page, { TwilioResponsePayload } from "../../../../base/Page"; import Response from "../../../../http/response"; import V1 from "../../V1"; @@ -60,6 +61,7 @@ export interface AwsListInstanceOptions { export interface AwsListInstancePageOptions { /** */ pageSize?: number; + /** Page Number, this value is simply for client state */ pageNumber?: number; /** PageToken provided by the API */ @@ -524,7 +526,6 @@ export function AwsListInstance(version: V1): AwsListInstance { method: "get", uri: targetUrl, }); - let pagePromise = operationPromise.then( (payload) => new AwsPage(instance._version, payload, instance._solution), ); diff --git a/examples/node/src/rest/versionless/understand/assistant.ts b/examples/node/src/rest/versionless/understand/assistant.ts index 5d875df02..9d594b180 100644 --- a/examples/node/src/rest/versionless/understand/assistant.ts +++ b/examples/node/src/rest/versionless/understand/assistant.ts @@ -13,6 +13,7 @@ */ import { inspect, InspectOptions } from "util"; + import Page, { TwilioResponsePayload } from "../../../base/Page"; import Response from "../../../http/response"; import Understand from "../Understand"; @@ -50,6 +51,7 @@ export interface AssistantListInstanceOptions { export interface AssistantListInstancePageOptions { /** How many resources to return in each list page. The default is 50, and the maximum is 1000. */ pageSize?: number; + /** Page Number, this value is simply for client state */ pageNumber?: number; /** PageToken provided by the API */ @@ -201,7 +203,6 @@ export function AssistantListInstance( method: "get", uri: targetUrl, }); - let pagePromise = operationPromise.then( (payload) => new AssistantPage(instance._version, payload, instance._solution), diff --git a/examples/test_spec/twilio_pagination_v1.yaml b/examples/test_spec/twilio_pagination_v1.yaml index cc56dd45b..84856fdab 100644 --- a/examples/test_spec/twilio_pagination_v1.yaml +++ b/examples/test_spec/twilio_pagination_v1.yaml @@ -46,6 +46,7 @@ paths: minimum: 1 maximum: 1000 example: 50 + - name: pageToken in: query description: A URL-safe, base64-encoded token representing the page of results to return @@ -53,8 +54,19 @@ paths: schema: type: string example: "eyJwYWdlIjoyLCJxdWVyeSI6ImJvb2tzIn0=" + + - name: sortBy + in: query + description: Asc dec query param to sort results by a specific field + required: false + schema: + type: string + example: "desc" + security: - accountSid_authToken: [ ] + x-twilio: + pathType: list responses: '200': description: OK @@ -92,4 +104,4 @@ paths: nextToken: type: string description: Token to fetch the next page of results - example: "eyJwYWdlIjoyLCJxdWVyeSI6ImJvb2tzIn0=" \ No newline at end of file + example: "eyJwYWdlIjoyLCJxdWVyeSI6ImJvb2tzIn0=" diff --git a/src/main/java/com/twilio/oai/TwilioNodeGenerator.java b/src/main/java/com/twilio/oai/TwilioNodeGenerator.java index 47ab2a6b7..a693174e0 100644 --- a/src/main/java/com/twilio/oai/TwilioNodeGenerator.java +++ b/src/main/java/com/twilio/oai/TwilioNodeGenerator.java @@ -64,7 +64,7 @@ public void processOpenAPI(final OpenAPI openAPI) { twilioCodegen.setDomain(domain); twilioCodegen.setVersion(version); twilioCodegen.setOutputDir(domain, version); - + twilioCodegen.setIsV1ApiStandard(openAPI); openAPI.getPaths().forEach(resourceTree::addResource); resourceTree.getResources().forEach(resource -> resource.updateFamily(resourceTree)); diff --git a/src/main/resources/twilio-node/api-single.mustache b/src/main/resources/twilio-node/api-single.mustache index b0da46dd3..f0daf4717 100644 --- a/src/main/resources/twilio-node/api-single.mustache +++ b/src/main/resources/twilio-node/api-single.mustache @@ -2,8 +2,8 @@ {{#resources}} import { inspect, InspectOptions } from "util"; -{{#hasPaginationOperation}} -import Page, { TwilioResponsePayload } from "{{apiVersionPath}}/../../base/Page"; +{{#hasPaginationOperation}}{{#isApiV1}}import TokenPage, { TokenPaginationPayload } from "{{apiVersionPath}}/../../base/TokenPage";{{/isApiV1}}{{^isApiV1}} +import Page, { TwilioResponsePayload } from "{{apiVersionPath}}/../../base/Page";{{/isApiV1}} import Response from "{{apiVersionPath}}/../../http/response"; {{/hasPaginationOperation}} import {{apiVersionClass}} from "{{apiVersionPath}}/{{apiVersionClass}}"; @@ -211,5 +211,5 @@ export function {{apiName}}ListInstance(version: {{apiVersionClass}}{{#listPathP return instance; } {{^instancePath}}{{>responseModel}}{{/instancePath}} -{{#hasPaginationOperation}}{{>pagination}}{{/hasPaginationOperation}} +{{#hasPaginationOperation}}{{#isApiV1}}{{>tokenPagination}}{{/isApiV1}}{{^isApiV1}}{{>pagination}}{{/isApiV1}}{{/hasPaginationOperation}} {{/resources}} diff --git a/src/main/resources/twilio-node/listOperationsOptions.mustache b/src/main/resources/twilio-node/listOperationsOptions.mustache index 1b072d2b0..4f9e8e642 100644 --- a/src/main/resources/twilio-node/listOperationsOptions.mustache +++ b/src/main/resources/twilio-node/listOperationsOptions.mustache @@ -33,9 +33,9 @@ export interface {{vendorExtensions.x-resource-name}}PageOptions { {{#allParams}} /** {{{description}}} */ "{{paramName}}"{{^required}}?{{/required}}: {{{dataType}}}; - {{/allParams}} + {{/allParams}}{{^isApiV1}} /** Page Number, this value is simply for client state */ pageNumber?: number; /** PageToken provided by the API */ - pageToken?: string; + pageToken?: string;{{/isApiV1}} } diff --git a/src/main/resources/twilio-node/operation.mustache b/src/main/resources/twilio-node/operation.mustache index da5e1b88e..ea92a8be3 100644 --- a/src/main/resources/twilio-node/operation.mustache +++ b/src/main/resources/twilio-node/operation.mustache @@ -27,9 +27,9 @@ {{#queryParams}}{{>requestParam}}{{/queryParams}} {{#formParams}}{{>requestParam}}{{/formParams}} {{#bodyParam}}data = params{{/bodyParam}} - {{#vendorExtensions.x-is-read-operation}} + {{#vendorExtensions.x-is-read-operation}}{{^isApiV1}} if (params.pageNumber !== undefined) data["Page"] = params.pageNumber; - if (params.pageToken !== undefined) data["PageToken"] = params.pageToken; + if (params.pageToken !== undefined) data["PageToken"] = params.pageToken;{{/isApiV1}} {{/vendorExtensions.x-is-read-operation}} {{#bodyParams}}if(headers === null || headers === undefined) { @@ -75,7 +75,7 @@ operationPromise = operationPromise.then(payload => new {{instanceName}}(operationVersion, payload{{#vendorExtensions.x-is-context-operation}}{{#instancePathParams}}, instance._solution.{{paramName}}{{/instancePathParams}}{{/vendorExtensions.x-is-context-operation}}{{#vendorExtensions.x-is-list-operation}}{{#listPathParams}}, instance._solution.{{paramName}}{{/listPathParams}}{{/vendorExtensions.x-is-list-operation}})); {{/vendorExtensions.x-is-delete-operation}}{{/vendorExtensions.x-is-read-operation}} {{#vendorExtensions.x-is-read-operation}} - operationPromise = operationPromise.then(payload => new {{returnType}}(operationVersion, payload, instance._solution)); + operationPromise = operationPromise.then(payload => new {{returnType}}(operationVersion, payload,{{#isApiV1}} instance._uri, data,{{/isApiV1}} instance._solution)); {{/vendorExtensions.x-is-read-operation}} operationPromise = instance._version.setPromiseCallback(operationPromise,callback); @@ -88,8 +88,7 @@ instance.getPage = function getPage(targetUrl: string, callback?: (error: Error | null, items: {{returnType}}) => any): Promise<{{returnType}}> { const operationPromise = instance._version._domain.twilio.request({method: "{{httpMethod}}", uri: targetUrl}); - - let pagePromise = operationPromise.then(payload => new {{returnType}}(instance._version, payload, instance._solution)); + let pagePromise = operationPromise.then(payload => new {{returnType}}(instance._version, payload,{{#isApiV1}} instance._uri, {},{{/isApiV1}} instance._solution)); pagePromise = instance._version.setPromiseCallback(pagePromise, callback); return pagePromise; } diff --git a/src/main/resources/twilio-node/responseModel.mustache b/src/main/resources/twilio-node/responseModel.mustache index 2c52b0118..606101ad1 100644 --- a/src/main/resources/twilio-node/responseModel.mustache +++ b/src/main/resources/twilio-node/responseModel.mustache @@ -1,6 +1,6 @@ {{#responseModel}} -interface {{apiName}}Payload extends {{^hasPaginationOperation}}{{apiName}}Resource {}{{/hasPaginationOperation}}{{#hasPaginationOperation}}TwilioResponsePayload { + interface {{apiName}}Payload extends {{^hasPaginationOperation}}{{apiName}}Resource {}{{/hasPaginationOperation}}{{#hasPaginationOperation}}{{#isApiV1}}TokenPaginationPayload{{/isApiV1}}{{^isApiV1}}TwilioResponsePayload{{/isApiV1}} { {{recordKey}}: {{apiName}}Resource[]; }{{/hasPaginationOperation}} diff --git a/src/main/resources/twilio-node/tokenPagination.mustache b/src/main/resources/twilio-node/tokenPagination.mustache new file mode 100644 index 000000000..7213faf84 --- /dev/null +++ b/src/main/resources/twilio-node/tokenPagination.mustache @@ -0,0 +1,37 @@ +{{#operations}} +{{#vendorExtensions.x-is-read-operation}} +export class {{apiName}}Page extends TokenPage<{{apiVersionClass}}, {{apiName}}Payload, {{apiName}}Resource, {{instanceName}}> { +/** +* Initialize the {{apiName}}Page +* +* @param version - Version of the resource +* @param response - Response from the API +* @param uri - URI of the resource +* @param params - Query parameters +* @param solution - Path solution +*/ +constructor(version: {{apiVersionClass}}, response: Response, uri: string, params: any, solution: {{apiName}}Solution) { + super(version, response, uri, params, solution); + } + + /** + * Build an instance of {{instanceName}} + * + * @param payload - Payload response from the API + */ + getInstance(payload: {{apiName}}Resource): {{instanceName}} { + return new {{instanceName}}( + this._version, + payload, +{{#listPathParams}} + this._solution.{{paramName}}, +{{/listPathParams}} + ); + } + + [inspect.custom](depth: any, options: InspectOptions) { + return inspect(this.toJSON(), options); + } + } +{{/vendorExtensions.x-is-read-operation}} +{{/operations}}