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.
- package/README.md +804 -59
- package/bin/quickbase-js.js +54 -0
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +9 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/ticket.d.ts +84 -0
- package/dist/auth/ticket.d.ts.map +1 -0
- package/dist/auth/ticket.js +260 -0
- package/dist/auth/ticket.js.map +1 -0
- package/dist/cli/schema.d.ts +23 -0
- package/dist/cli/schema.d.ts.map +1 -0
- package/dist/cli/schema.js +425 -0
- package/dist/cli/schema.js.map +1 -0
- package/dist/client/request.d.ts +2 -1
- package/dist/client/request.d.ts.map +1 -1
- package/dist/client/request.js +165 -18
- package/dist/client/request.js.map +1 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +12 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/errors.d.ts +17 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +32 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/index.d.ts +3 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/schema.d.ts +37 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +168 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/core/transform.d.ts +36 -0
- package/dist/core/transform.d.ts.map +1 -0
- package/dist/core/transform.js +205 -0
- package/dist/core/transform.js.map +1 -0
- package/dist/core/types.d.ts +104 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +14 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/quickbase.esm.js +6 -2
- package/dist/quickbase.esm.js.map +4 -4
- package/dist/quickbase.min.js +6 -2
- package/dist/quickbase.min.js.map +4 -4
- package/dist/xml/codepages.d.ts +60 -0
- package/dist/xml/codepages.d.ts.map +1 -0
- package/dist/xml/codepages.js +88 -0
- package/dist/xml/codepages.js.map +1 -0
- package/dist/xml/dbvars.d.ts +39 -0
- package/dist/xml/dbvars.d.ts.map +1 -0
- package/dist/xml/dbvars.js +54 -0
- package/dist/xml/dbvars.js.map +1 -0
- package/dist/xml/errors.d.ts +64 -0
- package/dist/xml/errors.d.ts.map +1 -0
- package/dist/xml/errors.js +102 -0
- package/dist/xml/errors.js.map +1 -0
- package/dist/xml/fields.d.ts +45 -0
- package/dist/xml/fields.d.ts.map +1 -0
- package/dist/xml/fields.js +86 -0
- package/dist/xml/fields.js.map +1 -0
- package/dist/xml/groups.d.ts +196 -0
- package/dist/xml/groups.d.ts.map +1 -0
- package/dist/xml/groups.js +424 -0
- package/dist/xml/groups.js.map +1 -0
- package/dist/xml/html.d.ts +61 -0
- package/dist/xml/html.d.ts.map +1 -0
- package/dist/xml/html.js +110 -0
- package/dist/xml/html.js.map +1 -0
- package/dist/xml/index.d.ts +453 -0
- package/dist/xml/index.d.ts.map +1 -0
- package/dist/xml/index.js +741 -0
- package/dist/xml/index.js.map +1 -0
- package/dist/xml/metadata.d.ts +49 -0
- package/dist/xml/metadata.d.ts.map +1 -0
- package/dist/xml/metadata.js +84 -0
- package/dist/xml/metadata.js.map +1 -0
- package/dist/xml/records.d.ts +106 -0
- package/dist/xml/records.d.ts.map +1 -0
- package/dist/xml/records.js +220 -0
- package/dist/xml/records.js.map +1 -0
- package/dist/xml/request.d.ts +115 -0
- package/dist/xml/request.d.ts.map +1 -0
- package/dist/xml/request.js +167 -0
- package/dist/xml/request.js.map +1 -0
- package/dist/xml/roles.d.ts +117 -0
- package/dist/xml/roles.d.ts.map +1 -0
- package/dist/xml/roles.js +241 -0
- package/dist/xml/roles.js.map +1 -0
- package/dist/xml/schema.d.ts +94 -0
- package/dist/xml/schema.d.ts.map +1 -0
- package/dist/xml/schema.js +354 -0
- package/dist/xml/schema.js.map +1 -0
- package/dist/xml/transform.d.ts +154 -0
- package/dist/xml/transform.d.ts.map +1 -0
- package/dist/xml/transform.js +182 -0
- package/dist/xml/transform.js.map +1 -0
- package/dist/xml/types.d.ts +531 -0
- package/dist/xml/types.d.ts.map +1 -0
- package/dist/xml/types.js +22 -0
- package/dist/xml/types.js.map +1 -0
- package/dist/xml/users.d.ts +92 -0
- package/dist/xml/users.d.ts.map +1 -0
- package/dist/xml/users.js +166 -0
- package/dist/xml/users.js.map +1 -0
- package/dist/xml/webhooks.d.ts +98 -0
- package/dist/xml/webhooks.d.ts.map +1 -0
- package/dist/xml/webhooks.js +202 -0
- package/dist/xml/webhooks.js.map +1 -0
- 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":"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"}
|
|
@@ -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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"}
|