quickbase-js 2.0.0 → 2.2.0

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 (113) hide show
  1. package/README.md +804 -59
  2. package/bin/quickbase-js.js +54 -0
  3. package/dist/auth/index.d.ts +1 -0
  4. package/dist/auth/index.d.ts.map +1 -1
  5. package/dist/auth/index.js +9 -0
  6. package/dist/auth/index.js.map +1 -1
  7. package/dist/auth/ticket.d.ts +84 -0
  8. package/dist/auth/ticket.d.ts.map +1 -0
  9. package/dist/auth/ticket.js +260 -0
  10. package/dist/auth/ticket.js.map +1 -0
  11. package/dist/cli/schema.d.ts +23 -0
  12. package/dist/cli/schema.d.ts.map +1 -0
  13. package/dist/cli/schema.js +425 -0
  14. package/dist/cli/schema.js.map +1 -0
  15. package/dist/client/request.d.ts +2 -1
  16. package/dist/client/request.d.ts.map +1 -1
  17. package/dist/client/request.js +165 -18
  18. package/dist/client/request.js.map +1 -1
  19. package/dist/core/config.d.ts.map +1 -1
  20. package/dist/core/config.js +12 -0
  21. package/dist/core/config.js.map +1 -1
  22. package/dist/core/errors.d.ts +17 -0
  23. package/dist/core/errors.d.ts.map +1 -1
  24. package/dist/core/errors.js +32 -0
  25. package/dist/core/errors.js.map +1 -1
  26. package/dist/core/index.d.ts +3 -2
  27. package/dist/core/index.d.ts.map +1 -1
  28. package/dist/core/index.js +1 -1
  29. package/dist/core/index.js.map +1 -1
  30. package/dist/core/schema.d.ts +37 -0
  31. package/dist/core/schema.d.ts.map +1 -0
  32. package/dist/core/schema.js +168 -0
  33. package/dist/core/schema.js.map +1 -0
  34. package/dist/core/transform.d.ts +36 -0
  35. package/dist/core/transform.d.ts.map +1 -0
  36. package/dist/core/transform.js +205 -0
  37. package/dist/core/transform.js.map +1 -0
  38. package/dist/core/types.d.ts +104 -1
  39. package/dist/core/types.d.ts.map +1 -1
  40. package/dist/core/types.js.map +1 -1
  41. package/dist/index.d.ts +14 -3
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +9 -2
  44. package/dist/index.js.map +1 -1
  45. package/dist/quickbase.esm.js +6 -2
  46. package/dist/quickbase.esm.js.map +4 -4
  47. package/dist/quickbase.min.js +6 -2
  48. package/dist/quickbase.min.js.map +4 -4
  49. package/dist/xml/codepages.d.ts +60 -0
  50. package/dist/xml/codepages.d.ts.map +1 -0
  51. package/dist/xml/codepages.js +88 -0
  52. package/dist/xml/codepages.js.map +1 -0
  53. package/dist/xml/dbvars.d.ts +39 -0
  54. package/dist/xml/dbvars.d.ts.map +1 -0
  55. package/dist/xml/dbvars.js +54 -0
  56. package/dist/xml/dbvars.js.map +1 -0
  57. package/dist/xml/errors.d.ts +64 -0
  58. package/dist/xml/errors.d.ts.map +1 -0
  59. package/dist/xml/errors.js +102 -0
  60. package/dist/xml/errors.js.map +1 -0
  61. package/dist/xml/fields.d.ts +45 -0
  62. package/dist/xml/fields.d.ts.map +1 -0
  63. package/dist/xml/fields.js +86 -0
  64. package/dist/xml/fields.js.map +1 -0
  65. package/dist/xml/groups.d.ts +196 -0
  66. package/dist/xml/groups.d.ts.map +1 -0
  67. package/dist/xml/groups.js +424 -0
  68. package/dist/xml/groups.js.map +1 -0
  69. package/dist/xml/html.d.ts +61 -0
  70. package/dist/xml/html.d.ts.map +1 -0
  71. package/dist/xml/html.js +110 -0
  72. package/dist/xml/html.js.map +1 -0
  73. package/dist/xml/index.d.ts +453 -0
  74. package/dist/xml/index.d.ts.map +1 -0
  75. package/dist/xml/index.js +741 -0
  76. package/dist/xml/index.js.map +1 -0
  77. package/dist/xml/metadata.d.ts +49 -0
  78. package/dist/xml/metadata.d.ts.map +1 -0
  79. package/dist/xml/metadata.js +84 -0
  80. package/dist/xml/metadata.js.map +1 -0
  81. package/dist/xml/records.d.ts +106 -0
  82. package/dist/xml/records.d.ts.map +1 -0
  83. package/dist/xml/records.js +220 -0
  84. package/dist/xml/records.js.map +1 -0
  85. package/dist/xml/request.d.ts +115 -0
  86. package/dist/xml/request.d.ts.map +1 -0
  87. package/dist/xml/request.js +167 -0
  88. package/dist/xml/request.js.map +1 -0
  89. package/dist/xml/roles.d.ts +117 -0
  90. package/dist/xml/roles.d.ts.map +1 -0
  91. package/dist/xml/roles.js +241 -0
  92. package/dist/xml/roles.js.map +1 -0
  93. package/dist/xml/schema.d.ts +94 -0
  94. package/dist/xml/schema.d.ts.map +1 -0
  95. package/dist/xml/schema.js +354 -0
  96. package/dist/xml/schema.js.map +1 -0
  97. package/dist/xml/transform.d.ts +154 -0
  98. package/dist/xml/transform.d.ts.map +1 -0
  99. package/dist/xml/transform.js +182 -0
  100. package/dist/xml/transform.js.map +1 -0
  101. package/dist/xml/types.d.ts +531 -0
  102. package/dist/xml/types.d.ts.map +1 -0
  103. package/dist/xml/types.js +22 -0
  104. package/dist/xml/types.js.map +1 -0
  105. package/dist/xml/users.d.ts +92 -0
  106. package/dist/xml/users.d.ts.map +1 -0
  107. package/dist/xml/users.js +166 -0
  108. package/dist/xml/users.js.map +1 -0
  109. package/dist/xml/webhooks.d.ts +98 -0
  110. package/dist/xml/webhooks.d.ts.map +1 -0
  111. package/dist/xml/webhooks.js +202 -0
  112. package/dist/xml/webhooks.js.map +1 -0
  113. package/package.json +6 -2
@@ -0,0 +1,196 @@
1
+ /**
2
+ * XML API Group Management
3
+ *
4
+ * Endpoints for managing groups and group memberships.
5
+ *
6
+ * XML-API: Remove this file when QuickBase discontinues the XML API.
7
+ * To find all XML API code, search for: XML-API
8
+ */
9
+ import type { XmlCaller, CreateGroupResult, GetUsersInGroupResult, GetGroupRoleResult, GrantedGroupsResult, GrantedDBsForGroupResult } from './types.js';
10
+ /**
11
+ * Create a new group.
12
+ *
13
+ * The group will be created with the caller as owner and first member.
14
+ * Caller must be the manager of the account where the group is created.
15
+ *
16
+ * @see https://help.quickbase.com/docs/api-creategroup
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const result = await createGroup(caller, 'MarketingSupport', 'Support staff', '456789');
21
+ * console.log(`Created group: ${result.group.id}`);
22
+ * ```
23
+ */
24
+ export declare function createGroup(caller: XmlCaller, name: string, description?: string, accountId?: string): Promise<CreateGroupResult>;
25
+ /**
26
+ * Delete a group.
27
+ *
28
+ * **Warning:** Once deleted, a group cannot be restored.
29
+ *
30
+ * @see https://help.quickbase.com/docs/api-deletegroup
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * await deleteGroup(caller, '1217.dgpt');
35
+ * ```
36
+ */
37
+ export declare function deleteGroup(caller: XmlCaller, groupId: string): Promise<void>;
38
+ /**
39
+ * Copy a group.
40
+ *
41
+ * @see https://help.quickbase.com/docs/api-copygroup
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * const result = await copyGroup(caller, '1217.dgpt', 'NewGroupName', 'New description');
46
+ * ```
47
+ */
48
+ export declare function copyGroup(caller: XmlCaller, groupId: string, name?: string, description?: string, accountId?: string): Promise<CreateGroupResult>;
49
+ /**
50
+ * Change group information (name, description).
51
+ *
52
+ * @see https://help.quickbase.com/docs/api-changegroupinfo
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * await changeGroupInfo(caller, '1217.dgpt', 'NewName', 'New description');
57
+ * ```
58
+ */
59
+ export declare function changeGroupInfo(caller: XmlCaller, groupId: string, name?: string, description?: string, accountId?: string): Promise<void>;
60
+ /**
61
+ * Get users and managers in a group.
62
+ *
63
+ * @see https://help.quickbase.com/docs/api-getusersingroup
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const result = await getUsersInGroup(caller, '2345.skdj', true);
68
+ * console.log(`Group: ${result.name}`);
69
+ * console.log(`Users: ${result.users.length}`);
70
+ * console.log(`Managers: ${result.managers.length}`);
71
+ * ```
72
+ */
73
+ export declare function getUsersInGroup(caller: XmlCaller, groupId: string, includeManagers?: boolean): Promise<GetUsersInGroupResult>;
74
+ /**
75
+ * Add a user to a group.
76
+ *
77
+ * The user can be added as member, manager, or both.
78
+ *
79
+ * @see https://help.quickbase.com/docs/api-addusertogroup
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * // Add as regular member
84
+ * await addUserToGroup(caller, '1217.dgpt', '112149.bhsv');
85
+ *
86
+ * // Add as manager
87
+ * await addUserToGroup(caller, '1217.dgpt', '112149.bhsv', true);
88
+ * ```
89
+ */
90
+ export declare function addUserToGroup(caller: XmlCaller, groupId: string, userId: string, allowAdminAccess?: boolean): Promise<void>;
91
+ /**
92
+ * Remove a user from a group.
93
+ *
94
+ * @see https://help.quickbase.com/docs/api-removeuserfromgroup
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * await removeUserFromGroup(caller, '1217.dgpt', '112149.bhsv');
99
+ * ```
100
+ */
101
+ export declare function removeUserFromGroup(caller: XmlCaller, groupId: string, userId: string): Promise<void>;
102
+ /**
103
+ * Get roles assigned to a group in an app.
104
+ *
105
+ * @see https://help.quickbase.com/docs/api-getgrouprole
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * const result = await getGroupRole(caller, 'bqxyz123', '1217.dgpt');
110
+ * for (const role of result.roles) {
111
+ * console.log(`Role ${role.id}: ${role.name}`);
112
+ * }
113
+ * ```
114
+ */
115
+ export declare function getGroupRole(caller: XmlCaller, appId: string, groupId: string): Promise<GetGroupRoleResult>;
116
+ /**
117
+ * Assign a group to a role in an app.
118
+ *
119
+ * @see https://help.quickbase.com/docs/api-addgrouptorole
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * await addGroupToRole(caller, 'bqxyz123', '1217.dgpt', 11);
124
+ * ```
125
+ */
126
+ export declare function addGroupToRole(caller: XmlCaller, appId: string, groupId: string, roleId: number): Promise<void>;
127
+ /**
128
+ * Remove a group from a role in an app.
129
+ *
130
+ * @see https://help.quickbase.com/docs/api-removegroupfromrole
131
+ *
132
+ * @param allRoles - If true, remove from all roles (ignores roleId)
133
+ *
134
+ * @example
135
+ * ```typescript
136
+ * // Remove from specific role
137
+ * await removeGroupFromRole(caller, 'bqxyz123', '1217.dgpt', 11);
138
+ *
139
+ * // Remove from all roles
140
+ * await removeGroupFromRole(caller, 'bqxyz123', '1217.dgpt', 0, true);
141
+ * ```
142
+ */
143
+ export declare function removeGroupFromRole(caller: XmlCaller, appId: string, groupId: string, roleId: number, allRoles?: boolean): Promise<void>;
144
+ /**
145
+ * Get groups a user belongs to.
146
+ *
147
+ * If userId is omitted, returns groups for the current user.
148
+ *
149
+ * @see https://help.quickbase.com/docs/api-grantedgroups
150
+ *
151
+ * @example
152
+ * ```typescript
153
+ * const result = await grantedGroups(caller, '112149.bhsv');
154
+ * for (const group of result.groups) {
155
+ * console.log(`${group.name} (${group.id})`);
156
+ * }
157
+ * ```
158
+ */
159
+ export declare function grantedGroups(caller: XmlCaller, userId?: string, adminOnly?: boolean): Promise<GrantedGroupsResult>;
160
+ /**
161
+ * Get apps a group can access.
162
+ *
163
+ * @see https://help.quickbase.com/docs/api-granteddbsforgroup
164
+ *
165
+ * @example
166
+ * ```typescript
167
+ * const result = await grantedDBsForGroup(caller, '1217.dgpt');
168
+ * for (const db of result.databases) {
169
+ * console.log(`${db.name} (${db.dbid})`);
170
+ * }
171
+ * ```
172
+ */
173
+ export declare function grantedDBsForGroup(caller: XmlCaller, groupId: string): Promise<GrantedDBsForGroupResult>;
174
+ /**
175
+ * Add a subgroup to a group.
176
+ *
177
+ * @see https://help.quickbase.com/docs/api-addsubgroup
178
+ *
179
+ * @example
180
+ * ```typescript
181
+ * await addSubgroup(caller, '1217.dgpt', '3450.aefs');
182
+ * ```
183
+ */
184
+ export declare function addSubgroup(caller: XmlCaller, groupId: string, subgroupId: string): Promise<void>;
185
+ /**
186
+ * Remove a subgroup from a group.
187
+ *
188
+ * @see https://help.quickbase.com/docs/api-removesubgroup
189
+ *
190
+ * @example
191
+ * ```typescript
192
+ * await removeSubgroup(caller, '1217.dgpt', '3450.aefs');
193
+ * ```
194
+ */
195
+ export declare function removeSubgroup(caller: XmlCaller, groupId: string, subgroupId: string): Promise<void>;
196
+ //# sourceMappingURL=groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/xml/groups.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,SAAS,EAKT,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AA6DpB;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,CAAC,CAsB5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,iBAAiB,CAAC,CAwB5B;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,OAAO,GACxB,OAAO,CAAC,qBAAqB,CAAC,CAmChC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,gBAAgB,CAAC,EAAE,OAAO,GACzB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,CAAC,CAgB7B;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,SAAS,EACjB,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAsB9B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,wBAAwB,CAAC,CAgBnC;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -0,0 +1,424 @@
1
+ /**
2
+ * XML API Group Management
3
+ *
4
+ * Endpoints for managing groups and group memberships.
5
+ *
6
+ * XML-API: Remove this file when QuickBase discontinues the XML API.
7
+ * To find all XML API code, search for: XML-API
8
+ */
9
+ import { checkError } from './errors.js';
10
+ import { buildRequest, escapeXml, parseBaseResponse, getTagContent, getAttribute, getAllElements, parseXmlNumber, parseXmlBool, } from './request.js';
11
+ /**
12
+ * Parse a group element from XML
13
+ */
14
+ function parseGroup(groupXml) {
15
+ const id = getAttribute(groupXml, 'id');
16
+ const name = getTagContent(groupXml, 'name');
17
+ const description = getTagContent(groupXml, 'description') || undefined;
18
+ const managedByUserStr = getTagContent(groupXml, 'managedByUser');
19
+ const managedByUser = managedByUserStr ? parseXmlBool(managedByUserStr) : undefined;
20
+ return { id, name, description, managedByUser };
21
+ }
22
+ /**
23
+ * Parse a user element from GetUsersInGroup response
24
+ */
25
+ function parseGroupUser(userXml) {
26
+ return {
27
+ id: getAttribute(userXml, 'id'),
28
+ firstName: getTagContent(userXml, 'firstName'),
29
+ lastName: getTagContent(userXml, 'lastName'),
30
+ email: getTagContent(userXml, 'email'),
31
+ screenName: getTagContent(userXml, 'screenName') || undefined,
32
+ isAdmin: parseXmlBool(getTagContent(userXml, 'isAdmin')),
33
+ };
34
+ }
35
+ /**
36
+ * Parse a manager element from GetUsersInGroup response
37
+ */
38
+ function parseGroupManager(managerXml) {
39
+ return {
40
+ id: getAttribute(managerXml, 'id'),
41
+ firstName: getTagContent(managerXml, 'firstName'),
42
+ lastName: getTagContent(managerXml, 'lastName'),
43
+ email: getTagContent(managerXml, 'email'),
44
+ screenName: getTagContent(managerXml, 'screenName') || undefined,
45
+ isMember: parseXmlBool(getTagContent(managerXml, 'isMember')),
46
+ };
47
+ }
48
+ /**
49
+ * Parse a subgroup element
50
+ */
51
+ function parseSubgroup(subgroupXml) {
52
+ return { id: getAttribute(subgroupXml, 'id') };
53
+ }
54
+ /**
55
+ * Create a new group.
56
+ *
57
+ * The group will be created with the caller as owner and first member.
58
+ * Caller must be the manager of the account where the group is created.
59
+ *
60
+ * @see https://help.quickbase.com/docs/api-creategroup
61
+ *
62
+ * @example
63
+ * ```typescript
64
+ * const result = await createGroup(caller, 'MarketingSupport', 'Support staff', '456789');
65
+ * console.log(`Created group: ${result.group.id}`);
66
+ * ```
67
+ */
68
+ export async function createGroup(caller, name, description, accountId) {
69
+ let inner = `<name>${escapeXml(name)}</name>`;
70
+ if (description) {
71
+ inner += `<description>${escapeXml(description)}</description>`;
72
+ }
73
+ if (accountId) {
74
+ inner += `<accountID>${escapeXml(accountId)}</accountID>`;
75
+ }
76
+ const body = buildRequest(inner);
77
+ const xml = await caller.doXml('main', 'API_CreateGroup', body);
78
+ const base = parseBaseResponse(xml);
79
+ checkError(base);
80
+ // Parse group element
81
+ const groupMatch = xml.match(/<group[^>]*>([\s\S]*?)<\/group>/);
82
+ if (!groupMatch) {
83
+ throw new Error('Invalid API_CreateGroup response: no group element');
84
+ }
85
+ const group = parseGroup(groupMatch[0]);
86
+ return { group };
87
+ }
88
+ /**
89
+ * Delete a group.
90
+ *
91
+ * **Warning:** Once deleted, a group cannot be restored.
92
+ *
93
+ * @see https://help.quickbase.com/docs/api-deletegroup
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * await deleteGroup(caller, '1217.dgpt');
98
+ * ```
99
+ */
100
+ export async function deleteGroup(caller, groupId) {
101
+ const inner = `<gid>${escapeXml(groupId)}</gid>`;
102
+ const body = buildRequest(inner);
103
+ const xml = await caller.doXml('main', 'API_DeleteGroup', body);
104
+ const base = parseBaseResponse(xml);
105
+ checkError(base);
106
+ }
107
+ /**
108
+ * Copy a group.
109
+ *
110
+ * @see https://help.quickbase.com/docs/api-copygroup
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * const result = await copyGroup(caller, '1217.dgpt', 'NewGroupName', 'New description');
115
+ * ```
116
+ */
117
+ export async function copyGroup(caller, groupId, name, description, accountId) {
118
+ let inner = `<gid>${escapeXml(groupId)}</gid>`;
119
+ if (name) {
120
+ inner += `<name>${escapeXml(name)}</name>`;
121
+ }
122
+ if (description) {
123
+ inner += `<description>${escapeXml(description)}</description>`;
124
+ }
125
+ if (accountId) {
126
+ inner += `<accountID>${escapeXml(accountId)}</accountID>`;
127
+ }
128
+ const body = buildRequest(inner);
129
+ const xml = await caller.doXml('main', 'API_CopyGroup', body);
130
+ const base = parseBaseResponse(xml);
131
+ checkError(base);
132
+ const groupMatch = xml.match(/<group[^>]*>([\s\S]*?)<\/group>/);
133
+ if (!groupMatch) {
134
+ throw new Error('Invalid API_CopyGroup response: no group element');
135
+ }
136
+ const group = parseGroup(groupMatch[0]);
137
+ return { group };
138
+ }
139
+ /**
140
+ * Change group information (name, description).
141
+ *
142
+ * @see https://help.quickbase.com/docs/api-changegroupinfo
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * await changeGroupInfo(caller, '1217.dgpt', 'NewName', 'New description');
147
+ * ```
148
+ */
149
+ export async function changeGroupInfo(caller, groupId, name, description, accountId) {
150
+ let inner = `<gid>${escapeXml(groupId)}</gid>`;
151
+ if (name) {
152
+ inner += `<name>${escapeXml(name)}</name>`;
153
+ }
154
+ if (description) {
155
+ inner += `<description>${escapeXml(description)}</description>`;
156
+ }
157
+ if (accountId) {
158
+ inner += `<accountID>${escapeXml(accountId)}</accountID>`;
159
+ }
160
+ const body = buildRequest(inner);
161
+ const xml = await caller.doXml('main', 'API_ChangeGroupInfo', body);
162
+ const base = parseBaseResponse(xml);
163
+ checkError(base);
164
+ }
165
+ /**
166
+ * Get users and managers in a group.
167
+ *
168
+ * @see https://help.quickbase.com/docs/api-getusersingroup
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * const result = await getUsersInGroup(caller, '2345.skdj', true);
173
+ * console.log(`Group: ${result.name}`);
174
+ * console.log(`Users: ${result.users.length}`);
175
+ * console.log(`Managers: ${result.managers.length}`);
176
+ * ```
177
+ */
178
+ export async function getUsersInGroup(caller, groupId, includeManagers) {
179
+ let inner = `<gid>${escapeXml(groupId)}</gid>`;
180
+ if (includeManagers) {
181
+ inner += '<includeAllMgrs>true</includeAllMgrs>';
182
+ }
183
+ const body = buildRequest(inner);
184
+ const xml = await caller.doXml('main', 'API_GetUsersInGroup', body);
185
+ const base = parseBaseResponse(xml);
186
+ checkError(base);
187
+ // Parse group element
188
+ const groupMatch = xml.match(/<group[^>]*id="([^"]*)"[^>]*>([\s\S]*?)<\/group>/);
189
+ if (!groupMatch || !groupMatch[1]) {
190
+ throw new Error('Invalid API_GetUsersInGroup response: no group element');
191
+ }
192
+ const groupXml = groupMatch[0];
193
+ const id = groupMatch[1];
194
+ const name = getTagContent(groupXml, 'name');
195
+ const description = getTagContent(groupXml, 'description') || undefined;
196
+ // Parse users
197
+ const userElements = getAllElements(groupXml, 'user');
198
+ const users = userElements.map(parseGroupUser);
199
+ // Parse managers
200
+ const managerElements = getAllElements(groupXml, 'manager');
201
+ const managers = managerElements.map(parseGroupManager);
202
+ // Parse subgroups
203
+ const subgroupElements = getAllElements(groupXml, 'subgroup');
204
+ const subgroups = subgroupElements.map(parseSubgroup);
205
+ return { id, name, description, users, managers, subgroups };
206
+ }
207
+ /**
208
+ * Add a user to a group.
209
+ *
210
+ * The user can be added as member, manager, or both.
211
+ *
212
+ * @see https://help.quickbase.com/docs/api-addusertogroup
213
+ *
214
+ * @example
215
+ * ```typescript
216
+ * // Add as regular member
217
+ * await addUserToGroup(caller, '1217.dgpt', '112149.bhsv');
218
+ *
219
+ * // Add as manager
220
+ * await addUserToGroup(caller, '1217.dgpt', '112149.bhsv', true);
221
+ * ```
222
+ */
223
+ export async function addUserToGroup(caller, groupId, userId, allowAdminAccess) {
224
+ let inner = `<gid>${escapeXml(groupId)}</gid>`;
225
+ inner += `<uid>${escapeXml(userId)}</uid>`;
226
+ if (allowAdminAccess) {
227
+ inner += '<allowAdminAccess>true</allowAdminAccess>';
228
+ }
229
+ const body = buildRequest(inner);
230
+ const xml = await caller.doXml('main', 'API_AddUserToGroup', body);
231
+ const base = parseBaseResponse(xml);
232
+ checkError(base);
233
+ }
234
+ /**
235
+ * Remove a user from a group.
236
+ *
237
+ * @see https://help.quickbase.com/docs/api-removeuserfromgroup
238
+ *
239
+ * @example
240
+ * ```typescript
241
+ * await removeUserFromGroup(caller, '1217.dgpt', '112149.bhsv');
242
+ * ```
243
+ */
244
+ export async function removeUserFromGroup(caller, groupId, userId) {
245
+ const inner = `<gid>${escapeXml(groupId)}</gid>` +
246
+ `<uid>${escapeXml(userId)}</uid>`;
247
+ const body = buildRequest(inner);
248
+ const xml = await caller.doXml('main', 'API_RemoveUserFromGroup', body);
249
+ const base = parseBaseResponse(xml);
250
+ checkError(base);
251
+ }
252
+ /**
253
+ * Get roles assigned to a group in an app.
254
+ *
255
+ * @see https://help.quickbase.com/docs/api-getgrouprole
256
+ *
257
+ * @example
258
+ * ```typescript
259
+ * const result = await getGroupRole(caller, 'bqxyz123', '1217.dgpt');
260
+ * for (const role of result.roles) {
261
+ * console.log(`Role ${role.id}: ${role.name}`);
262
+ * }
263
+ * ```
264
+ */
265
+ export async function getGroupRole(caller, appId, groupId) {
266
+ const inner = `<gid>${escapeXml(groupId)}</gid>`;
267
+ const body = buildRequest(inner);
268
+ const xml = await caller.doXml(appId, 'API_GetGroupRole', body);
269
+ const base = parseBaseResponse(xml);
270
+ checkError(base);
271
+ // Parse roles
272
+ const roleElements = getAllElements(xml, 'role');
273
+ const roles = roleElements.map((roleXml) => ({
274
+ id: parseXmlNumber(getAttribute(roleXml, 'id')),
275
+ name: getTagContent(roleXml, 'name'),
276
+ }));
277
+ return { roles };
278
+ }
279
+ /**
280
+ * Assign a group to a role in an app.
281
+ *
282
+ * @see https://help.quickbase.com/docs/api-addgrouptorole
283
+ *
284
+ * @example
285
+ * ```typescript
286
+ * await addGroupToRole(caller, 'bqxyz123', '1217.dgpt', 11);
287
+ * ```
288
+ */
289
+ export async function addGroupToRole(caller, appId, groupId, roleId) {
290
+ const inner = `<gid>${escapeXml(groupId)}</gid>` +
291
+ `<roleid>${roleId}</roleid>`;
292
+ const body = buildRequest(inner);
293
+ const xml = await caller.doXml(appId, 'API_AddGroupToRole', body);
294
+ const base = parseBaseResponse(xml);
295
+ checkError(base);
296
+ }
297
+ /**
298
+ * Remove a group from a role in an app.
299
+ *
300
+ * @see https://help.quickbase.com/docs/api-removegroupfromrole
301
+ *
302
+ * @param allRoles - If true, remove from all roles (ignores roleId)
303
+ *
304
+ * @example
305
+ * ```typescript
306
+ * // Remove from specific role
307
+ * await removeGroupFromRole(caller, 'bqxyz123', '1217.dgpt', 11);
308
+ *
309
+ * // Remove from all roles
310
+ * await removeGroupFromRole(caller, 'bqxyz123', '1217.dgpt', 0, true);
311
+ * ```
312
+ */
313
+ export async function removeGroupFromRole(caller, appId, groupId, roleId, allRoles) {
314
+ let inner = `<gid>${escapeXml(groupId)}</gid>`;
315
+ if (allRoles) {
316
+ inner += '<allRoles>true</allRoles>';
317
+ }
318
+ else {
319
+ inner += `<roleid>${roleId}</roleid>`;
320
+ }
321
+ const body = buildRequest(inner);
322
+ const xml = await caller.doXml(appId, 'API_RemoveGroupFromRole', body);
323
+ const base = parseBaseResponse(xml);
324
+ checkError(base);
325
+ }
326
+ /**
327
+ * Get groups a user belongs to.
328
+ *
329
+ * If userId is omitted, returns groups for the current user.
330
+ *
331
+ * @see https://help.quickbase.com/docs/api-grantedgroups
332
+ *
333
+ * @example
334
+ * ```typescript
335
+ * const result = await grantedGroups(caller, '112149.bhsv');
336
+ * for (const group of result.groups) {
337
+ * console.log(`${group.name} (${group.id})`);
338
+ * }
339
+ * ```
340
+ */
341
+ export async function grantedGroups(caller, userId, adminOnly) {
342
+ let inner = '';
343
+ if (userId) {
344
+ inner += `<userid>${escapeXml(userId)}</userid>`;
345
+ }
346
+ if (adminOnly) {
347
+ inner += '<adminOnly>true</adminOnly>';
348
+ }
349
+ const body = buildRequest(inner);
350
+ const xml = await caller.doXml('main', 'API_GrantedGroups', body);
351
+ const base = parseBaseResponse(xml);
352
+ checkError(base);
353
+ // Parse groups
354
+ const groupElements = getAllElements(xml, 'group');
355
+ const groups = groupElements.map((groupXml) => ({
356
+ id: getAttribute(groupXml, 'id'),
357
+ name: getTagContent(groupXml, 'name'),
358
+ }));
359
+ return { groups };
360
+ }
361
+ /**
362
+ * Get apps a group can access.
363
+ *
364
+ * @see https://help.quickbase.com/docs/api-granteddbsforgroup
365
+ *
366
+ * @example
367
+ * ```typescript
368
+ * const result = await grantedDBsForGroup(caller, '1217.dgpt');
369
+ * for (const db of result.databases) {
370
+ * console.log(`${db.name} (${db.dbid})`);
371
+ * }
372
+ * ```
373
+ */
374
+ export async function grantedDBsForGroup(caller, groupId) {
375
+ const inner = `<gid>${escapeXml(groupId)}</gid>`;
376
+ const body = buildRequest(inner);
377
+ const xml = await caller.doXml('main', 'API_GrantedDBsForGroup', body);
378
+ const base = parseBaseResponse(xml);
379
+ checkError(base);
380
+ // Parse databases
381
+ const dbElements = getAllElements(xml, 'dbinfo');
382
+ const databases = dbElements.map((dbXml) => ({
383
+ dbid: getTagContent(dbXml, 'dbid'),
384
+ name: getTagContent(dbXml, 'dbname'),
385
+ }));
386
+ return { databases };
387
+ }
388
+ /**
389
+ * Add a subgroup to a group.
390
+ *
391
+ * @see https://help.quickbase.com/docs/api-addsubgroup
392
+ *
393
+ * @example
394
+ * ```typescript
395
+ * await addSubgroup(caller, '1217.dgpt', '3450.aefs');
396
+ * ```
397
+ */
398
+ export async function addSubgroup(caller, groupId, subgroupId) {
399
+ const inner = `<gid>${escapeXml(groupId)}</gid>` +
400
+ `<subgroupid>${escapeXml(subgroupId)}</subgroupid>`;
401
+ const body = buildRequest(inner);
402
+ const xml = await caller.doXml('main', 'API_AddSubgroup', body);
403
+ const base = parseBaseResponse(xml);
404
+ checkError(base);
405
+ }
406
+ /**
407
+ * Remove a subgroup from a group.
408
+ *
409
+ * @see https://help.quickbase.com/docs/api-removesubgroup
410
+ *
411
+ * @example
412
+ * ```typescript
413
+ * await removeSubgroup(caller, '1217.dgpt', '3450.aefs');
414
+ * ```
415
+ */
416
+ export async function removeSubgroup(caller, groupId, subgroupId) {
417
+ const inner = `<gid>${escapeXml(groupId)}</gid>` +
418
+ `<subgroupid>${escapeXml(subgroupId)}</subgroupid>`;
419
+ const body = buildRequest(inner);
420
+ const xml = await caller.doXml('main', 'API_RemoveSubgroup', body);
421
+ const base = parseBaseResponse(xml);
422
+ checkError(base);
423
+ }
424
+ //# sourceMappingURL=groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../src/xml/groups.ts"],"names":[],"mappings":"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"}