Skip to content

Commit 5370bb6

Browse files
authored
Add Tables API Method for Token Creation (#1616)
Fixes OPS-3032. See API reference [here](https://www.postman.com/api-reference-library/baserow/request/33yzyhm/create-database-token?utm_source=chatgpt.com&tab=body). I tested locally with a one-off database seed script ``` const { token } = await authenticateDefaultUserInOpenOpsTables(); const result = await openopsTables.createDatabaseToken({ name: 'Test Database Token', workspaceId, systemToken: token, }); ```
1 parent a279500 commit 5370bb6

3 files changed

Lines changed: 93 additions & 0 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { createAxiosHeaders, makeOpenOpsTablesPost } from '@openops/common';
2+
3+
export type DatabaseToken = {
4+
id: number;
5+
name: string;
6+
workspace: number;
7+
key: string;
8+
permissions: {
9+
create: boolean;
10+
read: boolean;
11+
update: boolean;
12+
delete: boolean;
13+
};
14+
};
15+
16+
export type CreateDatabaseTokenParams = {
17+
name: string;
18+
workspaceId: number;
19+
systemToken: string;
20+
};
21+
22+
export async function createDatabaseToken(
23+
params: CreateDatabaseTokenParams,
24+
): Promise<DatabaseToken> {
25+
const payload = {
26+
name: params.name,
27+
workspace: params.workspaceId,
28+
};
29+
30+
const headers = createAxiosHeaders(params.systemToken);
31+
const response = await makeOpenOpsTablesPost<DatabaseToken>(
32+
'api/database/tokens/',
33+
payload,
34+
headers,
35+
);
36+
37+
return response;
38+
}

packages/server/api/src/app/openops-tables/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { addUserToWorkspace } from './add-user-workspace';
22
import { createDatabase } from './create-database';
3+
import { createDatabaseToken } from './create-database-token';
34
import { createMcpEndpoint } from './create-mcp-endpoint';
45
import { createTable } from './create-table';
56
import { createUser } from './create-user';
@@ -16,6 +17,7 @@ export const openopsTables = {
1617
addUserToWorkspace,
1718
listDatabases,
1819
createDatabase,
20+
createDatabaseToken,
1921
createTable,
2022
listWorkspaces,
2123
createWorkspace,
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
const openopsCommonMock = {
2+
...jest.requireActual('@openops/common'),
3+
makeOpenOpsTablesPost: jest.fn(),
4+
};
5+
jest.mock('@openops/common', () => openopsCommonMock);
6+
7+
import { AxiosHeaders } from 'axios';
8+
import { createDatabaseToken } from '../../../src/app/openops-tables/create-database-token';
9+
10+
describe('createDatabaseToken', () => {
11+
beforeEach(() => {
12+
jest.clearAllMocks();
13+
});
14+
15+
it('should return the created token on successful creation', async () => {
16+
const params = {
17+
name: 'Test Token',
18+
workspaceId: 1,
19+
systemToken: 'test_system_token',
20+
};
21+
const mockTokenResponse = {
22+
id: 1,
23+
name: 'Test Token',
24+
workspace: 1,
25+
key: 'test_database_token_key',
26+
permissions: {
27+
create: true,
28+
read: true,
29+
update: true,
30+
delete: true,
31+
},
32+
};
33+
34+
openopsCommonMock.makeOpenOpsTablesPost.mockResolvedValue(
35+
mockTokenResponse,
36+
);
37+
38+
const result = await createDatabaseToken(params);
39+
40+
expect(result).toEqual(mockTokenResponse);
41+
expect(openopsCommonMock.makeOpenOpsTablesPost).toHaveBeenCalledWith(
42+
'api/database/tokens/',
43+
{
44+
name: params.name,
45+
workspace: params.workspaceId,
46+
},
47+
new AxiosHeaders({
48+
'Content-Type': 'application/json',
49+
Authorization: `JWT ${params.systemToken}`,
50+
}),
51+
);
52+
});
53+
});

0 commit comments

Comments
 (0)