@appsemble/cli 0.29.11 → 0.30.1

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 (153) hide show
  1. package/README.md +10 -10
  2. package/commands/app/create.d.ts +1 -1
  3. package/commands/app/create.js +5 -5
  4. package/commands/{team → group}/create.d.ts +3 -3
  5. package/commands/{team → group}/create.js +5 -5
  6. package/commands/{team → group}/delete.d.ts +3 -3
  7. package/commands/{team → group}/delete.js +5 -5
  8. package/commands/{team → group}/index.d.ts +2 -2
  9. package/commands/{team → group}/index.js +4 -4
  10. package/commands/{team → group}/member/delete.d.ts +3 -3
  11. package/commands/{team → group}/member/delete.js +5 -5
  12. package/commands/{team → group}/member/index.d.ts +1 -1
  13. package/commands/{team → group}/member/index.js +1 -3
  14. package/commands/{team → group}/member/invite.d.ts +3 -3
  15. package/commands/{team → group}/member/invite.js +5 -5
  16. package/commands/{team → group}/update.d.ts +3 -3
  17. package/commands/{team → group}/update.js +7 -7
  18. package/commands/migrateAppDefinitions.d.ts +13 -0
  19. package/commands/migrateAppDefinitions.js +73 -0
  20. package/commands/serve.d.ts +1 -1
  21. package/commands/serve.js +16 -16
  22. package/index.js +4 -2
  23. package/lib/app.js +13 -3
  24. package/lib/app.test.js +10 -7
  25. package/lib/asset.js +4 -2
  26. package/lib/asset.test.js +3 -1
  27. package/lib/block.test.js +2 -1
  28. package/lib/createServers.js +3 -1
  29. package/lib/group.d.ts +61 -0
  30. package/lib/group.js +55 -0
  31. package/lib/{team.test.js → group.test.js} +121 -137
  32. package/lib/organization.test.js +5 -4
  33. package/lib/resource.js +3 -1
  34. package/lib/resource.test.js +2 -1
  35. package/lib/serverImport.d.ts +1 -1
  36. package/package.json +6 -6
  37. package/server/argv.d.ts +4 -4
  38. package/server/argv.js +1 -1
  39. package/server/controllers/apps/actions/index.d.ts +5 -0
  40. package/server/controllers/apps/actions/index.js +6 -0
  41. package/server/controllers/apps/actions/proxyDelete.d.ts +2 -0
  42. package/server/controllers/apps/actions/proxyDelete.js +4 -0
  43. package/server/controllers/apps/actions/proxyGet.d.ts +2 -0
  44. package/server/controllers/apps/actions/proxyGet.js +4 -0
  45. package/server/controllers/apps/actions/proxyPatch.d.ts +2 -0
  46. package/server/controllers/apps/actions/proxyPatch.js +4 -0
  47. package/server/controllers/apps/actions/proxyPost.d.ts +2 -0
  48. package/server/controllers/apps/actions/proxyPost.js +4 -0
  49. package/server/controllers/apps/actions/proxyPut.d.ts +2 -0
  50. package/server/controllers/apps/actions/proxyPut.js +4 -0
  51. package/server/controllers/apps/index.d.ts +2 -0
  52. package/server/controllers/apps/index.js +3 -0
  53. package/server/controllers/apps/members/current/getCurrentAppMember.d.ts +2 -0
  54. package/server/controllers/apps/members/current/getCurrentAppMember.js +4 -0
  55. package/server/controllers/apps/members/current/index.d.ts +1 -0
  56. package/server/controllers/apps/members/current/index.js +2 -0
  57. package/server/controllers/apps/members/index.d.ts +1 -0
  58. package/server/controllers/apps/members/index.js +2 -0
  59. package/server/controllers/common/apps/assets/getAppAssetById.d.ts +2 -0
  60. package/server/controllers/common/apps/assets/getAppAssetById.js +4 -0
  61. package/server/controllers/common/apps/assets/index.d.ts +1 -0
  62. package/server/controllers/common/apps/assets/index.js +2 -0
  63. package/server/controllers/common/apps/groups/getAppGroups.d.ts +2 -0
  64. package/server/controllers/common/apps/groups/getAppGroups.js +4 -0
  65. package/server/controllers/common/apps/groups/index.d.ts +1 -0
  66. package/server/controllers/common/apps/groups/index.js +2 -0
  67. package/server/controllers/common/apps/index.d.ts +5 -0
  68. package/server/controllers/common/apps/index.js +6 -0
  69. package/server/controllers/common/apps/messages/getAppMessages.d.ts +2 -0
  70. package/server/controllers/common/apps/messages/getAppMessages.js +4 -0
  71. package/server/controllers/common/apps/messages/index.d.ts +1 -0
  72. package/server/controllers/common/apps/messages/index.js +2 -0
  73. package/server/controllers/common/apps/resources/countAppResources.d.ts +2 -0
  74. package/server/controllers/common/apps/resources/countAppResources.js +4 -0
  75. package/server/controllers/common/apps/resources/createAppResource.d.ts +2 -0
  76. package/server/controllers/common/apps/resources/createAppResource.js +4 -0
  77. package/server/controllers/common/apps/resources/deleteAppResource.d.ts +2 -0
  78. package/server/controllers/common/apps/resources/deleteAppResource.js +4 -0
  79. package/server/controllers/common/apps/resources/getAppResourceById.d.ts +2 -0
  80. package/server/controllers/common/apps/resources/getAppResourceById.js +4 -0
  81. package/server/controllers/common/apps/resources/index.d.ts +6 -0
  82. package/server/controllers/common/apps/resources/index.js +7 -0
  83. package/server/controllers/common/apps/resources/queryAppResources.d.ts +2 -0
  84. package/server/controllers/common/apps/resources/queryAppResources.js +4 -0
  85. package/server/controllers/common/apps/resources/updateAppResource.d.ts +2 -0
  86. package/server/controllers/common/apps/resources/updateAppResource.js +4 -0
  87. package/server/controllers/common/apps/variables/getAppVariables.js +4 -0
  88. package/server/controllers/common/apps/variables/index.d.ts +1 -0
  89. package/server/controllers/common/apps/variables/index.js +2 -0
  90. package/server/controllers/common/index.d.ts +1 -0
  91. package/server/controllers/common/index.js +2 -0
  92. package/server/controllers/index.d.ts +3 -8
  93. package/server/controllers/index.js +3 -8
  94. package/server/controllers/main/apps/assets/createAppAsset.d.ts +2 -0
  95. package/server/controllers/main/apps/assets/createAppAsset.js +4 -0
  96. package/server/controllers/main/apps/assets/index.d.ts +1 -0
  97. package/server/controllers/main/apps/assets/index.js +2 -0
  98. package/server/controllers/main/apps/index.d.ts +1 -0
  99. package/server/controllers/main/apps/index.js +2 -0
  100. package/server/controllers/main/index.d.ts +1 -0
  101. package/server/controllers/main/index.js +2 -0
  102. package/server/options/checkAppMemberAppPermissions.d.ts +1 -0
  103. package/server/options/checkAppMemberAppPermissions.js +4 -0
  104. package/server/options/checkAppPermissions.d.ts +1 -0
  105. package/server/options/checkAppPermissions.js +4 -0
  106. package/server/options/checkAuthSubjectAppPermissions.d.ts +1 -0
  107. package/server/options/checkAuthSubjectAppPermissions.js +4 -0
  108. package/server/options/checkUserOrganizationPermissions.d.ts +1 -0
  109. package/server/options/checkUserOrganizationPermissions.js +4 -0
  110. package/server/options/getAppGroups.d.ts +2 -0
  111. package/server/options/getAppGroups.js +4 -0
  112. package/server/options/getCurrentAppMember.d.ts +3 -0
  113. package/server/options/getCurrentAppMember.js +4 -0
  114. package/server/options/index.d.ts +6 -5
  115. package/server/options/index.js +6 -5
  116. package/server/options/options.js +7 -6
  117. package/templates/apps/empty/app-definition.yaml +2 -2
  118. package/templates/blocks/mini-jsx/package.json +1 -1
  119. package/templates/blocks/preact/package.json +2 -2
  120. package/templates/blocks/vanilla/package.json +1 -1
  121. package/commands/team/member/update.d.ts +0 -16
  122. package/commands/team/member/update.js +0 -46
  123. package/lib/team.d.ts +0 -61
  124. package/lib/team.js +0 -83
  125. package/server/controllers/action.d.ts +0 -6
  126. package/server/controllers/action.js +0 -8
  127. package/server/controllers/appMembers.d.ts +0 -2
  128. package/server/controllers/appMembers.js +0 -4
  129. package/server/controllers/appMessages.d.ts +0 -2
  130. package/server/controllers/appMessages.js +0 -4
  131. package/server/controllers/appVariables.js +0 -4
  132. package/server/controllers/assets.d.ts +0 -4
  133. package/server/controllers/assets.js +0 -6
  134. package/server/controllers/oauth2Provider.d.ts +0 -2
  135. package/server/controllers/oauth2Provider.js +0 -4
  136. package/server/controllers/resources.d.ts +0 -7
  137. package/server/controllers/resources.js +0 -9
  138. package/server/controllers/teams.d.ts +0 -2
  139. package/server/controllers/teams.js +0 -4
  140. package/server/options/checkRole.d.ts +0 -1
  141. package/server/options/checkRole.js +0 -2
  142. package/server/options/checkRole.test.d.ts +0 -1
  143. package/server/options/checkRole.test.js +0 -13
  144. package/server/options/getAppMembers.d.ts +0 -3
  145. package/server/options/getAppMembers.js +0 -4
  146. package/server/options/getAppTeams.d.ts +0 -2
  147. package/server/options/getAppTeams.js +0 -4
  148. package/server/options/getAppUserInfo.d.ts +0 -3
  149. package/server/options/getAppUserInfo.js +0 -4
  150. package/server/options/verifyResourceActionPermission.d.ts +0 -1
  151. package/server/options/verifyResourceActionPermission.js +0 -2
  152. /package/lib/{team.test.d.ts → group.test.d.ts} +0 -0
  153. /package/server/controllers/{appVariables.d.ts → common/apps/variables/getAppVariables.d.ts} +0 -0
package/lib/app.js CHANGED
@@ -278,7 +278,7 @@ export async function publishSeedResources(path, app, remote) {
278
278
  if (existsSync(resourcesPath)) {
279
279
  logger.info(`Deleting existing seed resources from app ${app.id}`);
280
280
  try {
281
- await axios.delete(`/api/apps/${app.id}/seed-resources`, { baseURL: remote });
281
+ await axios.delete(`/api/apps/${app.id}/resources`, { baseURL: remote });
282
282
  const resourceFiles = await readdir(resourcesPath, { withFileTypes: true });
283
283
  const resourcesToPublish = [];
284
284
  const publishedResourcesIds = {};
@@ -328,7 +328,11 @@ export async function publishSeedAssets(path, app, remote, assetsClonable) {
328
328
  if (existsSync(assetsPath)) {
329
329
  logger.info(`Deleting existing seed assets from app ${app.id}`);
330
330
  try {
331
- await axios.delete(`/api/apps/${app.id}/seed-assets`, { baseURL: remote });
331
+ await axios.delete(`/api/apps/${app.id}/assets`, {
332
+ data: [],
333
+ baseURL: remote,
334
+ params: { seed: true },
335
+ });
332
336
  const assetFiles = await readdir(assetsPath);
333
337
  const normalizedPaths = assetFiles.map((assetFile) => normalizePath(join(assetsPath, assetFile)));
334
338
  const files = await fg(normalizedPaths, { absolute: true, onlyFiles: true });
@@ -804,6 +808,9 @@ export async function publishApp({ clientCredentials, context, dryRun, modifyCon
804
808
  if (resources) {
805
809
  authScope += ' resources:write';
806
810
  }
811
+ if (assets) {
812
+ authScope += ' assets:write';
813
+ }
807
814
  await authenticate(remote, authScope, clientCredentials);
808
815
  let data;
809
816
  try {
@@ -852,7 +859,7 @@ export async function publishApp({ clientCredentials, context, dryRun, modifyCon
852
859
  if (Array.isArray(rcCollections)) {
853
860
  for (const collectionId of rcCollections) {
854
861
  try {
855
- await axios.post(`/api/appCollections/${collectionId}/apps`, { AppId: data.id }, {
862
+ await axios.post(`/api/app-collections/${collectionId}/apps`, { AppId: data.id }, {
856
863
  baseURL: remote,
857
864
  });
858
865
  logger.info(`Successfully added app to collection ${collectionId}`);
@@ -961,6 +968,9 @@ export async function updateApp({ clientCredentials, context, force, path, ...op
961
968
  if (resources) {
962
969
  authScope += ' resources:write';
963
970
  }
971
+ if (assets) {
972
+ authScope += ' assets:write';
973
+ }
964
974
  await authenticate(remote, authScope, clientCredentials);
965
975
  if (appLock) {
966
976
  logger.info(`Setting AppLock to ${appLock}`);
package/lib/app.test.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { writeFile } from 'node:fs/promises';
2
2
  import { readFixture, resolveFixture } from '@appsemble/node-utils';
3
3
  import { createServer, createTestUser, models, setArgv, useTestDatabase } from '@appsemble/server';
4
+ import { PredefinedOrganizationRole } from '@appsemble/types';
4
5
  import { ISODateTimePattern } from '@appsemble/utils';
5
6
  import { setTestApp } from 'axios-test-instance';
6
7
  import FormData from 'form-data';
@@ -32,7 +33,7 @@ beforeEach(async () => {
32
33
  await OrganizationMember.create({
33
34
  OrganizationId: organization.id,
34
35
  UserId: user.id,
35
- role: 'Owner',
36
+ role: PredefinedOrganizationRole.Owner,
36
37
  });
37
38
  await Organization.create({ id: 'appsemble', name: 'Appsemble' });
38
39
  await BlockVersion.create({
@@ -212,7 +213,7 @@ describe('publishApp', () => {
212
213
  });
213
214
  it('should publish app with resources and assets', async () => {
214
215
  vi.useRealTimers();
215
- const clientCredentials = await authorizeCLI('apps:write resources:write', testApp);
216
+ const clientCredentials = await authorizeCLI('apps:write resources:write assets:write', testApp);
216
217
  await publishApp({
217
218
  path: resolveFixture('apps/test'),
218
219
  organization: organization.id,
@@ -367,7 +368,7 @@ describe('publishApp', () => {
367
368
  visibility: 'public',
368
369
  });
369
370
  vi.useRealTimers();
370
- const clientCredentials = await authorizeCLI('apps:write resources:write', testApp);
371
+ const clientCredentials = await authorizeCLI('apps:write resources:write assets:write', testApp);
371
372
  await publishApp({
372
373
  path: resolveFixture('apps/test'),
373
374
  organization: organization.id,
@@ -526,7 +527,7 @@ describe('publishApp', () => {
526
527
  });
527
528
  it('should publish app with app variant patches applied', async () => {
528
529
  vi.useRealTimers();
529
- const clientCredentials = await authorizeCLI('apps:write resources:write', testApp);
530
+ const clientCredentials = await authorizeCLI('apps:write resources:write assets:write', testApp);
530
531
  await publishApp({
531
532
  path: resolveFixture('apps/test'),
532
533
  organization: organization.id,
@@ -752,6 +753,7 @@ describe('publishApp', () => {
752
753
  });
753
754
  expect(appSamlSecret.toJSON()).toStrictEqual({
754
755
  emailAttribute: 'email',
756
+ emailVerifiedAttribute: null,
755
757
  entityId: 'http://localhost:1234',
756
758
  icon: 'redhat',
757
759
  id: 1,
@@ -987,7 +989,7 @@ describe('updateApp', () => {
987
989
  });
988
990
  it('should update app with resources and assets', async () => {
989
991
  vi.useRealTimers();
990
- const clientCredentials = await authorizeCLI('apps:write resources:write', testApp);
992
+ const clientCredentials = await authorizeCLI('apps:write resources:write assets:write', testApp);
991
993
  await updateApp({
992
994
  id: app.id,
993
995
  path: resolveFixture('apps/test'),
@@ -1143,7 +1145,7 @@ describe('updateApp', () => {
1143
1145
  visibility: 'public',
1144
1146
  });
1145
1147
  vi.useRealTimers();
1146
- const clientCredentials = await authorizeCLI('apps:write resources:write', testApp);
1148
+ const clientCredentials = await authorizeCLI('apps:write resources:write assets:write', testApp);
1147
1149
  await updateApp({
1148
1150
  path: resolveFixture('apps/test'),
1149
1151
  id: app.id,
@@ -1304,7 +1306,7 @@ describe('updateApp', () => {
1304
1306
  });
1305
1307
  it('should update app with app variant patches applied', async () => {
1306
1308
  vi.useRealTimers();
1307
- const clientCredentials = await authorizeCLI('apps:write resources:write', testApp);
1309
+ const clientCredentials = await authorizeCLI('apps:write resources:write assets:write', testApp);
1308
1310
  await updateApp({
1309
1311
  path: resolveFixture('apps/test'),
1310
1312
  id: app.id,
@@ -1532,6 +1534,7 @@ describe('updateApp', () => {
1532
1534
  });
1533
1535
  expect(appSamlSecret.toJSON()).toStrictEqual({
1534
1536
  emailAttribute: 'email',
1537
+ emailVerifiedAttribute: null,
1535
1538
  entityId: 'http://localhost:1234',
1536
1539
  icon: 'redhat',
1537
1540
  id: 1,
package/lib/asset.js CHANGED
@@ -12,8 +12,10 @@ export async function publishAsset({ appId, clonable, name, path, remote, seed,
12
12
  if (name) {
13
13
  formData.append('name', normalize(name));
14
14
  }
15
- const endpoint = `/api/apps/${appId}/${seed ? 'seed-' : ''}assets`;
16
- const { data: { id }, } = await axios.post(endpoint, formData, { baseURL: remote });
15
+ const { data: { id }, } = await axios.post(`/api/apps/${appId}/assets`, formData, {
16
+ baseURL: remote,
17
+ params: { seed },
18
+ });
17
19
  logger.info(`Published asset ${id}${name ? ` with name ${normalize(name)}` : ''}`);
18
20
  }
19
21
  catch (error) {
package/lib/asset.test.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { resolveFixture } from '@appsemble/node-utils';
2
2
  import { createServer, createTestUser, models, setArgv, useTestDatabase } from '@appsemble/server';
3
+ import { PredefinedOrganizationRole } from '@appsemble/types';
3
4
  import { setTestApp } from 'axios-test-instance';
4
5
  import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
5
6
  import { publishAsset } from './asset.js';
@@ -29,7 +30,7 @@ beforeEach(async () => {
29
30
  await OrganizationMember.create({
30
31
  OrganizationId: organization.id,
31
32
  UserId: user.id,
32
- role: 'Owner',
33
+ role: PredefinedOrganizationRole.Owner,
33
34
  });
34
35
  await Organization.create({ id: 'appsemble', name: 'Appsemble' });
35
36
  });
@@ -63,6 +64,7 @@ describe('publishAsset', () => {
63
64
  {
64
65
  "AppId": 1,
65
66
  "AppMemberId": null,
67
+ "GroupId": null,
66
68
  "ResourceId": null,
67
69
  "clonable": false,
68
70
  "created": 1970-01-01T00:00:00.000Z,
package/lib/block.test.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { resolveFixture } from '@appsemble/node-utils';
2
2
  import { createServer, createTestUser, models, setArgv, useTestDatabase } from '@appsemble/server';
3
+ import { PredefinedOrganizationRole } from '@appsemble/types';
3
4
  import { setTestApp } from 'axios-test-instance';
4
5
  import concat from 'concat-stream';
5
6
  import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
@@ -31,7 +32,7 @@ beforeEach(async () => {
31
32
  await OrganizationMember.create({
32
33
  OrganizationId: organization.id,
33
34
  UserId: user.id,
34
- role: 'Owner',
35
+ role: PredefinedOrganizationRole.Owner,
35
36
  });
36
37
  await Organization.create({ id: 'appsemble', name: 'Appsemble' });
37
38
  });
@@ -36,7 +36,9 @@ export function createApiServer({ context }) {
36
36
  app.use(compress());
37
37
  }
38
38
  app.use(compose([
39
- conditional((ctx) => ctx.path.startsWith('/api') || ctx.path === '/oauth2/token', cors()),
39
+ conditional((ctx) => ctx.path.startsWith('/api') ||
40
+ ctx.path === '/auth/oauth2/token' ||
41
+ /\/apps\/\d+\/auth\/oauth2\/token/.test(ctx.path), cors()),
40
42
  koas(api(version, argv), [
41
43
  parameters(),
42
44
  bodyParser(),
package/lib/group.d.ts ADDED
@@ -0,0 +1,61 @@
1
+ import { type AppRole } from '@appsemble/types';
2
+ interface SharedGroupParams {
3
+ /**
4
+ * The ID of the app to create the group for.
5
+ */
6
+ appId: number;
7
+ /**
8
+ * The remote server to create the group on.
9
+ */
10
+ remote: string;
11
+ /**
12
+ * The client credentials used to authenticate
13
+ */
14
+ clientCredentials?: string;
15
+ }
16
+ interface SharedExistingGroupParams extends SharedGroupParams {
17
+ /**
18
+ * The ID of the group.
19
+ */
20
+ id: number;
21
+ }
22
+ interface SharedGroupMemberParams extends SharedExistingGroupParams {
23
+ /**
24
+ * The ID or email address of the group member.
25
+ */
26
+ user: string;
27
+ }
28
+ interface UpdateGroupMemberParams extends SharedGroupMemberParams {
29
+ /**
30
+ * The new role of the group member.
31
+ */
32
+ role: AppRole;
33
+ }
34
+ interface UpdateGroupParams extends SharedExistingGroupParams {
35
+ /**
36
+ * The new name of the group.
37
+ */
38
+ name?: string;
39
+ /**
40
+ * The list of annotations to apply in key=value format.
41
+ */
42
+ annotations?: string[];
43
+ }
44
+ interface CreateGroupParams extends SharedGroupParams {
45
+ /**
46
+ * The name of the group.
47
+ */
48
+ name: string;
49
+ /**
50
+ * The list of annotations to apply in key=value format.
51
+ */
52
+ annotations?: string[];
53
+ }
54
+ export declare function resolveAnnotations(annotations: string[]): Record<string, string>;
55
+ export declare function createGroup({ annotations, appId, clientCredentials, name, remote, }: CreateGroupParams): Promise<void>;
56
+ export declare function deleteGroup({ clientCredentials, id, remote, }: SharedExistingGroupParams): Promise<void>;
57
+ export declare function updateGroup({ annotations, id, name, remote, }: UpdateGroupParams): Promise<void>;
58
+ export declare function inviteMember({ id, remote, user }: SharedGroupMemberParams): Promise<void>;
59
+ export declare function updateMember({ id, remote, role, user, }: UpdateGroupMemberParams): Promise<void>;
60
+ export declare function deleteMember({ id, user }: SharedGroupMemberParams): Promise<void>;
61
+ export {};
package/lib/group.js ADDED
@@ -0,0 +1,55 @@
1
+ import { AppsembleError, authenticate, logger } from '@appsemble/node-utils';
2
+ import axios from 'axios';
3
+ export function resolveAnnotations(annotations) {
4
+ const annotationRegex = /^\w+=.+$/;
5
+ if (annotations.some((a) => !annotationRegex.test(a))) {
6
+ throw new AppsembleError('One of the annotations did not follow the pattern of key=value');
7
+ }
8
+ return annotations.length
9
+ ? Object.fromEntries(annotations.map((annotation) => {
10
+ const [key, ...value] = annotation.split('=');
11
+ return [key, value.join('=')];
12
+ }))
13
+ : undefined;
14
+ }
15
+ export async function createGroup({ annotations = [], appId, clientCredentials, name, remote, }) {
16
+ logger.info(`Creating group ${name}`);
17
+ await authenticate(remote, 'groups:write', clientCredentials);
18
+ const { data: { id }, } = await axios.post(`/api/apps/${appId}/groups`, {
19
+ name,
20
+ annotations: resolveAnnotations(annotations),
21
+ }, { baseURL: remote });
22
+ logger.info(`Successfully created group ${name} with ID ${id}`);
23
+ }
24
+ export async function deleteGroup({ clientCredentials, id, remote, }) {
25
+ await authenticate(remote, 'groups:write', clientCredentials);
26
+ logger.info(`Deleting group ${id}`);
27
+ await axios.delete(`/api/groups/${id}`, { baseURL: remote });
28
+ logger.info(`Successfully deleted group ${id}`);
29
+ }
30
+ export async function updateGroup({ annotations = [], id, name, remote, }) {
31
+ logger.info(`Updating group ${id}`);
32
+ await axios.patch(`/api/groups/${id}`, {
33
+ name,
34
+ annotations: resolveAnnotations(annotations),
35
+ }, { baseURL: remote });
36
+ logger.info(`Successfully updated group ${id}`);
37
+ }
38
+ export async function inviteMember({ id, remote, user }) {
39
+ logger.info(`Inviting ${user} to group ${id}`);
40
+ await axios.post(`/api/groups/${id}/invites`, [{ email: user, role: 'Member' }], {
41
+ baseURL: remote,
42
+ });
43
+ logger.info(`Successfully invited ${user} to group ${id}`);
44
+ }
45
+ export async function updateMember({ id, remote, role, user, }) {
46
+ logger.info(`Updating ${user}’s role in group ${id} to ${role}`);
47
+ await axios.put(`/api/group-members/${user}/role`, { role }, { baseURL: remote });
48
+ logger.info(`Successfully updated ${user} in group ${id}`);
49
+ }
50
+ export async function deleteMember({ id, user }) {
51
+ logger.info(`Deleting ${user} to group ${id}`);
52
+ await axios.delete(`/api/group-members/${user}?selectedGroupId=${id}`);
53
+ logger.info(`Successfully deleted ${user} from group ${id}`);
54
+ }
55
+ //# sourceMappingURL=group.js.map