@taruvi/sdk 1.5.0-beta.1 → 1.5.0-beta.2
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 +58 -1295
- package/package.json +10 -2
- package/.claude/settings.local.json +0 -19
- package/.github/worflows/publish.yml +0 -57
- package/.github/workflows/publish.yml +0 -58
- package/.kiro/settings/lsp.json +0 -198
- package/MODULE_NAMING_CHANGES.md +0 -81
- package/PARAMETER_NAMING_CHANGES.md +0 -106
- package/USAGE_EXAMPLE.md +0 -86
- package/src/client.ts +0 -88
- package/src/index.ts +0 -51
- package/src/lib/analytics/AnalyticsClient.ts +0 -24
- package/src/lib/analytics/types.ts +0 -8
- package/src/lib/app/AppClient.ts +0 -54
- package/src/lib/app/types.ts +0 -50
- package/src/lib/auth/AuthClient.ts +0 -126
- package/src/lib/auth/types.ts +0 -123
- package/src/lib/database/DatabaseClient.ts +0 -306
- package/src/lib/database/types.ts +0 -156
- package/src/lib/functions/FunctionsClient.ts +0 -27
- package/src/lib/functions/types.ts +0 -27
- package/src/lib/policy/PolicyClient.ts +0 -79
- package/src/lib/policy/types.ts +0 -39
- package/src/lib/secrets/SecretsClient.ts +0 -75
- package/src/lib/secrets/types.ts +0 -59
- package/src/lib/settings/SettingsClient.ts +0 -22
- package/src/lib/settings/types.ts +0 -9
- package/src/lib/storage/StorageClient.ts +0 -131
- package/src/lib/storage/types.ts +0 -86
- package/src/lib/users/UserClient.ts +0 -63
- package/src/lib/users/types.ts +0 -123
- package/src/lib-internal/errors/ErrorClient.ts +0 -114
- package/src/lib-internal/errors/index.ts +0 -3
- package/src/lib-internal/errors/types.ts +0 -29
- package/src/lib-internal/http/HttpClient.ts +0 -116
- package/src/lib-internal/http/types.ts +0 -12
- package/src/lib-internal/routes/AnalyticsRoutes.ts +0 -3
- package/src/lib-internal/routes/AppRoutes.ts +0 -9
- package/src/lib-internal/routes/AuthRoutes.ts +0 -0
- package/src/lib-internal/routes/DatabaseRoutes.ts +0 -10
- package/src/lib-internal/routes/FunctionRoutes.ts +0 -3
- package/src/lib-internal/routes/PolicyRoutes.ts +0 -4
- package/src/lib-internal/routes/SecretsRoutes.ts +0 -5
- package/src/lib-internal/routes/SettingsRoutes.ts +0 -4
- package/src/lib-internal/routes/StorageRoutes.ts +0 -15
- package/src/lib-internal/routes/UserRoutes.ts +0 -12
- package/src/lib-internal/routes/index.ts +0 -0
- package/src/lib-internal/token/TokenClient.ts +0 -108
- package/src/lib-internal/token/types.ts +0 -0
- package/src/types.ts +0 -104
- package/src/utils/enums.ts +0 -24
- package/src/utils/utils.ts +0 -38
- package/tests/fixtures/mockClient.ts +0 -19
- package/tests/mocks/db.json +0 -1
- package/tests/unit/analytics/AnalyticsClient.test.ts +0 -84
- package/tests/unit/app/AppClient.test.ts +0 -114
- package/tests/unit/auth/AuthClient.test.ts +0 -91
- package/tests/unit/client/Client.test.ts +0 -87
- package/tests/unit/database/DatabaseClient.test.ts +0 -652
- package/tests/unit/edge-cases/robustness.test.ts +0 -258
- package/tests/unit/errors/errors.test.ts +0 -236
- package/tests/unit/functions/FunctionsClient.test.ts +0 -99
- package/tests/unit/policy/PolicyClient.test.ts +0 -180
- package/tests/unit/secrets/SecretsClient.test.ts +0 -146
- package/tests/unit/settings/SettingsClient.test.ts +0 -50
- package/tests/unit/storage/StorageClient.test.ts +0 -252
- package/tests/unit/users/UserClient.test.ts +0 -150
- package/tsconfig.json +0 -44
- package/vitest.config.ts +0 -7
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
2
|
-
import { User } from '../../../src/lib/users/UserClient.js'
|
|
3
|
-
import { Client } from '../../../src/client.js'
|
|
4
|
-
|
|
5
|
-
const mockHttpClient = {
|
|
6
|
-
get: vi.fn(),
|
|
7
|
-
post: vi.fn(),
|
|
8
|
-
put: vi.fn(),
|
|
9
|
-
delete: vi.fn()
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const mockClient = {
|
|
13
|
-
getConfig: () => ({ apiKey: 'test-key', appSlug: 'test-app', apiUrl: 'https://api.test.com' }),
|
|
14
|
-
httpClient: mockHttpClient
|
|
15
|
-
} as unknown as Client
|
|
16
|
-
|
|
17
|
-
describe('User', () => {
|
|
18
|
-
beforeEach(() => {
|
|
19
|
-
vi.clearAllMocks()
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
describe('getUser()', () => {
|
|
23
|
-
it('fetches user by username', async () => {
|
|
24
|
-
const userData = { username: 'john_doe', email: 'john@example.com' }
|
|
25
|
-
mockHttpClient.get.mockResolvedValue(userData)
|
|
26
|
-
|
|
27
|
-
const user = new User(mockClient)
|
|
28
|
-
const result = await user.getUser('john_doe')
|
|
29
|
-
|
|
30
|
-
expect(mockHttpClient.get).toHaveBeenCalledWith('api/users/john_doe/')
|
|
31
|
-
expect(result).toEqual(userData)
|
|
32
|
-
})
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
describe('createUser()', () => {
|
|
36
|
-
it('creates user with provided data', async () => {
|
|
37
|
-
const createData = {
|
|
38
|
-
username: 'new_user',
|
|
39
|
-
email: 'new@example.com',
|
|
40
|
-
password: 'pass123',
|
|
41
|
-
confirm_password: 'pass123',
|
|
42
|
-
first_name: 'New',
|
|
43
|
-
last_name: 'User',
|
|
44
|
-
is_active: true,
|
|
45
|
-
is_staff: false,
|
|
46
|
-
attributes: ''
|
|
47
|
-
}
|
|
48
|
-
const response = { id: '1', ...createData }
|
|
49
|
-
mockHttpClient.post.mockResolvedValue(response)
|
|
50
|
-
|
|
51
|
-
const user = new User(mockClient)
|
|
52
|
-
const result = await user.createUser(createData)
|
|
53
|
-
|
|
54
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('api/users/', createData)
|
|
55
|
-
expect(result).toEqual(response)
|
|
56
|
-
})
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
describe('updateUser()', () => {
|
|
60
|
-
it('updates user by username', async () => {
|
|
61
|
-
const updateData = { email: 'updated@example.com', first_name: 'Updated' }
|
|
62
|
-
const response = { username: 'john_doe', ...updateData }
|
|
63
|
-
mockHttpClient.put.mockResolvedValue(response)
|
|
64
|
-
|
|
65
|
-
const user = new User(mockClient)
|
|
66
|
-
const result = await user.updateUser('john_doe', updateData)
|
|
67
|
-
|
|
68
|
-
expect(mockHttpClient.put).toHaveBeenCalledWith('api/users/john_doe/', updateData)
|
|
69
|
-
expect(result).toEqual(response)
|
|
70
|
-
})
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
describe('deleteUser()', () => {
|
|
74
|
-
it('deletes user by username', async () => {
|
|
75
|
-
mockHttpClient.delete.mockResolvedValue(undefined)
|
|
76
|
-
|
|
77
|
-
const user = new User(mockClient)
|
|
78
|
-
await user.deleteUser('john_doe')
|
|
79
|
-
|
|
80
|
-
expect(mockHttpClient.delete).toHaveBeenCalledWith('api/users/john_doe/')
|
|
81
|
-
})
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
describe('list()', () => {
|
|
85
|
-
it('lists users with filters', async () => {
|
|
86
|
-
const users = [{ username: 'user1' }, { username: 'user2' }]
|
|
87
|
-
mockHttpClient.get.mockResolvedValue(users)
|
|
88
|
-
|
|
89
|
-
const user = new User(mockClient)
|
|
90
|
-
const result = await user.list({ search: 'john', is_active: true, page: 1, page_size: 20 })
|
|
91
|
-
|
|
92
|
-
expect(mockHttpClient.get).toHaveBeenCalledWith(
|
|
93
|
-
expect.stringContaining('api/users/')
|
|
94
|
-
)
|
|
95
|
-
expect(result).toEqual(users)
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
it('builds query string from filters', async () => {
|
|
99
|
-
mockHttpClient.get.mockResolvedValue([])
|
|
100
|
-
|
|
101
|
-
const user = new User(mockClient)
|
|
102
|
-
await user.list({ search: 'test', ordering: '-date_joined' })
|
|
103
|
-
|
|
104
|
-
const url = mockHttpClient.get.mock.calls[0][0]
|
|
105
|
-
expect(url).toContain('search=test')
|
|
106
|
-
expect(url).toContain('ordering=-date_joined')
|
|
107
|
-
})
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
describe('getUserApps()', () => {
|
|
111
|
-
it('fetches apps for user', async () => {
|
|
112
|
-
const apps = [{ name: 'App1', slug: 'app1' }, { name: 'App2', slug: 'app2' }]
|
|
113
|
-
mockHttpClient.get.mockResolvedValue(apps)
|
|
114
|
-
|
|
115
|
-
const user = new User(mockClient)
|
|
116
|
-
const result = await user.getUserApps('john_doe')
|
|
117
|
-
|
|
118
|
-
expect(mockHttpClient.get).toHaveBeenCalledWith('api/users/john_doe/apps/')
|
|
119
|
-
expect(result).toEqual(apps)
|
|
120
|
-
})
|
|
121
|
-
})
|
|
122
|
-
|
|
123
|
-
describe('assignRoles()', () => {
|
|
124
|
-
it('assigns roles to user', async () => {
|
|
125
|
-
const request = { username: 'john_doe', roles: ['admin', 'editor'] }
|
|
126
|
-
const response = { success: true }
|
|
127
|
-
mockHttpClient.post.mockResolvedValue(response)
|
|
128
|
-
|
|
129
|
-
const user = new User(mockClient)
|
|
130
|
-
const result = await user.assignRoles(request)
|
|
131
|
-
|
|
132
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('api/assign/roles/', request)
|
|
133
|
-
expect(result).toEqual(response)
|
|
134
|
-
})
|
|
135
|
-
})
|
|
136
|
-
|
|
137
|
-
describe('revokeRoles()', () => {
|
|
138
|
-
it('revokes roles from user', async () => {
|
|
139
|
-
const request = { username: 'john_doe', roles: ['admin'] }
|
|
140
|
-
const response = { success: true }
|
|
141
|
-
mockHttpClient.delete.mockResolvedValue(response)
|
|
142
|
-
|
|
143
|
-
const user = new User(mockClient)
|
|
144
|
-
const result = await user.revokeRoles(request)
|
|
145
|
-
|
|
146
|
-
expect(mockHttpClient.delete).toHaveBeenCalledWith('api/revoke/roles/', request)
|
|
147
|
-
expect(result).toEqual(response)
|
|
148
|
-
})
|
|
149
|
-
})
|
|
150
|
-
})
|
package/tsconfig.json
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
// Visit https://aka.ms/tsconfig to read more about this file
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
// File Layout
|
|
5
|
-
"rootDir": "./src",
|
|
6
|
-
"outDir": "./dist",
|
|
7
|
-
|
|
8
|
-
// Environment Settings
|
|
9
|
-
// See also https://aka.ms/tsconfig/module
|
|
10
|
-
"module": "nodenext",
|
|
11
|
-
"target": "esnext",
|
|
12
|
-
"lib": ["esnext", "dom"],
|
|
13
|
-
"types": ["node"],
|
|
14
|
-
|
|
15
|
-
// Other Outputs
|
|
16
|
-
"sourceMap": true,
|
|
17
|
-
"declaration": true,
|
|
18
|
-
"declarationMap": true,
|
|
19
|
-
|
|
20
|
-
// Stricter Typechecking Options
|
|
21
|
-
"noUncheckedIndexedAccess": true,
|
|
22
|
-
"exactOptionalPropertyTypes": true,
|
|
23
|
-
|
|
24
|
-
// Style Options
|
|
25
|
-
// "noImplicitReturns": true,
|
|
26
|
-
// "noImplicitOverride": true,
|
|
27
|
-
// "noUnusedLocals": true,
|
|
28
|
-
// "noUnusedParameters": true,
|
|
29
|
-
// "noFallthroughCasesInSwitch": true,
|
|
30
|
-
// "noPropertyAccessFromIndexSignature": true,
|
|
31
|
-
|
|
32
|
-
// Recommended Options
|
|
33
|
-
"strict": true,
|
|
34
|
-
"jsx": "react-jsx",
|
|
35
|
-
"verbatimModuleSyntax": true,
|
|
36
|
-
"isolatedModules": true,
|
|
37
|
-
"resolveJsonModule": true,
|
|
38
|
-
"noUncheckedSideEffectImports": true,
|
|
39
|
-
"moduleDetection": "force",
|
|
40
|
-
"skipLibCheck": true,
|
|
41
|
-
},
|
|
42
|
-
"include": ["src/**/*"],
|
|
43
|
-
"exclude": ["node_modules", "dist", "taruvi-platform", "tests"]
|
|
44
|
-
}
|