asana 3.0.2 → 3.0.3

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 (79) hide show
  1. package/.github/workflows/publish.yaml +78 -38
  2. package/.swagger-codegen/VERSION +1 -1
  3. package/README.md +135 -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/AttachmentsApi.js +22 -95
  8. package/dist/api/AuditLogAPIApi.js +10 -14
  9. package/dist/api/BatchAPIApi.js +10 -14
  10. package/dist/api/CustomFieldSettingsApi.js +16 -23
  11. package/dist/api/CustomFieldsApi.js +38 -203
  12. package/dist/api/EventsApi.js +12 -16
  13. package/dist/api/GoalRelationshipsApi.js +26 -122
  14. package/dist/api/GoalsApi.js +48 -239
  15. package/dist/api/JobsApi.js +8 -32
  16. package/dist/api/MembershipsApi.js +73 -99
  17. package/dist/api/OrganizationExportsApi.js +12 -59
  18. package/dist/api/PortfolioMembershipsApi.js +20 -50
  19. package/dist/api/PortfoliosApi.js +56 -293
  20. package/dist/api/ProjectBriefsApi.js +20 -113
  21. package/dist/api/ProjectMembershipsApi.js +14 -41
  22. package/dist/api/ProjectStatusesApi.js +22 -95
  23. package/dist/api/ProjectTemplatesApi.js +28 -104
  24. package/dist/api/ProjectsApi.js +88 -446
  25. package/dist/api/RulesApi.js +8 -32
  26. package/dist/api/SectionsApi.js +34 -176
  27. package/dist/api/StatusUpdatesApi.js +22 -95
  28. package/dist/api/StoriesApi.js +26 -122
  29. package/dist/api/TagsApi.js +42 -167
  30. package/dist/api/TaskTemplatesApi.js +63 -72
  31. package/dist/api/TasksApi.js +173 -544
  32. package/dist/api/TeamMembershipsApi.js +26 -59
  33. package/dist/api/TeamsApi.js +36 -158
  34. package/dist/api/TimePeriodsApi.js +14 -41
  35. package/dist/api/TimeTrackingEntriesApi.js +26 -122
  36. package/dist/api/TypeaheadApi.js +12 -16
  37. package/dist/api/UserTaskListsApi.js +12 -59
  38. package/dist/api/UsersApi.js +32 -68
  39. package/dist/api/WebhooksApi.js +26 -122
  40. package/dist/api/WorkspaceMembershipsApi.js +20 -50
  41. package/dist/api/WorkspacesApi.js +26 -122
  42. package/package.json +1 -1
  43. package/src/ApiClient.js +4 -4
  44. package/src/api/AttachmentsApi.js +42 -134
  45. package/src/api/AuditLogAPIApi.js +15 -17
  46. package/src/api/BatchAPIApi.js +15 -17
  47. package/src/api/CustomFieldSettingsApi.js +28 -32
  48. package/src/api/CustomFieldsApi.js +78 -290
  49. package/src/api/EventsApi.js +17 -19
  50. package/src/api/GoalRelationshipsApi.js +51 -173
  51. package/src/api/GoalsApi.js +100 -344
  52. package/src/api/JobsApi.js +11 -41
  53. package/src/api/MembershipsApi.js +105 -138
  54. package/src/api/OrganizationExportsApi.js +20 -80
  55. package/src/api/PortfolioMembershipsApi.js +37 -71
  56. package/src/api/PortfoliosApi.js +118 -422
  57. package/src/api/ProjectBriefsApi.js +38 -158
  58. package/src/api/ProjectMembershipsApi.js +24 -56
  59. package/src/api/ProjectStatusesApi.js +42 -134
  60. package/src/api/ProjectTemplatesApi.js +55 -149
  61. package/src/api/ProjectsApi.js +189 -647
  62. package/src/api/RulesApi.js +11 -41
  63. package/src/api/SectionsApi.js +69 -251
  64. package/src/api/StatusUpdatesApi.js +42 -134
  65. package/src/api/StoriesApi.js +51 -173
  66. package/src/api/TagsApi.js +86 -242
  67. package/src/api/TaskTemplatesApi.js +86 -95
  68. package/src/api/TasksApi.js +330 -799
  69. package/src/api/TeamMembershipsApi.js +50 -86
  70. package/src/api/TeamsApi.js +73 -227
  71. package/src/api/TimePeriodsApi.js +24 -56
  72. package/src/api/TimeTrackingEntriesApi.js +51 -173
  73. package/src/api/TypeaheadApi.js +17 -19
  74. package/src/api/UserTaskListsApi.js +20 -80
  75. package/src/api/UsersApi.js +63 -101
  76. package/src/api/WebhooksApi.js +51 -173
  77. package/src/api/WorkspaceMembershipsApi.js +37 -71
  78. package/src/api/WorkspacesApi.js +51 -173
  79. package/src/index.js +2 -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.3
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.3/asana-min.js"></script>
22
22
  ```
23
23
 
24
24
  Example usage (**NOTE**: be careful not to expose your access token):
@@ -232,6 +232,7 @@ Class | Method | HTTP request | Description
232
232
  *Asana.MembershipsApi* | [**deleteMembership**](docs/MembershipsApi.md#deleteMembership) | **DELETE** /memberships/{membership_gid} | Delete a membership
233
233
  *Asana.MembershipsApi* | [**getMembership**](docs/MembershipsApi.md#getMembership) | **GET** /memberships/{membership_gid} | Get a membership
234
234
  *Asana.MembershipsApi* | [**getMemberships**](docs/MembershipsApi.md#getMemberships) | **GET** /memberships | Get multiple memberships
235
+ *Asana.MembershipsApi* | [**updateMembership**](docs/MembershipsApi.md#updateMembership) | **PUT** /memberships/{membership_gid} | Update a membership
235
236
  *Asana.OrganizationExportsApi* | [**createOrganizationExport**](docs/OrganizationExportsApi.md#createOrganizationExport) | **POST** /organization_exports | Create an organization export request
236
237
  *Asana.OrganizationExportsApi* | [**getOrganizationExport**](docs/OrganizationExportsApi.md#getOrganizationExport) | **GET** /organization_exports/{organization_export_gid} | Get details on an org export request
237
238
  *Asana.PortfolioMembershipsApi* | [**getPortfolioMembership**](docs/PortfolioMembershipsApi.md#getPortfolioMembership) | **GET** /portfolio_memberships/{portfolio_membership_gid} | Get a portfolio membership
@@ -308,6 +309,7 @@ Class | Method | HTTP request | Description
308
309
  *Asana.TagsApi* | [**getTagsForTask**](docs/TagsApi.md#getTagsForTask) | **GET** /tasks/{task_gid}/tags | Get a task&#x27;s tags
309
310
  *Asana.TagsApi* | [**getTagsForWorkspace**](docs/TagsApi.md#getTagsForWorkspace) | **GET** /workspaces/{workspace_gid}/tags | Get tags in a workspace
310
311
  *Asana.TagsApi* | [**updateTag**](docs/TagsApi.md#updateTag) | **PUT** /tags/{tag_gid} | Update a tag
312
+ *Asana.TaskTemplatesApi* | [**deleteTaskTemplate**](docs/TaskTemplatesApi.md#deleteTaskTemplate) | **DELETE** /task_templates/{task_template_gid} | Delete a task template
311
313
  *Asana.TaskTemplatesApi* | [**getTaskTemplate**](docs/TaskTemplatesApi.md#getTaskTemplate) | **GET** /task_templates/{task_template_gid} | Get a task template
312
314
  *Asana.TaskTemplatesApi* | [**getTaskTemplates**](docs/TaskTemplatesApi.md#getTaskTemplates) | **GET** /task_templates | Get multiple task templates
313
315
  *Asana.TaskTemplatesApi* | [**instantiateTask**](docs/TaskTemplatesApi.md#instantiateTask) | **POST** /task_templates/{task_template_gid}/instantiateTask | Instantiate a task from a task template
@@ -324,6 +326,7 @@ Class | Method | HTTP request | Description
324
326
  *Asana.TasksApi* | [**getDependentsForTask**](docs/TasksApi.md#getDependentsForTask) | **GET** /tasks/{task_gid}/dependents | Get dependents from a task
325
327
  *Asana.TasksApi* | [**getSubtasksForTask**](docs/TasksApi.md#getSubtasksForTask) | **GET** /tasks/{task_gid}/subtasks | Get subtasks from a task
326
328
  *Asana.TasksApi* | [**getTask**](docs/TasksApi.md#getTask) | **GET** /tasks/{task_gid} | Get a task
329
+ *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
330
  *Asana.TasksApi* | [**getTasks**](docs/TasksApi.md#getTasks) | **GET** /tasks | Get multiple tasks
328
331
  *Asana.TasksApi* | [**getTasksForProject**](docs/TasksApi.md#getTasksForProject) | **GET** /projects/{project_gid}/tasks | Get tasks from a project
329
332
  *Asana.TasksApi* | [**getTasksForSection**](docs/TasksApi.md#getTasksForSection) | **GET** /sections/{section_gid}/tasks | Get tasks from a section
@@ -586,22 +589,25 @@ token.accessToken = '<YOUR_ACCESS_TOKEN>';
586
589
 
587
590
  let tasksApiInstance = new Asana.TasksApi();
588
591
  let opts = {
589
- "project": "<YOUR_PROJECT_GID>"
590
- "limit": 100
592
+ "project": "<YOUR_PROJECT_GID>",
593
+ "limit": 100,
591
594
  };
592
595
 
593
596
  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();
597
+ let tasks = await tasksApiInstance.getTasks(opts).then(async (response) => {
598
+ let result = [];
599
+ let page = response;
600
+ while(true) {
601
+ // Add items on page to list of results
602
+ result = result.concat(page.data);
603
+ // Fetch the next page
604
+ page = await page.nextPage();
605
+ // If the there is no data in the next page break from the loop
606
+ if (!page.data) {
607
+ break;
608
+ }
603
609
  }
604
- return res;
610
+ return result;
605
611
  }, (error) => {
606
612
  console.error(error.response.body);
607
613
  });
@@ -610,6 +616,79 @@ async function getAllTasks(opts) {
610
616
  }
611
617
 
612
618
  getAllTasks(opts);
619
+
620
+ ```
621
+
622
+ Sample output:
623
+ ```bash
624
+ Tasks: [
625
+ {
626
+ "gid": "123",
627
+ "name": "task 1",
628
+ "resource_type": "task",
629
+ "resource_subtype": "default_task"
630
+ },
631
+ {
632
+ "gid": "456",
633
+ "name": "task 2",
634
+ "resource_type": "task",
635
+ "resource_subtype": "default_task"
636
+ },
637
+ {
638
+ "gid": "789",
639
+ "name": "task 3",
640
+ "resource_type": "task",
641
+ "resource_subtype": "default_task"
642
+ },
643
+ {
644
+ "gid": "101112",
645
+ "name": "task 4",
646
+ "resource_type": "task",
647
+ "resource_subtype": "default_task"
648
+ },
649
+ {
650
+ "gid": "131415",
651
+ "name": "task 5",
652
+ "resource_type": "task",
653
+ "resource_subtype": "default_task"
654
+ },
655
+ {
656
+ "gid": "161718",
657
+ "name": "task 6",
658
+ "resource_type": "task",
659
+ "resource_subtype": "default_task"
660
+ },
661
+ {
662
+ "gid": "192021",
663
+ "name": "task 7",
664
+ "resource_type": "task",
665
+ "resource_subtype": "default_task"
666
+ },
667
+ {
668
+ "gid": "222324",
669
+ "name": "task 8",
670
+ "resource_type": "task",
671
+ "resource_subtype": "default_task"
672
+ },
673
+ {
674
+ "gid": "252627",
675
+ "name": "task 9",
676
+ "resource_type": "task",
677
+ "resource_subtype": "default_task"
678
+ },
679
+ {
680
+ "gid": "282930",
681
+ "name": "task 10",
682
+ "resource_type": "task",
683
+ "resource_subtype": "default_task"
684
+ },
685
+ {
686
+ "gid": "313233",
687
+ "name": "task 11",
688
+ "resource_type": "task",
689
+ "resource_subtype": "default_task"
690
+ },
691
+ ]
613
692
  ```
614
693
 
615
694
  EX: Pagination do something per page
@@ -623,28 +702,55 @@ token.accessToken = '<YOUR_ACCESS_TOKEN>';
623
702
  let tasksApiInstance = new Asana.TasksApi();
624
703
  let opts = {
625
704
  'project': "<YOUR_PROJECT_GID>",
626
- 'limit': 10
705
+ "limit": 5,
627
706
  };
628
707
 
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));
708
+ let pageIndex = 1;
634
709
 
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
710
+ tasksApiInstance.getTasks(opts).then(async (response) => {
711
+ let page = response;
712
+ while(true) {
713
+ // Do something with the page results
714
+ // EX: print the name of the tasks on that page
715
+ console.log(`Page ${pageIndex}: `);
716
+ page.data.forEach(task => {
717
+ console.log(` ${task.name}`);
718
+ });
640
719
  pageIndex += 1;
641
- console.log(`Page ${pageIndex}: ` + JSON.stringify(nextPage.data, null, 2));
642
- // Get the next page
643
- nextPage = await nextPage.nextPage();
720
+
721
+ page = await page.nextPage();
722
+ // If the there is no data in the next page break from the loop
723
+ if (!page.data) {
724
+ break;
725
+ }
644
726
  }
645
727
  }, (error) => {
646
728
  console.error(error.response.body);
647
729
  });
730
+
731
+ ```
732
+
733
+ Sample output:
734
+
735
+ ```bash
736
+ Page 1:
737
+ task 1
738
+ task 2
739
+ task 3
740
+ task 4
741
+ task 5
742
+ Page 2:
743
+ task 6
744
+ task 7
745
+ task 8
746
+ task 9
747
+ task 10
748
+ Page 3:
749
+ task 11
750
+ task 12
751
+ task 13
752
+ task 14
753
+ task 15
648
754
  ```
649
755
 
650
756
  ### Turning off Pagination
@@ -1000,6 +1106,6 @@ client.callApi(
1000
1106
  ```
1001
1107
 
1002
1108
  [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
1109
+ [release-url]: https://github.com/Asana/node-asana/releases/tag/v3.0.3
1004
1110
  [npm-image]: http://img.shields.io/npm/v/asana.svg?style=flat-square
1005
1111
  [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}}