@fusebase/fusebase-gate-sdk 2.3.34-sdk.4 → 2.3.34-sdk.8

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.
@@ -19,6 +19,18 @@ export interface CreateAppMagicLinkRequestContract {
19
19
  * When false, the user must already exist or the call rejects with NotFound.
20
20
  */
21
21
  addToAccessPrincipals?: boolean;
22
+ /**
23
+ * Optional link lifetime in seconds. Omit for the 24h (86400) default.
24
+ * A provided value is clamped server-side to the 3600 (1h)..604800 (7d)
25
+ * range rather than rejected, so a slightly out-of-range value still yields
26
+ * a usable link.
27
+ * `0` or a negative value is NOT "no expiry" and does NOT expire the link
28
+ * immediately — it clamps UP to the 3600 (1h) minimum, so 1h is the
29
+ * shortest lifetime you can create.
30
+ * Whole seconds: a fractional value is floored server-side.
31
+ * @TJS-type integer
32
+ */
33
+ ttlSeconds?: number;
22
34
  /**
23
35
  * Opaque app payload (not interpreted by the platform) stored on the link and
24
36
  * echoed back byte-for-byte at activation. Use it to bind the link to an
@@ -51,7 +63,8 @@ export interface CreateAppMagicLinkResponseContract {
51
63
  */
52
64
  magicLinkUrl: string;
53
65
  /**
54
- * Unix timestamp (seconds) when the link expires (createdAt + 24h).
66
+ * Unix timestamp (seconds) when the link expires (createdAt + ttlSeconds,
67
+ * defaulting to 24h when ttlSeconds is omitted).
55
68
  */
56
69
  expiresAt: number;
57
70
  }
@@ -228,6 +241,17 @@ export interface BulkAppMagicLinkInvitationContract {
228
241
  * When false, the user must already exist or the invite fails with NotFound.
229
242
  */
230
243
  addToAccessPrincipals?: boolean;
244
+ /**
245
+ * Optional link lifetime in seconds. Omit for the 24h (86400) default.
246
+ * A provided value is clamped server-side to the 3600 (1h)..604800 (7d)
247
+ * range rather than rejected.
248
+ * `0` or a negative value is NOT "no expiry" and does NOT expire the link
249
+ * immediately — it clamps UP to the 3600 (1h) minimum, so 1h is the
250
+ * shortest lifetime you can create.
251
+ * Whole seconds: a fractional value is floored server-side.
252
+ * @TJS-type integer
253
+ */
254
+ ttlSeconds?: number;
231
255
  /**
232
256
  * Opaque app payload (not interpreted by the platform) stored on the link and
233
257
  * echoed back byte-for-byte at activation.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fusebase/fusebase-gate-sdk",
3
- "version": "2.3.34-sdk.4",
3
+ "version": "2.3.34-sdk.8",
4
4
  "description": "TypeScript SDK for Fusebase Gate APIs - Generated from contract introspection",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -0,0 +1,9 @@
1
+ # Release Notes 2.3.34-sdk.8
2
+
3
+ - Current ref: `HEAD`
4
+ - Previous tag: `v2.3.34-sdk.8`
5
+ - Generated at: 2026-07-23T10:56:17.288Z
6
+
7
+ ## Included Drafts
8
+
9
+ - None
@@ -1,82 +1,9 @@
1
- # Release Notes 2.3.34-sdk.4
1
+ # Release Notes 2.3.34-sdk.8
2
2
 
3
3
  - Current ref: `HEAD`
4
- - Previous tag: `v2.3.28-sdk.3`
5
- - Generated at: 2026-07-23T05:48:58.238Z
4
+ - Previous tag: `v2.3.34-sdk.8`
5
+ - Generated at: 2026-07-23T10:56:17.288Z
6
6
 
7
7
  ## Included Drafts
8
8
 
9
- - `docs/release-notes/2026-07-02-markdown-notes-crud.md` - Markdown (v3) notes CRUD
10
- - `docs/release-notes/2026-07-13-getme-no-health-read.md` - getMe no longer requires health.read
11
-
12
- ## Summary
13
-
14
- ### Markdown (v3) notes CRUD
15
-
16
- Add Gate contracts, controllers, and MCP-visible operations for v3 markdown notes: create, read, replace, and append markdown stored as the source of truth in note-service (no editor-service involved). Part of Notes v3 Iteration 1 (NIM-42034, NIM-42042).
17
-
18
- ### getMe no longer requires health.read
19
-
20
- `GET /me` (`getMe`) no longer declares a required Gate permission. Any authenticated **user** or **token** subject may call it with a valid session, without `health.read` in the grant.
21
-
22
-
23
- ## API / SDK Changes
24
-
25
- ### Markdown (v3) notes CRUD
26
-
27
- - Added `createWorkspaceMarkdownNote` (`POST /:orgId/workspaces/:workspaceId/markdown-notes`).
28
- - Added `getWorkspaceMarkdownNote` (`GET .../markdown-notes/:noteId`) returning the markdown source of truth plus `revision`.
29
- - Added `updateWorkspaceMarkdownNoteContent` (`PUT .../markdown-notes/:noteId/content`) replacing the full markdown document with a required optimistic `revision` lock.
30
- - Added `appendWorkspaceMarkdownNoteContent` (`POST .../markdown-notes/:noteId/content/append`) with an optional `revision` lock.
31
- - Stale-revision writes return HTTP 409 with `data.errorCode = markdown_note_revision_conflict` and `data.currentRevision`.
32
- - Regenerated SDK/OpenAPI artifacts include the new Notes API methods and contracts.
33
-
34
-
35
- ## Consumer Impact
36
-
37
- ### Markdown (v3) notes CRUD
38
-
39
- AI/MCP callers can manage markdown-native (v3) notes end-to-end without HTML conversion. Classic (v2) notes are untouched and keep using the existing notes operations. The operations depend on the note-service markdown API (NIM-42040/NIM-42041); until note-service ships it, calls fail upstream.
40
-
41
-
42
- ## Verification
43
-
44
- ### Markdown (v3) notes CRUD
45
-
46
- - `npm run build`
47
- - `npm run build:sdk`
48
- - `npm run mcp:skills:generate`
49
- - `npm run mcp:skills:validate`
50
- - `npm test` (unit suites for the new controller, client, and contracts)
51
-
52
- ### getMe no longer requires health.read
53
-
54
- - `npm run test:unit -- tests/unit/authz-op-registry-bridge.test.ts`
55
- - `npm run build`
56
-
57
-
58
- ## Follow-ups
59
-
60
- ### Markdown (v3) notes CRUD
61
-
62
- - Switch the plain-HTTP note-service markdown client to the generated `@internal/note-service` SDK once note-service publishes the markdown endpoints.
63
- - Add e2e-sdk/mcp-e2e coverage once the note-service contract is live (fake-note-service markdown routes should mirror the real service).
64
-
65
-
66
- ## Consumer impact
67
-
68
- ### getMe no longer requires health.read
69
-
70
- - **Apps without `health.read` in the published grant** can call `getMe` again (service tokens, visitor browser tokens).
71
- - **Apps that already include `health.read`** are unchanged.
72
- - Do **not** remove `health.read` from grants solely because of this change — other ops may still require it.
73
- - Continue using `FBS_ORG_ID` / `getMyOrgAccess` for org resolution; do not rely on `getMe().auth.scopes` for visitor sessions.
74
-
75
-
76
- ## Why
77
-
78
- ### getMe no longer requires health.read
79
-
80
- - `getMe` is the primary identity introspection op for Fusebase Apps.
81
- - Requiring `health.read` caused production lockouts when app grants omitted it after `fusebase analyze gate` / `--sync-gate-permissions` (see issue `041-benchmarking-app`, escalation `2026-07-13-platform-gate-2.3.29-auth-breaking-changes.md`).
82
- - `resolveOperationPermissions` now reports `required_permission: null` for `getMe`, aligned with `getHealth`.
9
+ - None
@@ -1,9 +0,0 @@
1
- # Release Notes 2.3.34-sdk.3
2
-
3
- - Current ref: `HEAD`
4
- - Previous tag: `v2.3.34-sdk.2`
5
- - Generated at: 2026-07-21T14:24:27.829Z
6
-
7
- ## Included Drafts
8
-
9
- - None
@@ -1,82 +0,0 @@
1
- # Release Notes 2.3.34-sdk.4
2
-
3
- - Current ref: `HEAD`
4
- - Previous tag: `v2.3.28-sdk.3`
5
- - Generated at: 2026-07-23T05:48:58.238Z
6
-
7
- ## Included Drafts
8
-
9
- - `docs/release-notes/2026-07-02-markdown-notes-crud.md` - Markdown (v3) notes CRUD
10
- - `docs/release-notes/2026-07-13-getme-no-health-read.md` - getMe no longer requires health.read
11
-
12
- ## Summary
13
-
14
- ### Markdown (v3) notes CRUD
15
-
16
- Add Gate contracts, controllers, and MCP-visible operations for v3 markdown notes: create, read, replace, and append markdown stored as the source of truth in note-service (no editor-service involved). Part of Notes v3 Iteration 1 (NIM-42034, NIM-42042).
17
-
18
- ### getMe no longer requires health.read
19
-
20
- `GET /me` (`getMe`) no longer declares a required Gate permission. Any authenticated **user** or **token** subject may call it with a valid session, without `health.read` in the grant.
21
-
22
-
23
- ## API / SDK Changes
24
-
25
- ### Markdown (v3) notes CRUD
26
-
27
- - Added `createWorkspaceMarkdownNote` (`POST /:orgId/workspaces/:workspaceId/markdown-notes`).
28
- - Added `getWorkspaceMarkdownNote` (`GET .../markdown-notes/:noteId`) returning the markdown source of truth plus `revision`.
29
- - Added `updateWorkspaceMarkdownNoteContent` (`PUT .../markdown-notes/:noteId/content`) replacing the full markdown document with a required optimistic `revision` lock.
30
- - Added `appendWorkspaceMarkdownNoteContent` (`POST .../markdown-notes/:noteId/content/append`) with an optional `revision` lock.
31
- - Stale-revision writes return HTTP 409 with `data.errorCode = markdown_note_revision_conflict` and `data.currentRevision`.
32
- - Regenerated SDK/OpenAPI artifacts include the new Notes API methods and contracts.
33
-
34
-
35
- ## Consumer Impact
36
-
37
- ### Markdown (v3) notes CRUD
38
-
39
- AI/MCP callers can manage markdown-native (v3) notes end-to-end without HTML conversion. Classic (v2) notes are untouched and keep using the existing notes operations. The operations depend on the note-service markdown API (NIM-42040/NIM-42041); until note-service ships it, calls fail upstream.
40
-
41
-
42
- ## Verification
43
-
44
- ### Markdown (v3) notes CRUD
45
-
46
- - `npm run build`
47
- - `npm run build:sdk`
48
- - `npm run mcp:skills:generate`
49
- - `npm run mcp:skills:validate`
50
- - `npm test` (unit suites for the new controller, client, and contracts)
51
-
52
- ### getMe no longer requires health.read
53
-
54
- - `npm run test:unit -- tests/unit/authz-op-registry-bridge.test.ts`
55
- - `npm run build`
56
-
57
-
58
- ## Follow-ups
59
-
60
- ### Markdown (v3) notes CRUD
61
-
62
- - Switch the plain-HTTP note-service markdown client to the generated `@internal/note-service` SDK once note-service publishes the markdown endpoints.
63
- - Add e2e-sdk/mcp-e2e coverage once the note-service contract is live (fake-note-service markdown routes should mirror the real service).
64
-
65
-
66
- ## Consumer impact
67
-
68
- ### getMe no longer requires health.read
69
-
70
- - **Apps without `health.read` in the published grant** can call `getMe` again (service tokens, visitor browser tokens).
71
- - **Apps that already include `health.read`** are unchanged.
72
- - Do **not** remove `health.read` from grants solely because of this change — other ops may still require it.
73
- - Continue using `FBS_ORG_ID` / `getMyOrgAccess` for org resolution; do not rely on `getMe().auth.scopes` for visitor sessions.
74
-
75
-
76
- ## Why
77
-
78
- ### getMe no longer requires health.read
79
-
80
- - `getMe` is the primary identity introspection op for Fusebase Apps.
81
- - Requiring `health.read` caused production lockouts when app grants omitted it after `fusebase analyze gate` / `--sync-gate-permissions` (see issue `041-benchmarking-app`, escalation `2026-07-13-platform-gate-2.3.29-auth-breaking-changes.md`).
82
- - `resolveOperationPermissions` now reports `required_permission: null` for `getMe`, aligned with `getHealth`.