@palettelab/sdk 0.1.12 → 0.1.13
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 +7 -1
- package/dist/index.d.mts +25 -1
- package/dist/index.d.ts +25 -1
- package/dist/index.js +38 -0
- package/dist/index.mjs +38 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -248,7 +248,7 @@ function App() {
|
|
|
248
248
|
Included clients:
|
|
249
249
|
|
|
250
250
|
- `palette.user.current()` and `palette.user.updateProfile()`
|
|
251
|
-
- `palette.organization.currentId()`, `currentRole()`, and `
|
|
251
|
+
- `palette.organization.currentId()`, `currentRole()`, `listMine()`, `listMembers()`, `getMember()`, `getMemberByEmail()`, `inviteMember()`, and `updateMemberRole()`
|
|
252
252
|
- `palette.dataRooms.list()`, `create()`, `get()`, `folder()`, `createFolder()`, `ensureFolder()`, `findRoomByName()`, `findFolderByName()`, `resolveFolderPath()`, `findFileByName()`, and `uploadFile()`
|
|
253
253
|
- `palette.config.get()` and `palette.config.update(values)`, with optional plugin ID override
|
|
254
254
|
- `palette.permissions.has()`, `hasAny()`, and `hasAll()`
|
|
@@ -258,6 +258,12 @@ Included clients:
|
|
|
258
258
|
These helpers are intentionally thin wrappers over platform APIs. Apps can still
|
|
259
259
|
use `apiFetch()` directly for custom backend routes.
|
|
260
260
|
|
|
261
|
+
Member helpers operate on the active organisation. Use `members:read` for
|
|
262
|
+
listing or looking up members, and `members:write` for invitations or role
|
|
263
|
+
updates. When the runtime provides declared app permissions, these helpers check
|
|
264
|
+
those permissions before calling the platform API. Member deletion/removal is
|
|
265
|
+
intentionally not exposed through the app SDK.
|
|
266
|
+
|
|
261
267
|
### Data Room Folders By Name
|
|
262
268
|
|
|
263
269
|
Apps can create or reuse custom Data Room folders by name:
|
package/dist/index.d.mts
CHANGED
|
@@ -112,6 +112,24 @@ declare class StorageClient {
|
|
|
112
112
|
uploadToSignedUrl: typeof uploadToSignedUrl;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
+
type OrgMemberRole = "owner" | "admin" | "member" | "viewer";
|
|
116
|
+
interface OrgMember {
|
|
117
|
+
id: string;
|
|
118
|
+
name: string;
|
|
119
|
+
email: string;
|
|
120
|
+
role: OrgMemberRole;
|
|
121
|
+
is_active: boolean;
|
|
122
|
+
joined_at: string;
|
|
123
|
+
}
|
|
124
|
+
interface OrgInviteMemberInput {
|
|
125
|
+
email: string;
|
|
126
|
+
role?: OrgMemberRole;
|
|
127
|
+
}
|
|
128
|
+
interface OrgInviteMemberResponse {
|
|
129
|
+
message: string;
|
|
130
|
+
email: string;
|
|
131
|
+
role: OrgMemberRole;
|
|
132
|
+
}
|
|
115
133
|
declare class UserClient {
|
|
116
134
|
private readonly ctx?;
|
|
117
135
|
constructor(ctx?: PlatformContext | undefined);
|
|
@@ -124,9 +142,15 @@ declare class UserClient {
|
|
|
124
142
|
declare class OrganizationClient {
|
|
125
143
|
private readonly ctx?;
|
|
126
144
|
constructor(ctx?: PlatformContext | undefined);
|
|
145
|
+
private assertPermission;
|
|
127
146
|
currentId(): number | null;
|
|
128
147
|
currentRole(): string | null;
|
|
129
148
|
listMine(): Promise<OrgSummary[]>;
|
|
149
|
+
listMembers(): Promise<OrgMember[]>;
|
|
150
|
+
getMember(userId: string): Promise<OrgMember | null>;
|
|
151
|
+
getMemberByEmail(email: string): Promise<OrgMember | null>;
|
|
152
|
+
inviteMember(input: OrgInviteMemberInput): Promise<OrgInviteMemberResponse>;
|
|
153
|
+
updateMemberRole(userId: string, role: OrgMemberRole): Promise<OrgMember>;
|
|
130
154
|
}
|
|
131
155
|
|
|
132
156
|
declare function createPaletteClient(ctx?: PlatformContext): {
|
|
@@ -155,4 +179,4 @@ declare function hasPermission(ctx: PlatformContext, permission: string): boolea
|
|
|
155
179
|
declare function hasAnyPermission(ctx: PlatformContext, permissions: string[]): boolean;
|
|
156
180
|
declare function hasAllPermissions(ctx: PlatformContext, permissions: string[]): boolean;
|
|
157
181
|
|
|
158
|
-
export { DataRoom, DataRoomClient, type DataRoomContents, DataRoomFile, DataRoomFolder, type DataRoomUploadOptions, type InstallConfig, OrgSummary, OrganizationClient, PaletteApiError, type PaletteClient, PlatformContext, type SandboxBridge, StorageClient, User, UserClient, apiFetch, apiUpload, createMockPlatformContext, createPaletteClient, createSandboxBridge, dataRooms, errorFromResponse, getBaseUrl, getInstallConfig, hasAllPermissions, hasAnyPermission, hasPermission, isPaletteApiError, isSandboxRuntime, setBaseUrl, updateInstallConfig, uploadToSignedUrl, withPluginProvider };
|
|
182
|
+
export { DataRoom, DataRoomClient, type DataRoomContents, DataRoomFile, DataRoomFolder, type DataRoomUploadOptions, type InstallConfig, type OrgInviteMemberInput, type OrgInviteMemberResponse, type OrgMember, type OrgMemberRole, OrgSummary, OrganizationClient, PaletteApiError, type PaletteClient, PlatformContext, type SandboxBridge, StorageClient, User, UserClient, apiFetch, apiUpload, createMockPlatformContext, createPaletteClient, createSandboxBridge, dataRooms, errorFromResponse, getBaseUrl, getInstallConfig, hasAllPermissions, hasAnyPermission, hasPermission, isPaletteApiError, isSandboxRuntime, setBaseUrl, updateInstallConfig, uploadToSignedUrl, withPluginProvider };
|
package/dist/index.d.ts
CHANGED
|
@@ -112,6 +112,24 @@ declare class StorageClient {
|
|
|
112
112
|
uploadToSignedUrl: typeof uploadToSignedUrl;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
+
type OrgMemberRole = "owner" | "admin" | "member" | "viewer";
|
|
116
|
+
interface OrgMember {
|
|
117
|
+
id: string;
|
|
118
|
+
name: string;
|
|
119
|
+
email: string;
|
|
120
|
+
role: OrgMemberRole;
|
|
121
|
+
is_active: boolean;
|
|
122
|
+
joined_at: string;
|
|
123
|
+
}
|
|
124
|
+
interface OrgInviteMemberInput {
|
|
125
|
+
email: string;
|
|
126
|
+
role?: OrgMemberRole;
|
|
127
|
+
}
|
|
128
|
+
interface OrgInviteMemberResponse {
|
|
129
|
+
message: string;
|
|
130
|
+
email: string;
|
|
131
|
+
role: OrgMemberRole;
|
|
132
|
+
}
|
|
115
133
|
declare class UserClient {
|
|
116
134
|
private readonly ctx?;
|
|
117
135
|
constructor(ctx?: PlatformContext | undefined);
|
|
@@ -124,9 +142,15 @@ declare class UserClient {
|
|
|
124
142
|
declare class OrganizationClient {
|
|
125
143
|
private readonly ctx?;
|
|
126
144
|
constructor(ctx?: PlatformContext | undefined);
|
|
145
|
+
private assertPermission;
|
|
127
146
|
currentId(): number | null;
|
|
128
147
|
currentRole(): string | null;
|
|
129
148
|
listMine(): Promise<OrgSummary[]>;
|
|
149
|
+
listMembers(): Promise<OrgMember[]>;
|
|
150
|
+
getMember(userId: string): Promise<OrgMember | null>;
|
|
151
|
+
getMemberByEmail(email: string): Promise<OrgMember | null>;
|
|
152
|
+
inviteMember(input: OrgInviteMemberInput): Promise<OrgInviteMemberResponse>;
|
|
153
|
+
updateMemberRole(userId: string, role: OrgMemberRole): Promise<OrgMember>;
|
|
130
154
|
}
|
|
131
155
|
|
|
132
156
|
declare function createPaletteClient(ctx?: PlatformContext): {
|
|
@@ -155,4 +179,4 @@ declare function hasPermission(ctx: PlatformContext, permission: string): boolea
|
|
|
155
179
|
declare function hasAnyPermission(ctx: PlatformContext, permissions: string[]): boolean;
|
|
156
180
|
declare function hasAllPermissions(ctx: PlatformContext, permissions: string[]): boolean;
|
|
157
181
|
|
|
158
|
-
export { DataRoom, DataRoomClient, type DataRoomContents, DataRoomFile, DataRoomFolder, type DataRoomUploadOptions, type InstallConfig, OrgSummary, OrganizationClient, PaletteApiError, type PaletteClient, PlatformContext, type SandboxBridge, StorageClient, User, UserClient, apiFetch, apiUpload, createMockPlatformContext, createPaletteClient, createSandboxBridge, dataRooms, errorFromResponse, getBaseUrl, getInstallConfig, hasAllPermissions, hasAnyPermission, hasPermission, isPaletteApiError, isSandboxRuntime, setBaseUrl, updateInstallConfig, uploadToSignedUrl, withPluginProvider };
|
|
182
|
+
export { DataRoom, DataRoomClient, type DataRoomContents, DataRoomFile, DataRoomFolder, type DataRoomUploadOptions, type InstallConfig, type OrgInviteMemberInput, type OrgInviteMemberResponse, type OrgMember, type OrgMemberRole, OrgSummary, OrganizationClient, PaletteApiError, type PaletteClient, PlatformContext, type SandboxBridge, StorageClient, User, UserClient, apiFetch, apiUpload, createMockPlatformContext, createPaletteClient, createSandboxBridge, dataRooms, errorFromResponse, getBaseUrl, getInstallConfig, hasAllPermissions, hasAnyPermission, hasPermission, isPaletteApiError, isSandboxRuntime, setBaseUrl, updateInstallConfig, uploadToSignedUrl, withPluginProvider };
|
package/dist/index.js
CHANGED
|
@@ -395,6 +395,11 @@ var OrganizationClient = class {
|
|
|
395
395
|
constructor(ctx) {
|
|
396
396
|
this.ctx = ctx;
|
|
397
397
|
}
|
|
398
|
+
assertPermission(permission) {
|
|
399
|
+
if (this.ctx?.permissions && !this.ctx.permissions.includes(permission)) {
|
|
400
|
+
throw new Error(`App does not declare required permission: ${permission}`);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
398
403
|
currentId() {
|
|
399
404
|
return this.ctx?.organizationId ?? null;
|
|
400
405
|
}
|
|
@@ -406,6 +411,39 @@ var OrganizationClient = class {
|
|
|
406
411
|
const res = await apiFetch("/api/v1/auth/my-orgs");
|
|
407
412
|
return res.json();
|
|
408
413
|
}
|
|
414
|
+
async listMembers() {
|
|
415
|
+
this.assertPermission("members:read");
|
|
416
|
+
const res = await apiFetch("/api/v1/org/members");
|
|
417
|
+
return res.json();
|
|
418
|
+
}
|
|
419
|
+
async getMember(userId) {
|
|
420
|
+
const members = await this.listMembers();
|
|
421
|
+
return members.find((member) => member.id === userId) ?? null;
|
|
422
|
+
}
|
|
423
|
+
async getMemberByEmail(email) {
|
|
424
|
+
const normalizedEmail = email.trim().toLowerCase();
|
|
425
|
+
const members = await this.listMembers();
|
|
426
|
+
return members.find((member) => member.email.toLowerCase() === normalizedEmail) ?? null;
|
|
427
|
+
}
|
|
428
|
+
async inviteMember(input) {
|
|
429
|
+
this.assertPermission("members:write");
|
|
430
|
+
const res = await apiFetch("/api/v1/org/members", {
|
|
431
|
+
method: "POST",
|
|
432
|
+
body: JSON.stringify({
|
|
433
|
+
email: input.email,
|
|
434
|
+
role: input.role ?? "member"
|
|
435
|
+
})
|
|
436
|
+
});
|
|
437
|
+
return res.json();
|
|
438
|
+
}
|
|
439
|
+
async updateMemberRole(userId, role) {
|
|
440
|
+
this.assertPermission("members:write");
|
|
441
|
+
const res = await apiFetch(`/api/v1/org/members/${encodeURIComponent(userId)}/role`, {
|
|
442
|
+
method: "PATCH",
|
|
443
|
+
body: JSON.stringify({ role })
|
|
444
|
+
});
|
|
445
|
+
return res.json();
|
|
446
|
+
}
|
|
409
447
|
};
|
|
410
448
|
|
|
411
449
|
// src/palette-client.ts
|
package/dist/index.mjs
CHANGED
|
@@ -338,6 +338,11 @@ var OrganizationClient = class {
|
|
|
338
338
|
constructor(ctx) {
|
|
339
339
|
this.ctx = ctx;
|
|
340
340
|
}
|
|
341
|
+
assertPermission(permission) {
|
|
342
|
+
if (this.ctx?.permissions && !this.ctx.permissions.includes(permission)) {
|
|
343
|
+
throw new Error(`App does not declare required permission: ${permission}`);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
341
346
|
currentId() {
|
|
342
347
|
return this.ctx?.organizationId ?? null;
|
|
343
348
|
}
|
|
@@ -349,6 +354,39 @@ var OrganizationClient = class {
|
|
|
349
354
|
const res = await apiFetch("/api/v1/auth/my-orgs");
|
|
350
355
|
return res.json();
|
|
351
356
|
}
|
|
357
|
+
async listMembers() {
|
|
358
|
+
this.assertPermission("members:read");
|
|
359
|
+
const res = await apiFetch("/api/v1/org/members");
|
|
360
|
+
return res.json();
|
|
361
|
+
}
|
|
362
|
+
async getMember(userId) {
|
|
363
|
+
const members = await this.listMembers();
|
|
364
|
+
return members.find((member) => member.id === userId) ?? null;
|
|
365
|
+
}
|
|
366
|
+
async getMemberByEmail(email) {
|
|
367
|
+
const normalizedEmail = email.trim().toLowerCase();
|
|
368
|
+
const members = await this.listMembers();
|
|
369
|
+
return members.find((member) => member.email.toLowerCase() === normalizedEmail) ?? null;
|
|
370
|
+
}
|
|
371
|
+
async inviteMember(input) {
|
|
372
|
+
this.assertPermission("members:write");
|
|
373
|
+
const res = await apiFetch("/api/v1/org/members", {
|
|
374
|
+
method: "POST",
|
|
375
|
+
body: JSON.stringify({
|
|
376
|
+
email: input.email,
|
|
377
|
+
role: input.role ?? "member"
|
|
378
|
+
})
|
|
379
|
+
});
|
|
380
|
+
return res.json();
|
|
381
|
+
}
|
|
382
|
+
async updateMemberRole(userId, role) {
|
|
383
|
+
this.assertPermission("members:write");
|
|
384
|
+
const res = await apiFetch(`/api/v1/org/members/${encodeURIComponent(userId)}/role`, {
|
|
385
|
+
method: "PATCH",
|
|
386
|
+
body: JSON.stringify({ role })
|
|
387
|
+
});
|
|
388
|
+
return res.json();
|
|
389
|
+
}
|
|
352
390
|
};
|
|
353
391
|
|
|
354
392
|
// src/palette-client.ts
|