asana 3.0.2 → 3.0.4

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.
Files changed (82) hide show
  1. package/.github/workflows/publish.yaml +78 -38
  2. package/.swagger-codegen/VERSION +1 -1
  3. package/README.md +140 -29
  4. package/codegen/templates/README.mustache +129 -26
  5. package/codegen/templates/api.mustache +17 -15
  6. package/dist/ApiClient.js +6 -7
  7. package/dist/api/AllocationsApi.js +307 -0
  8. package/dist/api/AttachmentsApi.js +22 -95
  9. package/dist/api/AuditLogAPIApi.js +10 -14
  10. package/dist/api/BatchAPIApi.js +10 -14
  11. package/dist/api/CustomFieldSettingsApi.js +16 -23
  12. package/dist/api/CustomFieldsApi.js +38 -203
  13. package/dist/api/EventsApi.js +12 -16
  14. package/dist/api/GoalRelationshipsApi.js +26 -122
  15. package/dist/api/GoalsApi.js +48 -239
  16. package/dist/api/JobsApi.js +8 -32
  17. package/dist/api/MembershipsApi.js +73 -99
  18. package/dist/api/OrganizationExportsApi.js +12 -59
  19. package/dist/api/PortfolioMembershipsApi.js +20 -50
  20. package/dist/api/PortfoliosApi.js +56 -293
  21. package/dist/api/ProjectBriefsApi.js +20 -113
  22. package/dist/api/ProjectMembershipsApi.js +14 -41
  23. package/dist/api/ProjectStatusesApi.js +22 -95
  24. package/dist/api/ProjectTemplatesApi.js +28 -104
  25. package/dist/api/ProjectsApi.js +88 -446
  26. package/dist/api/RulesApi.js +8 -32
  27. package/dist/api/SectionsApi.js +34 -176
  28. package/dist/api/StatusUpdatesApi.js +22 -95
  29. package/dist/api/StoriesApi.js +26 -122
  30. package/dist/api/TagsApi.js +42 -167
  31. package/dist/api/TaskTemplatesApi.js +63 -72
  32. package/dist/api/TasksApi.js +173 -544
  33. package/dist/api/TeamMembershipsApi.js +26 -59
  34. package/dist/api/TeamsApi.js +36 -158
  35. package/dist/api/TimePeriodsApi.js +14 -41
  36. package/dist/api/TimeTrackingEntriesApi.js +26 -122
  37. package/dist/api/TypeaheadApi.js +12 -16
  38. package/dist/api/UserTaskListsApi.js +12 -59
  39. package/dist/api/UsersApi.js +32 -68
  40. package/dist/api/WebhooksApi.js +26 -122
  41. package/dist/api/WorkspaceMembershipsApi.js +20 -50
  42. package/dist/api/WorkspacesApi.js +26 -122
  43. package/dist/index.js +7 -0
  44. package/package.json +1 -1
  45. package/src/ApiClient.js +4 -4
  46. package/src/api/AllocationsApi.js +365 -0
  47. package/src/api/AttachmentsApi.js +42 -134
  48. package/src/api/AuditLogAPIApi.js +15 -17
  49. package/src/api/BatchAPIApi.js +15 -17
  50. package/src/api/CustomFieldSettingsApi.js +28 -32
  51. package/src/api/CustomFieldsApi.js +78 -290
  52. package/src/api/EventsApi.js +17 -19
  53. package/src/api/GoalRelationshipsApi.js +51 -173
  54. package/src/api/GoalsApi.js +100 -344
  55. package/src/api/JobsApi.js +11 -41
  56. package/src/api/MembershipsApi.js +105 -138
  57. package/src/api/OrganizationExportsApi.js +20 -80
  58. package/src/api/PortfolioMembershipsApi.js +37 -71
  59. package/src/api/PortfoliosApi.js +118 -422
  60. package/src/api/ProjectBriefsApi.js +38 -158
  61. package/src/api/ProjectMembershipsApi.js +24 -56
  62. package/src/api/ProjectStatusesApi.js +42 -134
  63. package/src/api/ProjectTemplatesApi.js +55 -149
  64. package/src/api/ProjectsApi.js +189 -647
  65. package/src/api/RulesApi.js +11 -41
  66. package/src/api/SectionsApi.js +69 -251
  67. package/src/api/StatusUpdatesApi.js +42 -134
  68. package/src/api/StoriesApi.js +51 -173
  69. package/src/api/TagsApi.js +86 -242
  70. package/src/api/TaskTemplatesApi.js +86 -95
  71. package/src/api/TasksApi.js +330 -799
  72. package/src/api/TeamMembershipsApi.js +50 -86
  73. package/src/api/TeamsApi.js +73 -227
  74. package/src/api/TimePeriodsApi.js +24 -56
  75. package/src/api/TimeTrackingEntriesApi.js +51 -173
  76. package/src/api/TypeaheadApi.js +17 -19
  77. package/src/api/UserTaskListsApi.js +20 -80
  78. package/src/api/UsersApi.js +63 -101
  79. package/src/api/WebhooksApi.js +51 -173
  80. package/src/api/WorkspaceMembershipsApi.js +37 -71
  81. package/src/api/WorkspacesApi.js +51 -173
  82. package/src/index.js +9 -2
@@ -6,26 +6,47 @@ on:
6
6
  version:
7
7
  required: true
8
8
 
9
+ defaults:
10
+ run:
11
+ shell: bash
12
+
13
+ permissions:
14
+ contents: read
15
+ id-token: write
16
+
17
+ env:
18
+ GENERATOR_VERSION: 3.0.54
19
+ GENERATOR_NAME: swagger-codegen-cli.jar
20
+ JAR_ASANA: codegen/swagger/target/AsanaClientCodegen-swagger-codegen-1.0.0.jar
21
+ ACTUAL_LANG: com.asana.codegen.JavascriptClientCodegenGenerator
22
+ NAME: asana
23
+
9
24
  jobs:
10
25
  generate-javascript-library:
11
26
  name: Generate JavaScript client library
12
27
  runs-on: ubuntu-latest
13
28
  steps:
14
- - uses: actions/checkout@v3
15
- - uses: actions/setup-java@v3
29
+ - name: Authenticate to AWS
30
+ uses: aws-actions/configure-aws-credentials@v4
31
+ with:
32
+ aws-region: us-east-1
33
+ role-to-assume: arn:aws:iam::403483446840:role/autogen_role_beta_github_actions_release_asana_client_libraries
34
+ - name: Get GitHub app token
35
+ uses: asana/get-github-app-token@v1
36
+ id: get-token
37
+ with:
38
+ github-app-name: asana-publish-client-libraries
39
+ - name: Checkout repo files and set the git token
40
+ uses: actions/checkout@v4
41
+ with:
42
+ token: ${{ steps.get-token.outputs.app-token }}
43
+ - uses: actions/setup-java@v4
16
44
  with:
17
45
  distribution: "temurin"
18
46
  java-version: "17"
19
- - name: Setup environment variables
20
- run: |
21
- echo "generator_version=3.0.52" >> "$GITHUB_ENV"
22
- echo "generator_name=swagger-codegen-cli.jar" >> "$GITHUB_ENV"
23
- echo "jar_asana=codegen/swagger/target/AsanaClientCodegen-swagger-codegen-1.0.0.jar" >> "$GITHUB_ENV"
24
- echo "actual_lang=com.asana.codegen.JavascriptClientCodegenGenerator" >> "$GITHUB_ENV"
25
- echo "name=asana" >> "$GITHUB_ENV"
26
47
  - name: Download generator
27
48
  run: |
28
- wget -q -O $generator_name https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/${{ env.generator_version }}/swagger-codegen-cli-${{ env.generator_version }}.jar
49
+ wget -q -O $GENERATOR_NAME https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/${{ env.GENERATOR_VERSION }}/swagger-codegen-cli-${{ env.GENERATOR_VERSION }}.jar
29
50
  - name: Build custom code
30
51
  run: |
31
52
  pushd codegen/swagger >/dev/null
@@ -33,34 +54,48 @@ jobs:
33
54
  popd >/dev/null
34
55
  - name: Generate library
35
56
  run: >-
36
- java -cp "${{ env.jar_asana }}:${{ env.generator_name }}"
57
+ java -cp "${{ env.JAR_ASANA }}:${{ env.GENERATOR_NAME }}"
37
58
  io.swagger.codegen.v3.cli.SwaggerCodegen
38
59
  generate
39
60
  --input-spec https://raw.githubusercontent.com/Asana/openapi/master/defs/asana_sdk_oas.yaml
40
61
  --template-dir "codegen/templates"
41
- --lang "${{ env.actual_lang }}"
42
- -DpackageName=${{ env.name }}
43
- --additional-properties "projectVersion=${{ inputs.version }},projectName=${{ env.name }},packageName=${{ env.name }},usePromises=true,useES6=true"
62
+ --lang "${{ env.ACTUAL_LANG }}"
63
+ -DpackageName=${{ env.NAME }}
64
+ --additional-properties "projectVersion=${{ inputs.version }},projectName=${{ env.NAME }},packageName=${{ env.NAME }},usePromises=true,useES6=true"
44
65
  - name: Clean up generator
45
- run: rm -rf codegen/swagger/target ${{ env.generator_name }}
66
+ run: rm -rf codegen/swagger/target ${{ env.GENERATOR_NAME }}
46
67
  - name: Push changes to master branch
47
- uses: EndBug/add-and-commit@v9
48
- with:
49
- message: 'Updated JavaScript SDK: v${{ inputs.version }}'
50
- committer_name: GitHub Actions
51
- committer_email: actions@github.com
52
- tag: 'v${{ inputs.version }} --force'
53
- tag_push: '--force'
54
- build-n-publish-to-npmjs:
68
+ run: |
69
+ git config user.name asana-publish-client-libraries[bot]
70
+ git config user.email 159857493+asana-publish-client-libraries[bot]@users.noreply.github.com
71
+ git add .
72
+ git commit -m 'Updated JavaScript SDK: v${{ inputs.version }}'
73
+ git push origin master
74
+ git pull
75
+ git tag 'v${{ inputs.version }}' --force
76
+ git push origin --tags --force
77
+ publish-to-npmjs:
55
78
  needs: generate-javascript-library
56
79
  name: Build and publish 📦 to npmjs
57
80
  runs-on: ubuntu-latest
58
81
  steps:
59
- - uses: actions/checkout@v3
82
+ - name: Authenticate to AWS
83
+ uses: aws-actions/configure-aws-credentials@v4
84
+ with:
85
+ aws-region: us-east-1
86
+ role-to-assume: arn:aws:iam::403483446840:role/autogen_role_beta_github_actions_release_asana_client_libraries
87
+ - name: Load secrets
88
+ uses: aws-actions/aws-secretsmanager-get-secrets@v1
89
+ with:
90
+ secret-ids: NPM_API,prod/github_actions_release_asana_client_libraries/npm_api_key
91
+ # npm_api_key secret is stored as {key:"***..."}.
92
+ # GitHub Actions environment variable name is NPM_API so to access "key" from the json we can use NPM_API_KEY
93
+ parse-json-secrets: true
94
+ - uses: actions/checkout@v4
60
95
  with:
61
96
  fetch-depth: 0
62
97
  ref: master
63
- - uses: actions/setup-node@v3
98
+ - uses: actions/setup-node@v4
64
99
  with:
65
100
  node-version: "18.x"
66
101
  registry-url: "https://registry.npmjs.com"
@@ -72,17 +107,27 @@ jobs:
72
107
  npm install
73
108
  npm publish
74
109
  env:
75
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
76
- publish-to-github:
77
- needs: build-n-publish-to-npmjs
78
- name: Publish to GitHub Releases
110
+ NODE_AUTH_TOKEN: ${{ env.NPM_API_KEY }}
111
+ publish-to-github-releases:
112
+ needs: publish-to-npmjs
113
+ name: Build and publish to GitHub Releases
79
114
  runs-on: ubuntu-latest
80
115
  steps:
81
- - uses: actions/checkout@v3
116
+ - name: Authenticate to AWS
117
+ uses: aws-actions/configure-aws-credentials@v4
118
+ with:
119
+ aws-region: us-east-1
120
+ role-to-assume: arn:aws:iam::403483446840:role/autogen_role_beta_github_actions_release_asana_client_libraries
121
+ - name: Get GitHub app token
122
+ uses: asana/get-github-app-token@v1
123
+ id: get-token
124
+ with:
125
+ github-app-name: asana-publish-client-libraries
126
+ - uses: actions/checkout@v4
82
127
  with:
83
128
  fetch-depth: 0
84
129
  ref: master
85
- - uses: actions/setup-node@v3
130
+ - uses: actions/setup-node@v4
86
131
  with:
87
132
  node-version: "18.x"
88
133
  registry-url: "https://registry.npmjs.com"
@@ -99,11 +144,6 @@ jobs:
99
144
  browserify dist/index.js -s Asana | uglifyjs > dist/asana-min.js
100
145
  browserify dist/index.js -s Asana > dist/asana.js
101
146
  - name: Publish to GitHub Releases
102
- uses: softprops/action-gh-release@v1
147
+ run: gh release create v${{ inputs.version }} dist/asana.js dist/asana-min.js
103
148
  env:
104
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
105
- with:
106
- tag_name: v${{ inputs.version }}
107
- files: |
108
- dist/asana.js
109
- dist/asana-min.js
149
+ GH_TOKEN: ${{ steps.get-token.outputs.app-token }}
@@ -1 +1 @@
1
- 3.0.52
1
+ 3.0.54
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # asana [![GitHub release][release-image]][release-url] [![NPM Version][npm-image]][npm-url]
2
2
 
3
3
  - API version: 1.0
4
- - Package version: 3.0.2
4
+ - Package version: 3.0.4
5
5
 
6
6
  ## Installation
7
7
 
@@ -18,7 +18,7 @@ npm install asana --save
18
18
  Include the latest release directly from GitHub:
19
19
 
20
20
  ```html
21
- <script src="https://github.com/Asana/node-asana/releases/download/v3.0.2/asana-min.js"></script>
21
+ <script src="https://github.com/Asana/node-asana/releases/download/v3.0.4/asana-min.js"></script>
22
22
  ```
23
23
 
24
24
  Example usage (**NOTE**: be careful not to expose your access token):
@@ -195,6 +195,11 @@ All URIs are relative to *https://app.asana.com/api/1.0*
195
195
 
196
196
  Class | Method | HTTP request | Description
197
197
  ------------ | ------------- | ------------- | -------------
198
+ *Asana.AllocationsApi* | [**createAllocation**](docs/AllocationsApi.md#createAllocation) | **POST** /allocations | Create an allocation
199
+ *Asana.AllocationsApi* | [**deleteAllocation**](docs/AllocationsApi.md#deleteAllocation) | **DELETE** /allocations/{allocation_gid} | Delete an allocation
200
+ *Asana.AllocationsApi* | [**getAllocation**](docs/AllocationsApi.md#getAllocation) | **GET** /allocations/{allocation_gid} | Get an allocation
201
+ *Asana.AllocationsApi* | [**getAllocations**](docs/AllocationsApi.md#getAllocations) | **GET** /allocations | Get multiple allocations
202
+ *Asana.AllocationsApi* | [**updateAllocation**](docs/AllocationsApi.md#updateAllocation) | **PUT** /allocations/{allocation_gid} | Update an allocation
198
203
  *Asana.AttachmentsApi* | [**createAttachmentForObject**](docs/AttachmentsApi.md#createAttachmentForObject) | **POST** /attachments | Upload an attachment
199
204
  *Asana.AttachmentsApi* | [**deleteAttachment**](docs/AttachmentsApi.md#deleteAttachment) | **DELETE** /attachments/{attachment_gid} | Delete an attachment
200
205
  *Asana.AttachmentsApi* | [**getAttachment**](docs/AttachmentsApi.md#getAttachment) | **GET** /attachments/{attachment_gid} | Get an attachment
@@ -232,6 +237,7 @@ Class | Method | HTTP request | Description
232
237
  *Asana.MembershipsApi* | [**deleteMembership**](docs/MembershipsApi.md#deleteMembership) | **DELETE** /memberships/{membership_gid} | Delete a membership
233
238
  *Asana.MembershipsApi* | [**getMembership**](docs/MembershipsApi.md#getMembership) | **GET** /memberships/{membership_gid} | Get a membership
234
239
  *Asana.MembershipsApi* | [**getMemberships**](docs/MembershipsApi.md#getMemberships) | **GET** /memberships | Get multiple memberships
240
+ *Asana.MembershipsApi* | [**updateMembership**](docs/MembershipsApi.md#updateMembership) | **PUT** /memberships/{membership_gid} | Update a membership
235
241
  *Asana.OrganizationExportsApi* | [**createOrganizationExport**](docs/OrganizationExportsApi.md#createOrganizationExport) | **POST** /organization_exports | Create an organization export request
236
242
  *Asana.OrganizationExportsApi* | [**getOrganizationExport**](docs/OrganizationExportsApi.md#getOrganizationExport) | **GET** /organization_exports/{organization_export_gid} | Get details on an org export request
237
243
  *Asana.PortfolioMembershipsApi* | [**getPortfolioMembership**](docs/PortfolioMembershipsApi.md#getPortfolioMembership) | **GET** /portfolio_memberships/{portfolio_membership_gid} | Get a portfolio membership
@@ -308,6 +314,7 @@ Class | Method | HTTP request | Description
308
314
  *Asana.TagsApi* | [**getTagsForTask**](docs/TagsApi.md#getTagsForTask) | **GET** /tasks/{task_gid}/tags | Get a task&#x27;s tags
309
315
  *Asana.TagsApi* | [**getTagsForWorkspace**](docs/TagsApi.md#getTagsForWorkspace) | **GET** /workspaces/{workspace_gid}/tags | Get tags in a workspace
310
316
  *Asana.TagsApi* | [**updateTag**](docs/TagsApi.md#updateTag) | **PUT** /tags/{tag_gid} | Update a tag
317
+ *Asana.TaskTemplatesApi* | [**deleteTaskTemplate**](docs/TaskTemplatesApi.md#deleteTaskTemplate) | **DELETE** /task_templates/{task_template_gid} | Delete a task template
311
318
  *Asana.TaskTemplatesApi* | [**getTaskTemplate**](docs/TaskTemplatesApi.md#getTaskTemplate) | **GET** /task_templates/{task_template_gid} | Get a task template
312
319
  *Asana.TaskTemplatesApi* | [**getTaskTemplates**](docs/TaskTemplatesApi.md#getTaskTemplates) | **GET** /task_templates | Get multiple task templates
313
320
  *Asana.TaskTemplatesApi* | [**instantiateTask**](docs/TaskTemplatesApi.md#instantiateTask) | **POST** /task_templates/{task_template_gid}/instantiateTask | Instantiate a task from a task template
@@ -324,6 +331,7 @@ Class | Method | HTTP request | Description
324
331
  *Asana.TasksApi* | [**getDependentsForTask**](docs/TasksApi.md#getDependentsForTask) | **GET** /tasks/{task_gid}/dependents | Get dependents from a task
325
332
  *Asana.TasksApi* | [**getSubtasksForTask**](docs/TasksApi.md#getSubtasksForTask) | **GET** /tasks/{task_gid}/subtasks | Get subtasks from a task
326
333
  *Asana.TasksApi* | [**getTask**](docs/TasksApi.md#getTask) | **GET** /tasks/{task_gid} | Get a task
334
+ *Asana.TasksApi* | [**getTaskForCustomID**](docs/TasksApi.md#getTaskForCustomID) | **GET** /workspaces/{workspace_gid}/tasks/custom_id/{custom_id} | Get a task for a given custom ID
327
335
  *Asana.TasksApi* | [**getTasks**](docs/TasksApi.md#getTasks) | **GET** /tasks | Get multiple tasks
328
336
  *Asana.TasksApi* | [**getTasksForProject**](docs/TasksApi.md#getTasksForProject) | **GET** /projects/{project_gid}/tasks | Get tasks from a project
329
337
  *Asana.TasksApi* | [**getTasksForSection**](docs/TasksApi.md#getTasksForSection) | **GET** /sections/{section_gid}/tasks | Get tasks from a section
@@ -586,22 +594,25 @@ token.accessToken = '<YOUR_ACCESS_TOKEN>';
586
594
 
587
595
  let tasksApiInstance = new Asana.TasksApi();
588
596
  let opts = {
589
- "project": "<YOUR_PROJECT_GID>"
590
- "limit": 100
597
+ "project": "<YOUR_PROJECT_GID>",
598
+ "limit": 100,
591
599
  };
592
600
 
593
601
  async function getAllTasks(opts) {
594
- let tasks = await tasksApiInstance.getTasks(opts).then(async (firstPage) => {
595
- let res = []
596
- res = res.concat(firstPage.data);
597
- // Get the next page
598
- let nextPage = await firstPage.nextPage();
599
- // Keep fetching for the next page until there are no more results
600
- while(nextPage.data) {
601
- res = res.concat(nextPage.data);
602
- nextPage = await nextPage.nextPage();
602
+ let tasks = await tasksApiInstance.getTasks(opts).then(async (response) => {
603
+ let result = [];
604
+ let page = response;
605
+ while(true) {
606
+ // Add items on page to list of results
607
+ result = result.concat(page.data);
608
+ // Fetch the next page
609
+ page = await page.nextPage();
610
+ // If the there is no data in the next page break from the loop
611
+ if (!page.data) {
612
+ break;
613
+ }
603
614
  }
604
- return res;
615
+ return result;
605
616
  }, (error) => {
606
617
  console.error(error.response.body);
607
618
  });
@@ -610,6 +621,79 @@ async function getAllTasks(opts) {
610
621
  }
611
622
 
612
623
  getAllTasks(opts);
624
+
625
+ ```
626
+
627
+ Sample output:
628
+ ```bash
629
+ Tasks: [
630
+ {
631
+ "gid": "123",
632
+ "name": "task 1",
633
+ "resource_type": "task",
634
+ "resource_subtype": "default_task"
635
+ },
636
+ {
637
+ "gid": "456",
638
+ "name": "task 2",
639
+ "resource_type": "task",
640
+ "resource_subtype": "default_task"
641
+ },
642
+ {
643
+ "gid": "789",
644
+ "name": "task 3",
645
+ "resource_type": "task",
646
+ "resource_subtype": "default_task"
647
+ },
648
+ {
649
+ "gid": "101112",
650
+ "name": "task 4",
651
+ "resource_type": "task",
652
+ "resource_subtype": "default_task"
653
+ },
654
+ {
655
+ "gid": "131415",
656
+ "name": "task 5",
657
+ "resource_type": "task",
658
+ "resource_subtype": "default_task"
659
+ },
660
+ {
661
+ "gid": "161718",
662
+ "name": "task 6",
663
+ "resource_type": "task",
664
+ "resource_subtype": "default_task"
665
+ },
666
+ {
667
+ "gid": "192021",
668
+ "name": "task 7",
669
+ "resource_type": "task",
670
+ "resource_subtype": "default_task"
671
+ },
672
+ {
673
+ "gid": "222324",
674
+ "name": "task 8",
675
+ "resource_type": "task",
676
+ "resource_subtype": "default_task"
677
+ },
678
+ {
679
+ "gid": "252627",
680
+ "name": "task 9",
681
+ "resource_type": "task",
682
+ "resource_subtype": "default_task"
683
+ },
684
+ {
685
+ "gid": "282930",
686
+ "name": "task 10",
687
+ "resource_type": "task",
688
+ "resource_subtype": "default_task"
689
+ },
690
+ {
691
+ "gid": "313233",
692
+ "name": "task 11",
693
+ "resource_type": "task",
694
+ "resource_subtype": "default_task"
695
+ },
696
+ ]
613
697
  ```
614
698
 
615
699
  EX: Pagination do something per page
@@ -623,28 +707,55 @@ token.accessToken = '<YOUR_ACCESS_TOKEN>';
623
707
  let tasksApiInstance = new Asana.TasksApi();
624
708
  let opts = {
625
709
  'project': "<YOUR_PROJECT_GID>",
626
- 'limit': 10
710
+ "limit": 5,
627
711
  };
628
712
 
629
- pageIndex = 1;
630
-
631
- tasksApiInstance.getTasks(opts).then(async (firstPage) => {
632
- // Do something with the first <LIMIT> results. EX: print out results
633
- console.log(`Page ${pageIndex}: ` + JSON.stringify(firstPage.data, null, 2));
713
+ let pageIndex = 1;
634
714
 
635
- // Get the next page
636
- let nextPage = await firstPage.nextPage();
637
- // Keep fetching for the next page until there are no more results
638
- while(nextPage.data) {
639
- // Do something with the next <LIMIT> results. EX: print out results
715
+ tasksApiInstance.getTasks(opts).then(async (response) => {
716
+ let page = response;
717
+ while(true) {
718
+ // Do something with the page results
719
+ // EX: print the name of the tasks on that page
720
+ console.log(`Page ${pageIndex}: `);
721
+ page.data.forEach(task => {
722
+ console.log(` ${task.name}`);
723
+ });
640
724
  pageIndex += 1;
641
- console.log(`Page ${pageIndex}: ` + JSON.stringify(nextPage.data, null, 2));
642
- // Get the next page
643
- nextPage = await nextPage.nextPage();
725
+
726
+ page = await page.nextPage();
727
+ // If the there is no data in the next page break from the loop
728
+ if (!page.data) {
729
+ break;
730
+ }
644
731
  }
645
732
  }, (error) => {
646
733
  console.error(error.response.body);
647
734
  });
735
+
736
+ ```
737
+
738
+ Sample output:
739
+
740
+ ```bash
741
+ Page 1:
742
+ task 1
743
+ task 2
744
+ task 3
745
+ task 4
746
+ task 5
747
+ Page 2:
748
+ task 6
749
+ task 7
750
+ task 8
751
+ task 9
752
+ task 10
753
+ Page 3:
754
+ task 11
755
+ task 12
756
+ task 13
757
+ task 14
758
+ task 15
648
759
  ```
649
760
 
650
761
  ### Turning off Pagination
@@ -1000,6 +1111,6 @@ client.callApi(
1000
1111
  ```
1001
1112
 
1002
1113
  [release-image]: https://img.shields.io/github/release/asana/node-asana.svg
1003
- [release-url]: https://github.com/Asana/node-asana/releases/tag/v3.0.2
1114
+ [release-url]: https://github.com/Asana/node-asana/releases/tag/v3.0.4
1004
1115
  [npm-image]: http://img.shields.io/npm/v/asana.svg?style=flat-square
1005
1116
  [npm-url]: https://www.npmjs.org/package/asana
@@ -393,22 +393,25 @@ EX: Pagination gather all resources
393
393
 
394
394
  let tasksApiInstance = new {{{moduleName}}}.TasksApi();
395
395
  let opts = {
396
- "project": "<YOUR_PROJECT_GID>"
397
- "limit": 100
396
+ "project": "<YOUR_PROJECT_GID>",
397
+ "limit": 100,
398
398
  };
399
399
 
400
400
  async function getAllTasks(opts) {
401
- let tasks = await tasksApiInstance.getTasks(opts).then(async (firstPage) => {
402
- let res = []
403
- res = res.concat(firstPage.data);
404
- // Get the next page
405
- let nextPage = await firstPage.nextPage();
406
- // Keep fetching for the next page until there are no more results
407
- while(nextPage.data) {
408
- res = res.concat(nextPage.data);
409
- nextPage = await nextPage.nextPage();
401
+ let tasks = await tasksApiInstance.getTasks(opts).then(async (response) => {
402
+ let result = [];
403
+ let page = response;
404
+ while(true) {
405
+ // Add items on page to list of results
406
+ result = result.concat(page.data);
407
+ // Fetch the next page
408
+ page = await page.nextPage();
409
+ // If the there is no data in the next page break from the loop
410
+ if (!page.data) {
411
+ break;
412
+ }
410
413
  }
411
- return res;
414
+ return result;
412
415
  }, (error) => {
413
416
  console.error(error.response.body);
414
417
  });
@@ -417,6 +420,79 @@ async function getAllTasks(opts) {
417
420
  }
418
421
 
419
422
  getAllTasks(opts);
423
+
424
+ ```
425
+
426
+ Sample output:
427
+ ```bash
428
+ Tasks: [
429
+ {
430
+ "gid": "123",
431
+ "name": "task 1",
432
+ "resource_type": "task",
433
+ "resource_subtype": "default_task"
434
+ },
435
+ {
436
+ "gid": "456",
437
+ "name": "task 2",
438
+ "resource_type": "task",
439
+ "resource_subtype": "default_task"
440
+ },
441
+ {
442
+ "gid": "789",
443
+ "name": "task 3",
444
+ "resource_type": "task",
445
+ "resource_subtype": "default_task"
446
+ },
447
+ {
448
+ "gid": "101112",
449
+ "name": "task 4",
450
+ "resource_type": "task",
451
+ "resource_subtype": "default_task"
452
+ },
453
+ {
454
+ "gid": "131415",
455
+ "name": "task 5",
456
+ "resource_type": "task",
457
+ "resource_subtype": "default_task"
458
+ },
459
+ {
460
+ "gid": "161718",
461
+ "name": "task 6",
462
+ "resource_type": "task",
463
+ "resource_subtype": "default_task"
464
+ },
465
+ {
466
+ "gid": "192021",
467
+ "name": "task 7",
468
+ "resource_type": "task",
469
+ "resource_subtype": "default_task"
470
+ },
471
+ {
472
+ "gid": "222324",
473
+ "name": "task 8",
474
+ "resource_type": "task",
475
+ "resource_subtype": "default_task"
476
+ },
477
+ {
478
+ "gid": "252627",
479
+ "name": "task 9",
480
+ "resource_type": "task",
481
+ "resource_subtype": "default_task"
482
+ },
483
+ {
484
+ "gid": "282930",
485
+ "name": "task 10",
486
+ "resource_type": "task",
487
+ "resource_subtype": "default_task"
488
+ },
489
+ {
490
+ "gid": "313233",
491
+ "name": "task 11",
492
+ "resource_type": "task",
493
+ "resource_subtype": "default_task"
494
+ },
495
+ ]
420
496
  ```
421
497
 
422
498
  EX: Pagination do something per page
@@ -426,28 +502,55 @@ EX: Pagination do something per page
426
502
  let tasksApiInstance = new {{{moduleName}}}.TasksApi();
427
503
  let opts = {
428
504
  'project': "<YOUR_PROJECT_GID>",
429
- 'limit': 10
505
+ "limit": 5,
430
506
  };
431
507
 
432
- pageIndex = 1;
433
-
434
- tasksApiInstance.getTasks(opts).then(async (firstPage) => {
435
- // Do something with the first <LIMIT> results. EX: print out results
436
- console.log(`Page ${pageIndex}: ` + JSON.stringify(firstPage.data, null, 2));
508
+ let pageIndex = 1;
437
509
 
438
- // Get the next page
439
- let nextPage = await firstPage.nextPage();
440
- // Keep fetching for the next page until there are no more results
441
- while(nextPage.data) {
442
- // Do something with the next <LIMIT> results. EX: print out results
510
+ tasksApiInstance.getTasks(opts).then(async (response) => {
511
+ let page = response;
512
+ while(true) {
513
+ // Do something with the page results
514
+ // EX: print the name of the tasks on that page
515
+ console.log(`Page ${pageIndex}: `);
516
+ page.data.forEach(task => {
517
+ console.log(` ${task.name}`);
518
+ });
443
519
  pageIndex += 1;
444
- console.log(`Page ${pageIndex}: ` + JSON.stringify(nextPage.data, null, 2));
445
- // Get the next page
446
- nextPage = await nextPage.nextPage();
520
+
521
+ page = await page.nextPage();
522
+ // If the there is no data in the next page break from the loop
523
+ if (!page.data) {
524
+ break;
525
+ }
447
526
  }
448
527
  }, (error) => {
449
528
  console.error(error.response.body);
450
529
  });
530
+
531
+ ```
532
+
533
+ Sample output:
534
+
535
+ ```bash
536
+ Page 1:
537
+ task 1
538
+ task 2
539
+ task 3
540
+ task 4
541
+ task 5
542
+ Page 2:
543
+ task 6
544
+ task 7
545
+ task 8
546
+ task 9
547
+ task 10
548
+ Page 3:
549
+ task 11
550
+ task 12
551
+ task 13
552
+ task 14
553
+ task 15
451
554
  ```
452
555
 
453
556
  ### Turning off Pagination
@@ -90,9 +90,9 @@ export class {{classname}} {
90
90
  let contentTypes = [{{#consumes}}'{{& mediaType}}'{{#hasMore}}, {{/hasMore}}{{/consumes}}];
91
91
  let accepts = [{{#produces}}'{{& mediaType}}'{{#hasMore}}, {{/hasMore}}{{/produces}}];
92
92
  let returnType = 'Blob';
93
-
93
+ {{#vendorExtensions.x-codegen-isArrayResponse}}
94
94
  // Check if RETURN_COLLECTION is set and return a collection object if it is
95
- if (this.apiClient.RETURN_COLLECTION && {{vendorExtensions.x-codegen-isArrayResponse}}) {
95
+ if (this.apiClient.RETURN_COLLECTION) {
96
96
  return Collection.fromApiClient(
97
97
  this.apiClient.callApi(
98
98
  '{{&path}}', '{{httpMethod}}',
@@ -114,13 +114,14 @@ export class {{classname}} {
114
114
  'returnType': returnType
115
115
  }
116
116
  )
117
- } else {
118
- return this.apiClient.callApi(
119
- '{{&path}}', '{{httpMethod}}',
120
- pathParams, queryParams, headerParams, formParams, postBody,
121
- authNames, contentTypes, accepts, returnType{{^usePromises}}, callback{{/usePromises}}
122
- );
123
117
  }
118
+ {{/vendorExtensions.x-codegen-isArrayResponse}}
119
+
120
+ return this.apiClient.callApi(
121
+ '{{&path}}', '{{httpMethod}}',
122
+ pathParams, queryParams, headerParams, formParams, postBody,
123
+ authNames, contentTypes, accepts, returnType{{^usePromises}}, callback{{/usePromises}}
124
+ );
124
125
  }
125
126
  {{#usePromises}}
126
127
  {{#emitJSDoc}}
@@ -136,16 +137,17 @@ export class {{classname}} {
136
137
  * @return {{braces "left"}}Promise{{braces "right"}} a {{braces "left"}}@link https://www.promisejs.org/|Promise{{braces "right"}}{{#returnType}}, with data of type {{braces "left"}}@link {{&vendorExtensions.x-jsdoc-type}}{{braces "right"}}{{/returnType}}{{/usePromises}}
137
138
  */
138
139
  {{/emitJSDoc}} {{operationId}}({{vendorExtensions.x-codegen-arg-list}}) {
139
-
140
+ {{#vendorExtensions.x-codegen-isArrayResponse}}
140
141
  // Check if RETURN_COLLECTION is set and return a collection object if it is
141
- if (this.apiClient.RETURN_COLLECTION && {{vendorExtensions.x-codegen-isArrayResponse}}) {
142
+ if (this.apiClient.RETURN_COLLECTION) {
142
143
  return this.{{operationId}}WithHttpInfo({{vendorExtensions.x-codegen-arg-list}})
143
- } else {
144
- return this.{{operationId}}WithHttpInfo({{vendorExtensions.x-codegen-arg-list}})
145
- .then(function(response_and_data) {
146
- return response_and_data.data;
147
- });
148
144
  }
145
+ {{/vendorExtensions.x-codegen-isArrayResponse}}
146
+
147
+ return this.{{operationId}}WithHttpInfo({{vendorExtensions.x-codegen-arg-list}})
148
+ .then(function(response_and_data) {
149
+ return response_and_data.data;
150
+ });
149
151
  }
150
152
  {{/usePromises}}
151
153
  {{/operation}}{{/operations}}