@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.
@@ -14,6 +14,31 @@ const LIFECYCLE_LISTENER_EVENTS = new Set([
14
14
  'reconnect_failed',
15
15
  'reconnect',
16
16
  ]);
17
+ /** First reconnect delay; socket.io doubles it per failed attempt, up to RECONNECTION_DELAY_MAX, ±50% jitter. */
18
+ const RECONNECTION_DELAY = 1000;
19
+ const RECONNECTION_DELAY_MAX = 30000;
20
+ /**
21
+ * Extra first-retry delay, up to this, after the SERVER closed the connection ("transport close"): a ws deploy
22
+ * or restart drops every client of that server at once, and without it they would all reconnect within the
23
+ * same second. Network drops ("ping timeout", "transport error") keep the normal 1s retry.
24
+ */
25
+ const SERVER_CLOSE_RECONNECT_SPREAD = 10000;
26
+ /**
27
+ * Spread reconnects after a server-side close (see SERVER_CLOSE_RECONNECT_SPREAD). Sets the manager's next
28
+ * delay from the socket's 'disconnect', which socket.io emits before it schedules the retry, and restores the
29
+ * normal delay on 'connect'. Channels share one manager, so the last channel's draw wins, which is fine.
30
+ */
31
+ const spreadReconnectAfterServerClose = (socket) => {
32
+ const manager = socket.io;
33
+ if (typeof manager?.reconnectionDelay !== 'function')
34
+ return;
35
+ socket.on('disconnect', (reason) => {
36
+ if (reason === 'transport close') {
37
+ manager.reconnectionDelay(RECONNECTION_DELAY + Math.random() * SERVER_CLOSE_RECONNECT_SPREAD);
38
+ }
39
+ });
40
+ socket.on('connect', () => manager.reconnectionDelay(RECONNECTION_DELAY));
41
+ };
17
42
  export default function createSocketMethods(client) {
18
43
  // Track active socket connections
19
44
  const activeConnections = {};
@@ -104,9 +129,12 @@ export default function createSocketMethods(client) {
104
129
  query: { token },
105
130
  // Reconnection configuration for resilience
106
131
  reconnection: socketOptions.autoReconnect,
107
- reconnectionAttempts: 10, // Maximum reconnection attempts before giving up
108
- reconnectionDelay: 1000, // Start with 1 second delay
109
- reconnectionDelayMax: 30000, // Max delay of 30 seconds between attempts
132
+ // Never give up: the server may refuse connections for a while (busy, or a deploy draining), and after a
133
+ // final failure socket.io stops for good without telling the app (the manager's 'reconnect_failed' never
134
+ // reaches socket listeners). Retries settle at one every ~30s.
135
+ reconnectionAttempts: Infinity,
136
+ reconnectionDelay: RECONNECTION_DELAY,
137
+ reconnectionDelayMax: RECONNECTION_DELAY_MAX,
110
138
  randomizationFactor: 0.5, // Add jitter to avoid thundering herd problem
111
139
  // Connection timeout
112
140
  timeout: 20000, // 20 seconds to establish initial connection
@@ -127,13 +155,25 @@ export default function createSocketMethods(client) {
127
155
  // even before the connection is fully established. Socket.io preserves
128
156
  // handlers across reconnections, so they will fire once connected.
129
157
  activeConnections[channel] = socketChannel;
158
+ spreadReconnectAfterServerClose(socket);
130
159
  // Setup event listeners
131
160
  return new Promise((resolve, reject) => {
132
161
  let settled = false;
162
+ let hasConnected = false;
133
163
  // Handle connection (initial or after reconnection)
134
164
  socket.on('connect', () => {
135
165
  _log(`Connected to channel: ${channel}`);
136
166
  activeConnections[channel] = socketChannel;
167
+ if (hasConnected) {
168
+ // A second 'connect' on the same socket is socket.io reconnecting it (the manager emits 'reconnect',
169
+ // but socket listeners never see that). Notify app-level onReconnect listeners so they can
170
+ // REST-refetch any gap of server->client messages missed while the transport was down (socket.io has
171
+ // no replay across a reconnect).
172
+ _log(`Reconnected to channel ${channel}`);
173
+ const reconnectListeners = socketChannel.listeners['reconnect'] || new Set();
174
+ reconnectListeners.forEach(listener => listener({ type: 'reconnect' }));
175
+ }
176
+ hasConnected = true;
137
177
  if (!settled) {
138
178
  settled = true;
139
179
  resolve(socketChannel);
@@ -150,21 +190,6 @@ export default function createSocketMethods(client) {
150
190
  resolve(socketChannel);
151
191
  }
152
192
  });
153
- // Handle reconnection attempts
154
- socket.on('reconnect_attempt', (attempt) => {
155
- _log(`Reconnection attempt ${attempt} for channel: ${channel}`);
156
- });
157
- // Handle successful reconnection
158
- socket.on('reconnect', (attempt) => {
159
- _log(`Reconnected to channel ${channel} after ${attempt} attempts`);
160
- // Ensure activeConnections is up to date after reconnect
161
- activeConnections[channel] = socketChannel;
162
- // Notify app-level onReconnect listeners so they can REST-refetch any
163
- // gap of server->client messages missed while the transport was down
164
- // (socket.io has no replay across a reconnect).
165
- const reconnectListeners = socketChannel.listeners['reconnect'] || new Set();
166
- reconnectListeners.forEach(listener => listener({ type: 'reconnect', attempt }));
167
- });
168
193
  // Handle reconnection failure — only reject when socket.io gives up entirely
169
194
  socket.on('reconnect_failed', () => {
170
195
  _log(`Reconnection failed for channel ${channel} after maximum attempts`);
@@ -287,9 +312,9 @@ export default function createSocketMethods(client) {
287
312
  query: { publicToken },
288
313
  // Reconnection configuration for resilience
289
314
  reconnection: socketOptions.autoReconnect,
290
- reconnectionAttempts: 10,
291
- reconnectionDelay: 1000,
292
- reconnectionDelayMax: 30000,
315
+ reconnectionAttempts: Infinity, // as connect(): never give up silently
316
+ reconnectionDelay: RECONNECTION_DELAY,
317
+ reconnectionDelayMax: RECONNECTION_DELAY_MAX,
293
318
  randomizationFactor: 0.5,
294
319
  // Connection timeout
295
320
  timeout: 20000,
@@ -305,6 +330,7 @@ export default function createSocketMethods(client) {
305
330
  channel,
306
331
  listeners: {},
307
332
  };
333
+ spreadReconnectAfterServerClose(socket);
308
334
  // Setup event listeners
309
335
  return new Promise((resolve, reject) => {
310
336
  // Handle connection
@@ -318,14 +344,6 @@ export default function createSocketMethods(client) {
318
344
  _log(`Connection error for public channel ${channel}:`, error);
319
345
  reject(error);
320
346
  });
321
- // Handle reconnection attempts
322
- socket.on('reconnect_attempt', (attempt) => {
323
- _log(`Reconnection attempt ${attempt} for public channel: ${channel}`);
324
- });
325
- // Handle successful reconnection
326
- socket.on('reconnect', (attempt) => {
327
- _log(`Reconnected to public channel ${channel} after ${attempt} attempts`);
328
- });
329
347
  // Handle reconnection failure
330
348
  socket.on('reconnect_failed', () => {
331
349
  _log(`Reconnection failed for public channel ${channel} after maximum attempts`);
@@ -1 +1 @@
1
- {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/routes/socket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/routes/socket.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ export type TokenKind = 'pat' | 'oauthAccess' | 'oauthRefresh' | 'botAccess';
12
12
  * adding it here too (or callers fall back to `string` when they
13
13
  * accept arbitrary scopes from configuration).
14
14
  */
15
- export type TokenScope = 'chat:read' | 'chat:write' | 'tasks:read' | 'tasks:write' | 'assets:read' | 'assets:write' | 'projects:read' | 'workspaces:read';
15
+ export type TokenScope = 'chat:read' | 'chat:write' | 'tasks:read' | 'tasks:write' | 'assets:read' | 'assets:write' | 'projects:read' | 'projects:write' | 'workspaces:read' | 'workspaces:write' | 'convos:read' | 'convos:write' | 'notifications:read' | 'notifications:write' | 'ai:use';
16
16
  /**
17
17
  * The shape returned by `listTokens` and (without the `token` field)
18
18
  * the metadata half of `createToken`. Never includes the raw secret —
@@ -37,6 +37,15 @@ export interface CreateTokenData {
37
37
  /** Optional ISO date. Null / omitted = non-expiring. */
38
38
  expiresAt?: string | null;
39
39
  }
40
+ export interface UpdateTokenScopesData {
41
+ /**
42
+ * The COMPLETE new scope set, not a delta — the same shape
43
+ * `createToken` takes, so what a token may do is always stated in
44
+ * full rather than accumulated through edits nobody can review.
45
+ * At least one scope.
46
+ */
47
+ scopes: TokenScope[];
48
+ }
40
49
  export interface CreateTokenResponse extends TokenSummary {
41
50
  /**
42
51
  * The raw secret. Returned ONLY in this response. The server keeps a
@@ -66,6 +75,19 @@ export default function createTokenMethods(client: NuramaClient): {
66
75
  * management screens instead.
67
76
  */
68
77
  listTokens(): Promise<TokenSummary[]>;
78
+ /**
79
+ * Replace the scopes on one of the caller's Personal Access Tokens.
80
+ *
81
+ * `scopes` is the complete new set, not a delta. This exists because
82
+ * the scope registry grows over time: a token minted before a scope
83
+ * existed cannot hold it, and without this the only remedy is minting
84
+ * a replacement and reconfiguring everywhere the old one is used.
85
+ *
86
+ * The change takes effect on the token's very next request. Scopes
87
+ * remain a ceiling, never a floor — widening a token never lets it do
88
+ * anything its owner cannot already do.
89
+ */
90
+ updateTokenScopes(tokenId: string, data: UpdateTokenScopesData): Promise<TokenSummary>;
69
91
  /**
70
92
  * Revoke one of the caller's Personal Access Tokens. The revocation
71
93
  * is immediate — the token will return 401 on the very next request.
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/routes/token.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,CAAC;AAE7E;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAClB,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,aAAa,GACb,cAAc,GACd,eAAe,GACf,iBAAiB,CAAC;AAEtB;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,MAAM,EAAE,YAAY;IAE3D;;;;OAIG;sBACqB,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAStE;;;;;OAKG;kBACiB,OAAO,CAAC,YAAY,EAAE,CAAC;IAS3C;;;OAGG;yBACwB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EASpD"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/routes/token.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,CAAC;AAE7E;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAClB,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,aAAa,GACb,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,iBAAiB,GACjB,kBAAkB,GAClB,aAAa,GACb,cAAc,GACd,oBAAoB,GACpB,qBAAqB,GACrB,QAAQ,CAAC;AAEb;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,MAAM,EAAE,YAAY;IAE3D;;;;OAIG;sBACqB,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAStE;;;;;OAKG;kBACiB,OAAO,CAAC,YAAY,EAAE,CAAC;IAS3C;;;;;;;;;;;OAWG;+BAC8B,MAAM,QAAQ,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;IAU5F;;;OAGG;yBACwB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EASpD"}
@@ -33,6 +33,28 @@ export default function createTokenMethods(client) {
33
33
  bypassCache: true,
34
34
  });
35
35
  },
36
+ /**
37
+ * Replace the scopes on one of the caller's Personal Access Tokens.
38
+ *
39
+ * `scopes` is the complete new set, not a delta. This exists because
40
+ * the scope registry grows over time: a token minted before a scope
41
+ * existed cannot hold it, and without this the only remedy is minting
42
+ * a replacement and reconfiguring everywhere the old one is used.
43
+ *
44
+ * The change takes effect on the token's very next request. Scopes
45
+ * remain a ceiling, never a floor — widening a token never lets it do
46
+ * anything its owner cannot already do.
47
+ */
48
+ async updateTokenScopes(tokenId, data) {
49
+ if (!tokenId)
50
+ throw new Error('tokenId is required.');
51
+ return client._request({
52
+ method: 'PATCH',
53
+ endpoint: `/v1/tokens/${tokenId}`,
54
+ body: data,
55
+ sendJWT: true,
56
+ });
57
+ },
36
58
  /**
37
59
  * Revoke one of the caller's Personal Access Tokens. The revocation
38
60
  * is immediate — the token will return 401 on the very next request.
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/routes/token.ts"],"names":[],"mappings":"AA8DA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,MAAoB;IAC7D,OAAO;QACL;;;;WAIG;QACH,KAAK,CAAC,WAAW,CAAC,IAAqB;YACrC,OAAO,MAAM,CAAC,QAAQ,CAAsB;gBAC1C,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,YAAY;gBACtB,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;QAED;;;;;WAKG;QACH,KAAK,CAAC,UAAU;YACd,OAAO,MAAM,CAAC,QAAQ,CAAiB;gBACrC,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED;;;WAGG;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,cAAc,OAAO,EAAE;gBACjC,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/routes/token.ts"],"names":[],"mappings":"AA+EA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,MAAoB;IAC7D,OAAO;QACL;;;;WAIG;QACH,KAAK,CAAC,WAAW,CAAC,IAAqB;YACrC,OAAO,MAAM,CAAC,QAAQ,CAAsB;gBAC1C,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,YAAY;gBACtB,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;QAED;;;;;WAKG;QACH,KAAK,CAAC,UAAU;YACd,OAAO,MAAM,CAAC,QAAQ,CAAiB;gBACrC,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;QAED;;;;;;;;;;;WAWG;QACH,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,IAA2B;YAClE,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACtD,OAAO,MAAM,CAAC,QAAQ,CAAe;gBACnC,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,cAAc,OAAO,EAAE;gBACjC,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;QAED;;;WAGG;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,cAAc,OAAO,EAAE;gBACjC,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/version.js CHANGED
@@ -3,10 +3,10 @@
3
3
  * AUTO-GENERATED by scripts/generate-version-info.cjs - DO NOT EDIT MANUALLY
4
4
  */
5
5
  export const SDK_VERSION = {
6
- version: '1.4.0',
7
- buildTimestamp: '2026-10-03T16:23:07.694Z',
8
- buildHash: '60ddbec0797c9d1bdf96aaf49b69dda5',
9
- gitCommit: 'c000da4',
6
+ version: '1.4.1',
7
+ buildTimestamp: '2026-10-10T06:58:40.258Z',
8
+ buildHash: 'f6505e2eb9725dc8d239bb401ced8f88',
9
+ gitCommit: '1c00e18',
10
10
  dirty: false,
11
11
  };
12
12
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nurama/sdk",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Provides API, web-socket, and additional utilities for interfacing with the Nurama platform.",
5
5
  "main": "dist/NuramaClient.js",
6
6
  "module": "dist/NuramaClient.js",
@@ -33,7 +33,7 @@
33
33
  "dependencies": {
34
34
  "jwt-decode": "^4.0.0",
35
35
  "socket.io-client": "^4.7.2",
36
- "@nurama/types": "1.4.0"
36
+ "@nurama/types": "1.4.1"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/jest": "^29.5.14",
@@ -36,6 +36,7 @@ import createBlogPostsMethods from './routes/blogPosts.js';
36
36
  import createCreditsMethods from './routes/credits.js';
37
37
  import createScratchMethods from './routes/scratch.js';
38
38
  import createTokenMethods from './routes/token.js';
39
+ import createOAuthGrantMethods from './routes/oauthGrant.js';
39
40
  import createWebhookMethods from './routes/webhook.js';
40
41
  import createSupportTicketMethods from './routes/supportTicket.js';
41
42
  import { SDK_VERSION, type SDKVersionInfo } from './version.js';
@@ -100,6 +101,14 @@ export interface NuramaClientOptions {
100
101
  * message instead of failing silently. */
101
102
  onMaintenance?: () => void;
102
103
 
104
+ /**
105
+ * Invoked whenever the client's tokens change (login, MFA completion, refresh,
106
+ * logout, or a failed refresh clearing the session). Lets non-browser hosts
107
+ * (e.g. React Native) persist the session in their own secure storage; pair
108
+ * with `restoreSession()` on startup. Not called by `restoreSession()` itself.
109
+ */
110
+ onTokensChanged?: (session: NuramaSession | null) => void;
111
+
103
112
  /**
104
113
  * Long-lived API key to use for every request (e.g., a bot API key starting with `nrm_bot_`).
105
114
  * When set, the client skips JWT refresh logic and uses the key as the bearer token.
@@ -107,6 +116,14 @@ export interface NuramaClientOptions {
107
116
  apiKey?: string;
108
117
  }
109
118
 
119
+ /** A persisted session: the token pair plus their ISO expiry timestamps. */
120
+ export interface NuramaSession {
121
+ accessToken: string | null;
122
+ refreshToken: string | null;
123
+ accessTokenExpiry: string | null;
124
+ refreshTokenExpiry: string | null;
125
+ }
126
+
110
127
  interface RequestParams {
111
128
  [key: string]: any; // Allows any query parameters
112
129
  }
@@ -199,6 +216,7 @@ type BlogPostsMethods = ReturnType<typeof createBlogPostsMethods>;
199
216
  type CreditsMethods = ReturnType<typeof createCreditsMethods>;
200
217
  type ScratchMethods = ReturnType<typeof createScratchMethods>;
201
218
  type TokenMethods = ReturnType<typeof createTokenMethods>;
219
+ type OAuthGrantMethods = ReturnType<typeof createOAuthGrantMethods>;
202
220
  type WebhookMethods = ReturnType<typeof createWebhookMethods>;
203
221
  type SupportTicketMethods = ReturnType<typeof createSupportTicketMethods>;
204
222
 
@@ -223,6 +241,7 @@ class NuramaClient {
223
241
  readonly invalidateCacheOnMutation: boolean;
224
242
  private readonly _onUnauthorized?: (reason?: { type?: string }) => void;
225
243
  private readonly _onMaintenance?: () => void;
244
+ private readonly _onTokensChanged?: (session: NuramaSession | null) => void;
226
245
 
227
246
  private _accessToken: string | null = null;
228
247
  private _refreshTokenValue: string | null = null;
@@ -273,6 +292,9 @@ class NuramaClient {
273
292
  public credits: CreditsMethods;
274
293
  public scratch: ScratchMethods;
275
294
  public token: TokenMethods;
295
+
296
+ /** Connected applications: what the user has authorised over OAuth. */
297
+ public oauthGrant: OAuthGrantMethods;
276
298
  public webhook: WebhookMethods;
277
299
  public supportTicket: SupportTicketMethods;
278
300
 
@@ -325,6 +347,7 @@ class NuramaClient {
325
347
  this.invalidateCacheOnMutation = options.invalidateCacheOnMutation === undefined ? true : options.invalidateCacheOnMutation;
326
348
  this._onUnauthorized = options.onUnauthorized;
327
349
  this._onMaintenance = options.onMaintenance;
350
+ this._onTokensChanged = options.onTokensChanged;
328
351
  this._apiKey = options.apiKey || null;
329
352
 
330
353
  if (this.browserMode && !this._apiKey) {
@@ -367,6 +390,7 @@ class NuramaClient {
367
390
  this.credits = createCreditsMethods(this);
368
391
  this.scratch = createScratchMethods(this);
369
392
  this.token = createTokenMethods(this);
393
+ this.oauthGrant = createOAuthGrantMethods(this);
370
394
  this.webhook = createWebhookMethods(this);
371
395
  this.supportTicket = createSupportTicketMethods(this);
372
396
  }
@@ -642,6 +666,42 @@ class NuramaClient {
642
666
  console.error('Failed to save tokens to localStorage:', e);
643
667
  }
644
668
  }
669
+
670
+ if (this._onTokensChanged) {
671
+ try {
672
+ this._onTokensChanged(accessToken || refreshToken ? this.getSession() : null);
673
+ } catch (e) {
674
+ console.error('onTokensChanged handler threw:', e);
675
+ }
676
+ }
677
+ }
678
+
679
+ /**
680
+ * Returns the current session (tokens and expiries), or null when signed out.
681
+ * @public
682
+ */
683
+ public getSession(): NuramaSession | null {
684
+ if (!this._accessToken && !this._refreshTokenValue) return null;
685
+ return {
686
+ accessToken: this._accessToken,
687
+ refreshToken: this._refreshTokenValue,
688
+ accessTokenExpiry: this._accessTokenExpiry,
689
+ refreshTokenExpiry: this._refreshTokenExpiry,
690
+ };
691
+ }
692
+
693
+ /**
694
+ * Restores a session previously captured through `onTokensChanged` /
695
+ * `getSession()` — for hosts that persist tokens outside localStorage.
696
+ * Does not fire `onTokensChanged`. A missing or expired access token is
697
+ * refreshed on the next authenticated request.
698
+ * @public
699
+ */
700
+ public restoreSession(session: NuramaSession | null): void {
701
+ this._accessToken = session?.accessToken ?? null;
702
+ this._refreshTokenValue = session?.refreshToken ?? null;
703
+ this._accessTokenExpiry = session?.accessTokenExpiry ?? null;
704
+ this._refreshTokenExpiry = session?.refreshTokenExpiry ?? null;
645
705
  }
646
706
 
647
707
  /**
package/src/routes/bot.ts CHANGED
@@ -6,7 +6,7 @@ export interface BotApiKeySummary {
6
6
  name: string;
7
7
  /** Discriminator. Bot keys mint as 'botAccess'. */
8
8
  kind?: 'botAccess' | 'pat' | 'oauthAccess' | 'oauthRefresh' | null;
9
- /** Granted action verbs. Empty array = unscoped (legacy). */
9
+ /** Granted scopes. A bot key is minted with the full registry when none are chosen. */
10
10
  scopes?: string[];
11
11
  lastUsed?: string | null;
12
12
  expiresAt?: string | null;
@@ -49,10 +49,10 @@ export interface CreateBotData {
49
49
  * workspaceAdmin, workspaceMember, workspaceChatMember. */
50
50
  roles: Array<'workspaceAdmin' | 'workspaceMember' | 'workspaceChatMember'>;
51
51
  /**
52
- * Optional API-key scopes. Defaults to [] (legacy — bot key can call
53
- * any route that isn't yet scope-gated). Once a route is gated by
54
- * `requireTokenScope` the bot needs the matching scope here for that
55
- * route to work.
52
+ * Optional API-key scopes. Omit (or pass an empty array) to mint the key
53
+ * with the full scope registry, which is what the bot's roles already allow
54
+ * — every route declares a scope now, so a genuinely empty set would leave
55
+ * the key unable to call anything. Pass a subset to narrow it.
56
56
  */
57
57
  scopes?: string[];
58
58
  }
@@ -75,6 +75,30 @@ export interface RotateBotKeyResponse {
75
75
  rawKey: string;
76
76
  }
77
77
 
78
+ export interface CreateBotKeyData {
79
+ /** Label shown in the bot's key list. */
80
+ name: string;
81
+ /** Validated server-side against the token-scope registry. Omit for the full set. */
82
+ scopes?: string[];
83
+ /** Optional expiry, ISO 8601. Must be in the future. */
84
+ expiresAt?: string;
85
+ }
86
+
87
+ export interface CreateBotKeyResponse {
88
+ apiKey: BotApiKeySummary;
89
+ /** Raw API key. Returned once and not recoverable afterwards. */
90
+ rawKey: string;
91
+ }
92
+
93
+ export interface UpdateBotKeyScopesData {
94
+ /**
95
+ * The COMPLETE new scope set, not a delta — the same shape `createBotKey`
96
+ * takes. At least one scope; a scopeless key authenticates and is then
97
+ * refused by every gated route, so revoke it instead of emptying it.
98
+ */
99
+ scopes: string[];
100
+ }
101
+
78
102
  export interface UpdateBotAvatarFileData {
79
103
  name: string;
80
104
  sizeInMB: number;
@@ -174,6 +198,10 @@ export default function createBotMethods(client: NuramaClient) {
174
198
  /**
175
199
  * Revoke the bot's current API key and issue a new one.
176
200
  * The new raw key is returned once.
201
+ *
202
+ * The replacement carries the old key's scopes verbatim, so this is not a
203
+ * way to pick up scopes added to the registry since the key was minted —
204
+ * `updateBotKeyScopes` is.
177
205
  */
178
206
  async rotateBotKey(workspaceId: string, botId: string): Promise<RotateBotKeyResponse> {
179
207
  if (!workspaceId) throw new Error('workspaceId is required.');
@@ -185,6 +213,77 @@ export default function createBotMethods(client: NuramaClient) {
185
213
  });
186
214
  },
187
215
 
216
+ /**
217
+ * Mint an ADDITIONAL API key for the bot, up to 5 live keys.
218
+ *
219
+ * Unlike `rotateBotKey`, the bot's existing keys keep working — which is
220
+ * what makes a zero-downtime changeover possible: mint, move traffic over,
221
+ * then revoke the old key. The raw key is returned once.
222
+ */
223
+ async createBotKey(
224
+ workspaceId: string,
225
+ botId: string,
226
+ keyData: CreateBotKeyData,
227
+ ): Promise<CreateBotKeyResponse> {
228
+ if (!workspaceId) throw new Error('workspaceId is required.');
229
+ if (!botId) throw new Error('botId is required.');
230
+ if (!keyData?.name) throw new Error('name is required.');
231
+ return client._request<CreateBotKeyResponse>({
232
+ method: 'POST',
233
+ endpoint: `/v1/workspaces/${workspaceId}/bots/${botId}/keys`,
234
+ body: keyData,
235
+ sendJWT: true,
236
+ });
237
+ },
238
+
239
+ /**
240
+ * Replace the scopes on one of the bot's API keys, in place.
241
+ *
242
+ * A key's scopes are a snapshot taken when it was minted, and the registry
243
+ * grows — a key created before a scope existed cannot hold it. Rotation is
244
+ * not a substitute: `rotateBotKey` copies the old scope set onto the
245
+ * replacement, so a stale key stays stale through every rotation.
246
+ *
247
+ * This matters most for keys minted with `scopes` omitted, which means
248
+ * "the full registry" as it stood that day, not "whatever the full registry
249
+ * becomes".
250
+ *
251
+ * The secret is unchanged — every caller configured with this key keeps
252
+ * working, which is the whole point. Requires `canManageBots`.
253
+ */
254
+ async updateBotKeyScopes(
255
+ workspaceId: string,
256
+ botId: string,
257
+ keyId: string,
258
+ data: UpdateBotKeyScopesData,
259
+ ): Promise<BotApiKeySummary> {
260
+ if (!workspaceId) throw new Error('workspaceId is required.');
261
+ if (!botId) throw new Error('botId is required.');
262
+ if (!keyId) throw new Error('keyId is required.');
263
+ return client._request<BotApiKeySummary>({
264
+ method: 'PATCH',
265
+ endpoint: `/v1/workspaces/${workspaceId}/bots/${botId}/keys/${keyId}`,
266
+ body: data,
267
+ sendJWT: true,
268
+ });
269
+ },
270
+
271
+ /**
272
+ * Revoke one of the bot's API keys, leaving its others working.
273
+ * A revoked key stops authenticating immediately and frees a slot
274
+ * against the 5-key cap.
275
+ */
276
+ async revokeBotKey(workspaceId: string, botId: string, keyId: string): Promise<void> {
277
+ if (!workspaceId) throw new Error('workspaceId is required.');
278
+ if (!botId) throw new Error('botId is required.');
279
+ if (!keyId) throw new Error('keyId is required.');
280
+ return client._request<void>({
281
+ method: 'DELETE',
282
+ endpoint: `/v1/workspaces/${workspaceId}/bots/${botId}/keys/${keyId}`,
283
+ sendJWT: true,
284
+ });
285
+ },
286
+
188
287
  /**
189
288
  * Request signed URL data to upload a new avatar for the bot.
190
289
  * Caller multipart-uploads the file to S3 using the returned `signedUrlData`,