@nurama/sdk 1.4.0 → 1.4.1
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/dist/NuramaClient.d.ts +32 -0
- package/dist/NuramaClient.d.ts.map +1 -1
- package/dist/NuramaClient.js +38 -0
- package/dist/NuramaClient.js.map +1 -1
- package/dist/browser/nurama-bot-sdk.js +299 -28
- package/dist/browser/nurama-bot-sdk.min.js +1 -1
- package/dist/browser/nurama-sdk.js +299 -28
- package/dist/browser/nurama-sdk.min.js +1 -1
- package/dist/routes/bot.d.ts +60 -5
- package/dist/routes/bot.d.ts.map +1 -1
- package/dist/routes/bot.js +72 -0
- package/dist/routes/bot.js.map +1 -1
- package/dist/routes/joinLink.d.ts +51 -1
- package/dist/routes/joinLink.d.ts.map +1 -1
- package/dist/routes/joinLink.js +124 -0
- package/dist/routes/joinLink.js.map +1 -1
- package/dist/routes/oauthGrant.d.ts +45 -0
- package/dist/routes/oauthGrant.d.ts.map +1 -0
- package/dist/routes/oauthGrant.js +32 -0
- package/dist/routes/oauthGrant.js.map +1 -0
- package/dist/routes/socket.d.ts.map +1 -1
- package/dist/routes/socket.js +47 -29
- package/dist/routes/socket.js.map +1 -1
- package/dist/routes/token.d.ts +23 -1
- package/dist/routes/token.d.ts.map +1 -1
- package/dist/routes/token.js +22 -0
- package/dist/routes/token.js.map +1 -1
- package/dist/version.js +4 -4
- package/package.json +2 -2
- package/src/NuramaClient.ts +60 -0
- package/src/routes/bot.ts +104 -5
- package/src/routes/joinLink.ts +133 -0
- package/src/routes/oauthGrant.ts +64 -0
- package/src/routes/socket.ts +51 -33
- package/src/routes/token.ts +40 -1
- package/src/version.ts +4 -4
package/dist/routes/bot.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export interface BotApiKeySummary {
|
|
|
5
5
|
name: string;
|
|
6
6
|
/** Discriminator. Bot keys mint as 'botAccess'. */
|
|
7
7
|
kind?: 'botAccess' | 'pat' | 'oauthAccess' | 'oauthRefresh' | null;
|
|
8
|
-
/** Granted
|
|
8
|
+
/** Granted scopes. A bot key is minted with the full registry when none are chosen. */
|
|
9
9
|
scopes?: string[];
|
|
10
10
|
lastUsed?: string | null;
|
|
11
11
|
expiresAt?: string | null;
|
|
@@ -45,10 +45,10 @@ export interface CreateBotData {
|
|
|
45
45
|
* workspaceAdmin, workspaceMember, workspaceChatMember. */
|
|
46
46
|
roles: Array<'workspaceAdmin' | 'workspaceMember' | 'workspaceChatMember'>;
|
|
47
47
|
/**
|
|
48
|
-
* Optional API-key scopes.
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
48
|
+
* Optional API-key scopes. Omit (or pass an empty array) to mint the key
|
|
49
|
+
* with the full scope registry, which is what the bot's roles already allow
|
|
50
|
+
* — every route declares a scope now, so a genuinely empty set would leave
|
|
51
|
+
* the key unable to call anything. Pass a subset to narrow it.
|
|
52
52
|
*/
|
|
53
53
|
scopes?: string[];
|
|
54
54
|
}
|
|
@@ -67,6 +67,27 @@ export interface RotateBotKeyResponse {
|
|
|
67
67
|
/** New raw API key. Returned once. */
|
|
68
68
|
rawKey: string;
|
|
69
69
|
}
|
|
70
|
+
export interface CreateBotKeyData {
|
|
71
|
+
/** Label shown in the bot's key list. */
|
|
72
|
+
name: string;
|
|
73
|
+
/** Validated server-side against the token-scope registry. Omit for the full set. */
|
|
74
|
+
scopes?: string[];
|
|
75
|
+
/** Optional expiry, ISO 8601. Must be in the future. */
|
|
76
|
+
expiresAt?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface CreateBotKeyResponse {
|
|
79
|
+
apiKey: BotApiKeySummary;
|
|
80
|
+
/** Raw API key. Returned once and not recoverable afterwards. */
|
|
81
|
+
rawKey: string;
|
|
82
|
+
}
|
|
83
|
+
export interface UpdateBotKeyScopesData {
|
|
84
|
+
/**
|
|
85
|
+
* The COMPLETE new scope set, not a delta — the same shape `createBotKey`
|
|
86
|
+
* takes. At least one scope; a scopeless key authenticates and is then
|
|
87
|
+
* refused by every gated route, so revoke it instead of emptying it.
|
|
88
|
+
*/
|
|
89
|
+
scopes: string[];
|
|
90
|
+
}
|
|
70
91
|
export interface UpdateBotAvatarFileData {
|
|
71
92
|
name: string;
|
|
72
93
|
sizeInMB: number;
|
|
@@ -120,8 +141,42 @@ export default function createBotMethods(client: NuramaClient): {
|
|
|
120
141
|
/**
|
|
121
142
|
* Revoke the bot's current API key and issue a new one.
|
|
122
143
|
* The new raw key is returned once.
|
|
144
|
+
*
|
|
145
|
+
* The replacement carries the old key's scopes verbatim, so this is not a
|
|
146
|
+
* way to pick up scopes added to the registry since the key was minted —
|
|
147
|
+
* `updateBotKeyScopes` is.
|
|
123
148
|
*/
|
|
124
149
|
rotateBotKey(workspaceId: string, botId: string): Promise<RotateBotKeyResponse>;
|
|
150
|
+
/**
|
|
151
|
+
* Mint an ADDITIONAL API key for the bot, up to 5 live keys.
|
|
152
|
+
*
|
|
153
|
+
* Unlike `rotateBotKey`, the bot's existing keys keep working — which is
|
|
154
|
+
* what makes a zero-downtime changeover possible: mint, move traffic over,
|
|
155
|
+
* then revoke the old key. The raw key is returned once.
|
|
156
|
+
*/
|
|
157
|
+
createBotKey(workspaceId: string, botId: string, keyData: CreateBotKeyData): Promise<CreateBotKeyResponse>;
|
|
158
|
+
/**
|
|
159
|
+
* Replace the scopes on one of the bot's API keys, in place.
|
|
160
|
+
*
|
|
161
|
+
* A key's scopes are a snapshot taken when it was minted, and the registry
|
|
162
|
+
* grows — a key created before a scope existed cannot hold it. Rotation is
|
|
163
|
+
* not a substitute: `rotateBotKey` copies the old scope set onto the
|
|
164
|
+
* replacement, so a stale key stays stale through every rotation.
|
|
165
|
+
*
|
|
166
|
+
* This matters most for keys minted with `scopes` omitted, which means
|
|
167
|
+
* "the full registry" as it stood that day, not "whatever the full registry
|
|
168
|
+
* becomes".
|
|
169
|
+
*
|
|
170
|
+
* The secret is unchanged — every caller configured with this key keeps
|
|
171
|
+
* working, which is the whole point. Requires `canManageBots`.
|
|
172
|
+
*/
|
|
173
|
+
updateBotKeyScopes(workspaceId: string, botId: string, keyId: string, data: UpdateBotKeyScopesData): Promise<BotApiKeySummary>;
|
|
174
|
+
/**
|
|
175
|
+
* Revoke one of the bot's API keys, leaving its others working.
|
|
176
|
+
* A revoked key stops authenticating immediately and frees a slot
|
|
177
|
+
* against the 5-key cap.
|
|
178
|
+
*/
|
|
179
|
+
revokeBotKey(workspaceId: string, botId: string, keyId: string): Promise<void>;
|
|
125
180
|
/**
|
|
126
181
|
* Request signed URL data to upload a new avatar for the bot.
|
|
127
182
|
* Caller multipart-uploads the file to S3 using the returned `signedUrlData`,
|
package/dist/routes/bot.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../src/routes/bot.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,IAAI,CAAC,EAAE,WAAW,GAAG,KAAK,GAAG,aAAa,GAAG,cAAc,GAAG,IAAI,CAAC;IACnE,
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../src/routes/bot.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/bot.js
CHANGED
|
@@ -74,6 +74,10 @@ export default function createBotMethods(client) {
|
|
|
74
74
|
/**
|
|
75
75
|
* Revoke the bot's current API key and issue a new one.
|
|
76
76
|
* The new raw key is returned once.
|
|
77
|
+
*
|
|
78
|
+
* The replacement carries the old key's scopes verbatim, so this is not a
|
|
79
|
+
* way to pick up scopes added to the registry since the key was minted —
|
|
80
|
+
* `updateBotKeyScopes` is.
|
|
77
81
|
*/
|
|
78
82
|
async rotateBotKey(workspaceId, botId) {
|
|
79
83
|
if (!workspaceId)
|
|
@@ -86,6 +90,74 @@ export default function createBotMethods(client) {
|
|
|
86
90
|
sendJWT: true,
|
|
87
91
|
});
|
|
88
92
|
},
|
|
93
|
+
/**
|
|
94
|
+
* Mint an ADDITIONAL API key for the bot, up to 5 live keys.
|
|
95
|
+
*
|
|
96
|
+
* Unlike `rotateBotKey`, the bot's existing keys keep working — which is
|
|
97
|
+
* what makes a zero-downtime changeover possible: mint, move traffic over,
|
|
98
|
+
* then revoke the old key. The raw key is returned once.
|
|
99
|
+
*/
|
|
100
|
+
async createBotKey(workspaceId, botId, keyData) {
|
|
101
|
+
if (!workspaceId)
|
|
102
|
+
throw new Error('workspaceId is required.');
|
|
103
|
+
if (!botId)
|
|
104
|
+
throw new Error('botId is required.');
|
|
105
|
+
if (!keyData?.name)
|
|
106
|
+
throw new Error('name is required.');
|
|
107
|
+
return client._request({
|
|
108
|
+
method: 'POST',
|
|
109
|
+
endpoint: `/v1/workspaces/${workspaceId}/bots/${botId}/keys`,
|
|
110
|
+
body: keyData,
|
|
111
|
+
sendJWT: true,
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
/**
|
|
115
|
+
* Replace the scopes on one of the bot's API keys, in place.
|
|
116
|
+
*
|
|
117
|
+
* A key's scopes are a snapshot taken when it was minted, and the registry
|
|
118
|
+
* grows — a key created before a scope existed cannot hold it. Rotation is
|
|
119
|
+
* not a substitute: `rotateBotKey` copies the old scope set onto the
|
|
120
|
+
* replacement, so a stale key stays stale through every rotation.
|
|
121
|
+
*
|
|
122
|
+
* This matters most for keys minted with `scopes` omitted, which means
|
|
123
|
+
* "the full registry" as it stood that day, not "whatever the full registry
|
|
124
|
+
* becomes".
|
|
125
|
+
*
|
|
126
|
+
* The secret is unchanged — every caller configured with this key keeps
|
|
127
|
+
* working, which is the whole point. Requires `canManageBots`.
|
|
128
|
+
*/
|
|
129
|
+
async updateBotKeyScopes(workspaceId, botId, keyId, data) {
|
|
130
|
+
if (!workspaceId)
|
|
131
|
+
throw new Error('workspaceId is required.');
|
|
132
|
+
if (!botId)
|
|
133
|
+
throw new Error('botId is required.');
|
|
134
|
+
if (!keyId)
|
|
135
|
+
throw new Error('keyId is required.');
|
|
136
|
+
return client._request({
|
|
137
|
+
method: 'PATCH',
|
|
138
|
+
endpoint: `/v1/workspaces/${workspaceId}/bots/${botId}/keys/${keyId}`,
|
|
139
|
+
body: data,
|
|
140
|
+
sendJWT: true,
|
|
141
|
+
});
|
|
142
|
+
},
|
|
143
|
+
/**
|
|
144
|
+
* Revoke one of the bot's API keys, leaving its others working.
|
|
145
|
+
* A revoked key stops authenticating immediately and frees a slot
|
|
146
|
+
* against the 5-key cap.
|
|
147
|
+
*/
|
|
148
|
+
async revokeBotKey(workspaceId, botId, keyId) {
|
|
149
|
+
if (!workspaceId)
|
|
150
|
+
throw new Error('workspaceId is required.');
|
|
151
|
+
if (!botId)
|
|
152
|
+
throw new Error('botId is required.');
|
|
153
|
+
if (!keyId)
|
|
154
|
+
throw new Error('keyId is required.');
|
|
155
|
+
return client._request({
|
|
156
|
+
method: 'DELETE',
|
|
157
|
+
endpoint: `/v1/workspaces/${workspaceId}/bots/${botId}/keys/${keyId}`,
|
|
158
|
+
sendJWT: true,
|
|
159
|
+
});
|
|
160
|
+
},
|
|
89
161
|
/**
|
|
90
162
|
* Request signed URL data to upload a new avatar for the bot.
|
|
91
163
|
* Caller multipart-uploads the file to S3 using the returned `signedUrlData`,
|
package/dist/routes/bot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../../src/routes/bot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../../src/routes/bot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import NuramaClient from '../NuramaClient.js';
|
|
2
|
-
import { type JoinLink, type JoinLinkPreview, type CreateJoinLinkPayload, type UpdateJoinLinkPayload, type RedeemJoinLinkResult } from '@nurama/types';
|
|
2
|
+
import { type JoinLink, type JoinLinkPreview, type CreateJoinLinkPayload, type UpdateJoinLinkPayload, type RedeemJoinLinkResult, type ListJoinRequestsResponse, type ListMyJoinRequestsResponse, type ApproveJoinRequestResponse, type RejectJoinRequestRequest, type RejectJoinRequestResponse, type UpdateJoinRequestCooldownRequest, type ProjectJoinRequest, type ListBansResponse, type CreateResourceBanRequest, type ResourceBan } from '@nurama/types';
|
|
3
3
|
export interface GetJoinLinksParams {
|
|
4
4
|
projectId: string;
|
|
5
5
|
}
|
|
@@ -20,6 +20,56 @@ export default function createJoinLinkMethods(client: NuramaClient): {
|
|
|
20
20
|
createJoinLink(data: CreateJoinLinkPayload): Promise<JoinLinkResponse>;
|
|
21
21
|
/** List a project's join links. */
|
|
22
22
|
getJoinLinks(params: GetJoinLinksParams): Promise<JoinLinksListResponse>;
|
|
23
|
+
/** The queue of people waiting on a decision for this project. */
|
|
24
|
+
getJoinRequests(params: {
|
|
25
|
+
projectId: string;
|
|
26
|
+
}): Promise<ListJoinRequestsResponse>;
|
|
27
|
+
/**
|
|
28
|
+
* The caller's own requests still waiting on a decision.
|
|
29
|
+
*
|
|
30
|
+
* Needs no `projectId`: it is scoped server-side to the caller, who is not
|
|
31
|
+
* a member of the projects they are waiting on and so cannot read those
|
|
32
|
+
* projects' queues.
|
|
33
|
+
*/
|
|
34
|
+
getMyJoinRequests(): Promise<ListMyJoinRequestsResponse>;
|
|
35
|
+
/**
|
|
36
|
+
* Approve a request and admit the person.
|
|
37
|
+
*
|
|
38
|
+
* Seats and the link's remaining uses are re-checked here, not when the
|
|
39
|
+
* request was made — a queue outlives the capacity that existed when it was
|
|
40
|
+
* filled, so approval can legitimately fail on a seat limit.
|
|
41
|
+
*/
|
|
42
|
+
approveJoinRequest(requestId: string, projectId: string): Promise<ApproveJoinRequestResponse>;
|
|
43
|
+
/**
|
|
44
|
+
* Reject a request, optionally barring the person.
|
|
45
|
+
*
|
|
46
|
+
* Passing `ban` is destructive beyond the refusal: a ban REMOVES an existing
|
|
47
|
+
* membership, so it can take away access the person already had in scope.
|
|
48
|
+
* It is a separate field for that reason, never implied by the rejection.
|
|
49
|
+
*/
|
|
50
|
+
rejectJoinRequest(requestId: string, data: RejectJoinRequestRequest): Promise<RejectJoinRequestResponse>;
|
|
51
|
+
/**
|
|
52
|
+
* Change or lift the cooldown on a rejected request.
|
|
53
|
+
*
|
|
54
|
+
* Only a rejected request has one; `reapplyAfter: null` lifts it, letting
|
|
55
|
+
* the person ask again straight away. A barred person is refused — the ban
|
|
56
|
+
* already blocks every path, so lifting that is the action that matters.
|
|
57
|
+
*/
|
|
58
|
+
updateJoinRequestCooldown(requestId: string, data: UpdateJoinRequestCooldownRequest): Promise<ProjectJoinRequest>;
|
|
59
|
+
/**
|
|
60
|
+
* Bar someone, without a request to refuse.
|
|
61
|
+
*
|
|
62
|
+
* Destructive: the ban REMOVES every membership the person holds in its
|
|
63
|
+
* scope, so a `workspace` ban clears them out of every project in it. An
|
|
64
|
+
* owner cannot be barred, and neither can you bar yourself.
|
|
65
|
+
*/
|
|
66
|
+
createResourceBan(data: CreateResourceBanRequest): Promise<ResourceBan>;
|
|
67
|
+
/** People barred from this project, newest first. */
|
|
68
|
+
getResourceBans(params: {
|
|
69
|
+
projectId: string;
|
|
70
|
+
}): Promise<ListBansResponse>;
|
|
71
|
+
/** Lift a ban. It does not restore any membership the ban removed. */
|
|
72
|
+
liftResourceBan(banId: string): Promise<ResourceBan>;
|
|
23
73
|
/** Update a join link's settings (role, mode, domains, expiry, enable/disable). */
|
|
24
74
|
updateJoinLink(linkId: string, data: UpdateJoinLinkPayload): Promise<JoinLinkResponse>;
|
|
25
75
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"joinLink.d.ts","sourceRoot":"","sources":["../../src/routes/joinLink.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,
|
|
1
|
+
{"version":3,"file":"joinLink.d.ts","sourceRoot":"","sources":["../../src/routes/joinLink.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EACjB,MAAM,eAAe,CAAC;AAGvB,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AACxC,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,MAAM,EAAE,YAAY;IAE9D,wCAAwC;yBACb,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAS5E,mCAAmC;yBACR,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAU9E,kEAAkE;4BACpC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAUvF;;;;;;OAMG;yBACwB,OAAO,CAAC,0BAA0B,CAAC;IAQ9D;;;;;;OAMG;kCACiC,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAWnG;;;;;;OAMG;iCACgC,MAAM,QAAQ,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAW9G;;;;;;OAMG;yCAEU,MAAM,QACX,gCAAgC,GACrC,OAAO,CAAC,kBAAkB,CAAC;IAW9B;;;;;;OAMG;4BAC2B,wBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC;IAY7E,qDAAqD;4BACvB;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAU/E,sEAAsE;2BACzC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAS1D,mFAAmF;2BACtD,MAAM,QAAQ,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAU5F;;;OAGG;yBACwB,MAAM,cAAc,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAUxF;;;OAGG;0BACyB,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAS7D,qDAAqD;uBAC5B,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;EASlE"}
|
package/dist/routes/joinLink.js
CHANGED
|
@@ -28,6 +28,130 @@ export default function createJoinLinkMethods(client) {
|
|
|
28
28
|
sendJWT: true,
|
|
29
29
|
});
|
|
30
30
|
},
|
|
31
|
+
/** The queue of people waiting on a decision for this project. */
|
|
32
|
+
async getJoinRequests(params) {
|
|
33
|
+
if (!params?.projectId)
|
|
34
|
+
throw new Error('projectId is required.');
|
|
35
|
+
return client._request({
|
|
36
|
+
method: 'GET',
|
|
37
|
+
endpoint: '/v1/join-links/requests',
|
|
38
|
+
params,
|
|
39
|
+
sendJWT: true,
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
/**
|
|
43
|
+
* The caller's own requests still waiting on a decision.
|
|
44
|
+
*
|
|
45
|
+
* Needs no `projectId`: it is scoped server-side to the caller, who is not
|
|
46
|
+
* a member of the projects they are waiting on and so cannot read those
|
|
47
|
+
* projects' queues.
|
|
48
|
+
*/
|
|
49
|
+
async getMyJoinRequests() {
|
|
50
|
+
return client._request({
|
|
51
|
+
method: 'GET',
|
|
52
|
+
endpoint: '/v1/join-links/requests/mine',
|
|
53
|
+
sendJWT: true,
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
/**
|
|
57
|
+
* Approve a request and admit the person.
|
|
58
|
+
*
|
|
59
|
+
* Seats and the link's remaining uses are re-checked here, not when the
|
|
60
|
+
* request was made — a queue outlives the capacity that existed when it was
|
|
61
|
+
* filled, so approval can legitimately fail on a seat limit.
|
|
62
|
+
*/
|
|
63
|
+
async approveJoinRequest(requestId, projectId) {
|
|
64
|
+
if (!requestId)
|
|
65
|
+
throw new Error('requestId is required.');
|
|
66
|
+
if (!projectId)
|
|
67
|
+
throw new Error('projectId is required.');
|
|
68
|
+
return client._request({
|
|
69
|
+
method: 'POST',
|
|
70
|
+
endpoint: `/v1/join-links/requests/${requestId}/approve`,
|
|
71
|
+
body: { projectId },
|
|
72
|
+
sendJWT: true,
|
|
73
|
+
});
|
|
74
|
+
},
|
|
75
|
+
/**
|
|
76
|
+
* Reject a request, optionally barring the person.
|
|
77
|
+
*
|
|
78
|
+
* Passing `ban` is destructive beyond the refusal: a ban REMOVES an existing
|
|
79
|
+
* membership, so it can take away access the person already had in scope.
|
|
80
|
+
* It is a separate field for that reason, never implied by the rejection.
|
|
81
|
+
*/
|
|
82
|
+
async rejectJoinRequest(requestId, data) {
|
|
83
|
+
if (!requestId)
|
|
84
|
+
throw new Error('requestId is required.');
|
|
85
|
+
if (!data?.projectId)
|
|
86
|
+
throw new Error('projectId is required.');
|
|
87
|
+
return client._request({
|
|
88
|
+
method: 'POST',
|
|
89
|
+
endpoint: `/v1/join-links/requests/${requestId}/reject`,
|
|
90
|
+
body: data,
|
|
91
|
+
sendJWT: true,
|
|
92
|
+
});
|
|
93
|
+
},
|
|
94
|
+
/**
|
|
95
|
+
* Change or lift the cooldown on a rejected request.
|
|
96
|
+
*
|
|
97
|
+
* Only a rejected request has one; `reapplyAfter: null` lifts it, letting
|
|
98
|
+
* the person ask again straight away. A barred person is refused — the ban
|
|
99
|
+
* already blocks every path, so lifting that is the action that matters.
|
|
100
|
+
*/
|
|
101
|
+
async updateJoinRequestCooldown(requestId, data) {
|
|
102
|
+
if (!requestId)
|
|
103
|
+
throw new Error('requestId is required.');
|
|
104
|
+
if (!data?.projectId)
|
|
105
|
+
throw new Error('projectId is required.');
|
|
106
|
+
return client._request({
|
|
107
|
+
method: 'PATCH',
|
|
108
|
+
endpoint: `/v1/join-links/requests/${requestId}/cooldown`,
|
|
109
|
+
body: { projectId: data.projectId, reapplyAfter: data.reapplyAfter ?? null },
|
|
110
|
+
sendJWT: true,
|
|
111
|
+
});
|
|
112
|
+
},
|
|
113
|
+
/**
|
|
114
|
+
* Bar someone, without a request to refuse.
|
|
115
|
+
*
|
|
116
|
+
* Destructive: the ban REMOVES every membership the person holds in its
|
|
117
|
+
* scope, so a `workspace` ban clears them out of every project in it. An
|
|
118
|
+
* owner cannot be barred, and neither can you bar yourself.
|
|
119
|
+
*/
|
|
120
|
+
async createResourceBan(data) {
|
|
121
|
+
if (!data?.projectId)
|
|
122
|
+
throw new Error('projectId is required.');
|
|
123
|
+
if (!data?.userId)
|
|
124
|
+
throw new Error('userId is required.');
|
|
125
|
+
if (!data?.scope)
|
|
126
|
+
throw new Error('scope is required.');
|
|
127
|
+
return client._request({
|
|
128
|
+
method: 'POST',
|
|
129
|
+
endpoint: '/v1/join-links/bans',
|
|
130
|
+
body: data,
|
|
131
|
+
sendJWT: true,
|
|
132
|
+
});
|
|
133
|
+
},
|
|
134
|
+
/** People barred from this project, newest first. */
|
|
135
|
+
async getResourceBans(params) {
|
|
136
|
+
if (!params?.projectId)
|
|
137
|
+
throw new Error('projectId is required.');
|
|
138
|
+
return client._request({
|
|
139
|
+
method: 'GET',
|
|
140
|
+
endpoint: '/v1/join-links/bans',
|
|
141
|
+
params,
|
|
142
|
+
sendJWT: true,
|
|
143
|
+
});
|
|
144
|
+
},
|
|
145
|
+
/** Lift a ban. It does not restore any membership the ban removed. */
|
|
146
|
+
async liftResourceBan(banId) {
|
|
147
|
+
if (!banId)
|
|
148
|
+
throw new Error('banId is required.');
|
|
149
|
+
return client._request({
|
|
150
|
+
method: 'DELETE',
|
|
151
|
+
endpoint: `/v1/join-links/bans/${banId}`,
|
|
152
|
+
sendJWT: true,
|
|
153
|
+
});
|
|
154
|
+
},
|
|
31
155
|
/** Update a join link's settings (role, mode, domains, expiry, enable/disable). */
|
|
32
156
|
async updateJoinLink(linkId, data) {
|
|
33
157
|
if (!linkId)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"joinLink.js","sourceRoot":"","sources":["../../src/routes/joinLink.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"joinLink.js","sourceRoot":"","sources":["../../src/routes/joinLink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import NuramaClient from '../NuramaClient.js';
|
|
2
|
+
/**
|
|
3
|
+
* One application a user has authorised over OAuth.
|
|
4
|
+
*
|
|
5
|
+
* A grant is the record of consent: the scopes approved, and the tie binding
|
|
6
|
+
* every token issued under it. Revoking one withdraws the application's
|
|
7
|
+
* access.
|
|
8
|
+
*/
|
|
9
|
+
export interface OAuthGrantSummary {
|
|
10
|
+
/** Opaque identifier; pass to `revokeGrant`. */
|
|
11
|
+
grantId: string;
|
|
12
|
+
clientId: string | null;
|
|
13
|
+
/**
|
|
14
|
+
* The application's name.
|
|
15
|
+
*
|
|
16
|
+
* Chosen by the application itself when `verified` is false — treat it as
|
|
17
|
+
* display text from an untrusted source, never as identification.
|
|
18
|
+
*/
|
|
19
|
+
clientName: string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Whether Nurama configured this application.
|
|
22
|
+
*
|
|
23
|
+
* False for one that registered itself through Dynamic Client Registration:
|
|
24
|
+
* it picked its own name and nobody reviewed it.
|
|
25
|
+
*/
|
|
26
|
+
verified: boolean;
|
|
27
|
+
/** Scopes the user approved, from the backend's token-scope registry. */
|
|
28
|
+
scopes: string[];
|
|
29
|
+
grantedAt: string;
|
|
30
|
+
expiresAt: string | null;
|
|
31
|
+
}
|
|
32
|
+
export default function createOAuthGrantMethods(client: NuramaClient): {
|
|
33
|
+
/**
|
|
34
|
+
* List the applications the caller has authorised, newest first.
|
|
35
|
+
* Expired grants are omitted by the server.
|
|
36
|
+
*/
|
|
37
|
+
listGrants(): Promise<OAuthGrantSummary[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Withdraw an application's access: the grant and every token issued
|
|
40
|
+
* under it. An access token already in flight stays valid until it
|
|
41
|
+
* expires, so revocation is not instantaneous for a request under way.
|
|
42
|
+
*/
|
|
43
|
+
revokeGrant(grantId: string): Promise<void>;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=oauthGrant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauthGrant.d.ts","sourceRoot":"","sources":["../../src/routes/oauthGrant.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,MAAM,EAAE,YAAY;IAEhE;;;OAGG;kBACiB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAUhD;;;;OAIG;yBACwB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EASpD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export default function createOAuthGrantMethods(client) {
|
|
2
|
+
return {
|
|
3
|
+
/**
|
|
4
|
+
* List the applications the caller has authorised, newest first.
|
|
5
|
+
* Expired grants are omitted by the server.
|
|
6
|
+
*/
|
|
7
|
+
async listGrants() {
|
|
8
|
+
const res = await client._request({
|
|
9
|
+
method: 'GET',
|
|
10
|
+
endpoint: '/v1/oauth-grants',
|
|
11
|
+
sendJWT: true,
|
|
12
|
+
bypassCache: true,
|
|
13
|
+
});
|
|
14
|
+
return res.results;
|
|
15
|
+
},
|
|
16
|
+
/**
|
|
17
|
+
* Withdraw an application's access: the grant and every token issued
|
|
18
|
+
* under it. An access token already in flight stays valid until it
|
|
19
|
+
* expires, so revocation is not instantaneous for a request under way.
|
|
20
|
+
*/
|
|
21
|
+
async revokeGrant(grantId) {
|
|
22
|
+
if (!grantId)
|
|
23
|
+
throw new Error('grantId is required.');
|
|
24
|
+
return client._request({
|
|
25
|
+
method: 'DELETE',
|
|
26
|
+
endpoint: `/v1/oauth-grants/${grantId}`,
|
|
27
|
+
sendJWT: true,
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=oauthGrant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauthGrant.js","sourceRoot":"","sources":["../../src/routes/oauthGrant.ts"],"names":[],"mappings":"AAiCA,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,MAAoB;IAClE,OAAO;QACL;;;WAGG;QACH,KAAK,CAAC,UAAU;YACd,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAmC;gBAClE,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,kBAAkB;gBAC5B,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,OAAO,CAAC;QACrB,CAAC;QAED;;;;WAIG;QACH,KAAK,CAAC,WAAW,CAAC,OAAe;YAC/B,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACtD,OAAO,MAAM,CAAC,QAAQ,CAAO;gBAC3B,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,oBAAoB,OAAO,EAAE;gBACvC,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/routes/socket.ts"],"names":[],"mappings":"AAEA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAG9C,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;IAChE,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAI9C,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;CAC5E;AAGD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,QAAQ,CAAC;IACjC,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,GAAG,CAAA;SAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,GAAG,CAAC;YAAC,WAAW,CAAC,EAAE,GAAG,CAAC;YAAC,WAAW,CAAC,EAAE,GAAG,CAAA;SAAE,CAAC,CAAC;QAClH,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC9D,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAErC;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,MAAM,EAAE,eAAe,CAAC;IACxB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC;CACtD;
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/routes/socket.ts"],"names":[],"mappings":"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"}
|