@kortix/sdk 0.12.7 → 0.13.0
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 +13 -6
- package/dist/browser/session-sync/session-sync-registry.d.ts +7 -2
- package/dist/browser/session-sync/session-sync-registry.d.ts.map +1 -1
- package/dist/browser/session-sync/session-sync-registry.js +33 -44
- package/dist/browser/session-sync/session-sync-registry.js.map +1 -1
- package/dist/browser/stores/opencode-compaction-store.d.ts +9 -3
- package/dist/browser/stores/opencode-compaction-store.d.ts.map +1 -1
- package/dist/browser/stores/opencode-compaction-store.js +5 -12
- package/dist/browser/stores/opencode-compaction-store.js.map +1 -1
- package/dist/browser/stores/sandbox-connection-store.d.ts +28 -17
- package/dist/browser/stores/sandbox-connection-store.d.ts.map +1 -1
- package/dist/browser/stores/sandbox-connection-store.js +32 -84
- package/dist/browser/stores/sandbox-connection-store.js.map +1 -1
- package/dist/browser/stores/session-working-store.d.ts +73 -0
- package/dist/browser/stores/session-working-store.d.ts.map +1 -0
- package/dist/browser/stores/session-working-store.js +86 -0
- package/dist/browser/stores/session-working-store.js.map +1 -0
- package/dist/browser/stores/sync-store/types.d.ts +14 -4
- package/dist/browser/stores/sync-store/types.d.ts.map +1 -1
- package/dist/browser/stores/sync-store.d.ts +140 -3
- package/dist/browser/stores/sync-store.d.ts.map +1 -1
- package/dist/browser/stores/sync-store.js +425 -36
- package/dist/browser/stores/sync-store.js.map +1 -1
- package/dist/core/client/kortix.d.ts +102 -1
- package/dist/core/client/kortix.d.ts.map +1 -1
- package/dist/core/client/kortix.js +78 -0
- package/dist/core/client/kortix.js.map +1 -1
- package/dist/core/files/client.d.ts +50 -2
- package/dist/core/files/client.d.ts.map +1 -1
- package/dist/core/files/client.js +253 -44
- package/dist/core/files/client.js.map +1 -1
- package/dist/core/files/types.d.ts +11 -0
- package/dist/core/files/types.d.ts.map +1 -1
- package/dist/core/http/abort-error.d.ts +89 -0
- package/dist/core/http/abort-error.d.ts.map +1 -0
- package/dist/core/http/abort-error.js +190 -0
- package/dist/core/http/abort-error.js.map +1 -0
- package/dist/core/http/api-client.d.ts.map +1 -1
- package/dist/core/http/api-client.js +28 -4
- package/dist/core/http/api-client.js.map +1 -1
- package/dist/core/http/impersonation.d.ts +58 -0
- package/dist/core/http/impersonation.d.ts.map +1 -0
- package/dist/core/http/impersonation.js +174 -0
- package/dist/core/http/impersonation.js.map +1 -0
- package/dist/core/rest/platform-client/github-app.d.ts +13 -0
- package/dist/core/rest/platform-client/github-app.d.ts.map +1 -1
- package/dist/core/rest/platform-client/github-app.js +2 -0
- package/dist/core/rest/platform-client/github-app.js.map +1 -1
- package/dist/core/rest/platform-client/members.d.ts +10 -64
- package/dist/core/rest/platform-client/members.d.ts.map +1 -1
- package/dist/core/rest/platform-client/members.js +10 -28
- package/dist/core/rest/platform-client/members.js.map +1 -1
- package/dist/core/rest/projects-client/accounts.d.ts +30 -1
- package/dist/core/rest/projects-client/accounts.d.ts.map +1 -1
- package/dist/core/rest/projects-client/accounts.js +1 -1
- package/dist/core/rest/projects-client/accounts.js.map +1 -1
- package/dist/core/rest/projects-client/agent-config.d.ts +21 -0
- package/dist/core/rest/projects-client/agent-config.d.ts.map +1 -1
- package/dist/core/rest/projects-client/agent-config.js +14 -0
- package/dist/core/rest/projects-client/agent-config.js.map +1 -1
- package/dist/core/rest/projects-client/apps.d.ts +13 -0
- package/dist/core/rest/projects-client/apps.d.ts.map +1 -1
- package/dist/core/rest/projects-client/apps.js.map +1 -1
- package/dist/core/rest/projects-client/assignments.d.ts +114 -0
- package/dist/core/rest/projects-client/assignments.d.ts.map +1 -0
- package/dist/core/rest/projects-client/assignments.js +91 -0
- package/dist/core/rest/projects-client/assignments.js.map +1 -0
- package/dist/core/rest/projects-client/billing.d.ts +80 -1
- package/dist/core/rest/projects-client/billing.d.ts.map +1 -1
- package/dist/core/rest/projects-client/billing.js +61 -2
- package/dist/core/rest/projects-client/billing.js.map +1 -1
- package/dist/core/rest/projects-client/connectors.d.ts +2 -0
- package/dist/core/rest/projects-client/connectors.d.ts.map +1 -1
- package/dist/core/rest/projects-client/connectors.js.map +1 -1
- package/dist/core/rest/projects-client/files.js +2 -2
- package/dist/core/rest/projects-client/files.js.map +1 -1
- package/dist/core/rest/projects-client/gateway.d.ts +51 -0
- package/dist/core/rest/projects-client/gateway.d.ts.map +1 -1
- package/dist/core/rest/projects-client/gateway.js.map +1 -1
- package/dist/core/rest/projects-client/iam.d.ts +51 -3
- package/dist/core/rest/projects-client/iam.d.ts.map +1 -1
- package/dist/core/rest/projects-client/iam.js +18 -1
- package/dist/core/rest/projects-client/iam.js.map +1 -1
- package/dist/core/rest/projects-client/index.d.ts +1 -0
- package/dist/core/rest/projects-client/index.d.ts.map +1 -1
- package/dist/core/rest/projects-client/index.js +1 -0
- package/dist/core/rest/projects-client/index.js.map +1 -1
- package/dist/core/rest/projects-client/projects.d.ts +1 -1
- package/dist/core/rest/projects-client/projects.d.ts.map +1 -1
- package/dist/core/rest/projects-client/projects.js +3 -0
- package/dist/core/rest/projects-client/projects.js.map +1 -1
- package/dist/core/rest/projects-client/secrets.d.ts +11 -0
- package/dist/core/rest/projects-client/secrets.d.ts.map +1 -1
- package/dist/core/rest/projects-client/secrets.js +1 -1
- package/dist/core/rest/projects-client/secrets.js.map +1 -1
- package/dist/core/rest/projects-client/session-costs.d.ts +33 -0
- package/dist/core/rest/projects-client/session-costs.d.ts.map +1 -1
- package/dist/core/rest/projects-client/session-costs.js.map +1 -1
- package/dist/core/rest/projects-client/sessions.d.ts +253 -4
- package/dist/core/rest/projects-client/sessions.d.ts.map +1 -1
- package/dist/core/rest/projects-client/sessions.js +101 -4
- package/dist/core/rest/projects-client/sessions.js.map +1 -1
- package/dist/core/rest/projects-client/shared.d.ts +10 -1
- package/dist/core/rest/projects-client/shared.d.ts.map +1 -1
- package/dist/core/rest/projects-client/shared.js.map +1 -1
- package/dist/core/rest/projects-client/tokens.d.ts +13 -1
- package/dist/core/rest/projects-client/tokens.d.ts.map +1 -1
- package/dist/core/rest/projects-client/tokens.js +7 -2
- package/dist/core/rest/projects-client/tokens.js.map +1 -1
- package/dist/core/rest/projects-client/triggers.d.ts +69 -2
- package/dist/core/rest/projects-client/triggers.d.ts.map +1 -1
- package/dist/core/rest/projects-client/triggers.js +1 -1
- package/dist/core/rest/projects-client/triggers.js.map +1 -1
- package/dist/core/session/compaction.d.ts +98 -0
- package/dist/core/session/compaction.d.ts.map +1 -0
- package/dist/core/session/compaction.js +108 -0
- package/dist/core/session/compaction.js.map +1 -0
- package/dist/core/session/health.d.ts +22 -0
- package/dist/core/session/health.d.ts.map +1 -1
- package/dist/core/session/health.js +31 -5
- package/dist/core/session/health.js.map +1 -1
- package/dist/core/session/index.d.ts +2 -0
- package/dist/core/session/index.d.ts.map +1 -1
- package/dist/core/session/index.js +2 -0
- package/dist/core/session/index.js.map +1 -1
- package/dist/core/session/message-queue.d.ts +79 -15
- package/dist/core/session/message-queue.d.ts.map +1 -1
- package/dist/core/session/message-queue.js +73 -27
- package/dist/core/session/message-queue.js.map +1 -1
- package/dist/core/session/rewind.d.ts +76 -10
- package/dist/core/session/rewind.d.ts.map +1 -1
- package/dist/core/session/rewind.js +68 -11
- package/dist/core/session/rewind.js.map +1 -1
- package/dist/core/session/working.d.ts +241 -0
- package/dist/core/session/working.d.ts.map +1 -0
- package/dist/core/session/working.js +261 -0
- package/dist/core/session/working.js.map +1 -0
- package/dist/core/session-sync/session-sync-controller.d.ts +35 -20
- package/dist/core/session-sync/session-sync-controller.d.ts.map +1 -1
- package/dist/core/session-sync/session-sync-controller.js +48 -115
- package/dist/core/session-sync/session-sync-controller.js.map +1 -1
- package/dist/core/stream/event-stream.d.ts +22 -0
- package/dist/core/stream/event-stream.d.ts.map +1 -1
- package/dist/core/stream/event-stream.js +132 -36
- package/dist/core/stream/event-stream.js.map +1 -1
- package/dist/core/turns/classify.d.ts +5 -2
- package/dist/core/turns/classify.d.ts.map +1 -1
- package/dist/core/turns/classify.js +1 -0
- package/dist/core/turns/classify.js.map +1 -1
- package/dist/core/turns/errors.d.ts +11 -0
- package/dist/core/turns/errors.d.ts.map +1 -1
- package/dist/core/turns/errors.js +49 -2
- package/dist/core/turns/errors.js.map +1 -1
- package/dist/core/turns/grouping.d.ts +32 -2
- package/dist/core/turns/grouping.d.ts.map +1 -1
- package/dist/core/turns/grouping.js +31 -2
- package/dist/core/turns/grouping.js.map +1 -1
- package/dist/core/turns/index.d.ts +1 -0
- package/dist/core/turns/index.d.ts.map +1 -1
- package/dist/core/turns/index.js +1 -0
- package/dist/core/turns/index.js.map +1 -1
- package/dist/core/turns/open-turn.d.ts +81 -0
- package/dist/core/turns/open-turn.d.ts.map +1 -0
- package/dist/core/turns/open-turn.js +77 -0
- package/dist/core/turns/open-turn.js.map +1 -0
- package/dist/core/turns/state.d.ts +1 -1
- package/dist/core/turns/state.d.ts.map +1 -1
- package/dist/core/turns/state.js +29 -27
- package/dist/core/turns/state.js.map +1 -1
- package/dist/core/turns/types.d.ts +8 -0
- package/dist/core/turns/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/kortix.esm.min.js +25 -25
- package/dist/kortix.global.js +25 -25
- package/dist/node/server.d.ts.map +1 -1
- package/dist/node/server.js +14 -2
- package/dist/node/server.js.map +1 -1
- package/dist/react/index.d.ts +3 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +8 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/initial-session-pin.d.ts +17 -0
- package/dist/react/initial-session-pin.d.ts.map +1 -1
- package/dist/react/initial-session-pin.js +58 -0
- package/dist/react/initial-session-pin.js.map +1 -1
- package/dist/react/opencode.d.ts +6 -2
- package/dist/react/opencode.d.ts.map +1 -1
- package/dist/react/opencode.js +5 -1
- package/dist/react/opencode.js.map +1 -1
- package/dist/react/prefetch-session-start.d.ts +10 -4
- package/dist/react/prefetch-session-start.d.ts.map +1 -1
- package/dist/react/prefetch-session-start.js +10 -4
- package/dist/react/prefetch-session-start.js.map +1 -1
- package/dist/react/query-keys.d.ts +8 -2
- package/dist/react/query-keys.d.ts.map +1 -1
- package/dist/react/query-keys.js +8 -2
- package/dist/react/query-keys.js.map +1 -1
- package/dist/react/session-start-stash.d.ts +25 -0
- package/dist/react/session-start-stash.d.ts.map +1 -1
- package/dist/react/session-start-stash.js +34 -3
- package/dist/react/session-start-stash.js.map +1 -1
- package/dist/react/session-title-sync.d.ts +5 -1
- package/dist/react/session-title-sync.d.ts.map +1 -1
- package/dist/react/session-title-sync.js +16 -4
- package/dist/react/session-title-sync.js.map +1 -1
- package/dist/react/use-admin-accounts.d.ts +121 -0
- package/dist/react/use-admin-accounts.d.ts.map +1 -1
- package/dist/react/use-admin-accounts.js +92 -0
- package/dist/react/use-admin-accounts.js.map +1 -1
- package/dist/react/use-can.d.ts +105 -0
- package/dist/react/use-can.d.ts.map +1 -0
- package/dist/react/use-can.js +190 -0
- package/dist/react/use-can.js.map +1 -0
- package/dist/react/use-canonical-opencode-session.d.ts +6 -1
- package/dist/react/use-canonical-opencode-session.d.ts.map +1 -1
- package/dist/react/use-canonical-opencode-session.js +46 -3
- package/dist/react/use-canonical-opencode-session.js.map +1 -1
- package/dist/react/use-impersonation.d.ts +54 -0
- package/dist/react/use-impersonation.d.ts.map +1 -0
- package/dist/react/use-impersonation.js +91 -0
- package/dist/react/use-impersonation.js.map +1 -0
- package/dist/react/use-opencode-events/handle-event.d.ts +10 -0
- package/dist/react/use-opencode-events/handle-event.d.ts.map +1 -1
- package/dist/react/use-opencode-events/handle-event.js +76 -7
- package/dist/react/use-opencode-events/handle-event.js.map +1 -1
- package/dist/react/use-opencode-events/helpers.d.ts +21 -8
- package/dist/react/use-opencode-events/helpers.d.ts.map +1 -1
- package/dist/react/use-opencode-events/helpers.js +25 -26
- package/dist/react/use-opencode-events/helpers.js.map +1 -1
- package/dist/react/use-opencode-events/index.d.ts.map +1 -1
- package/dist/react/use-opencode-events/index.js +43 -26
- package/dist/react/use-opencode-events/index.js.map +1 -1
- package/dist/react/use-opencode-events/use-event-stream-refs.d.ts.map +1 -1
- package/dist/react/use-opencode-events/use-event-stream-refs.js +66 -3
- package/dist/react/use-opencode-events/use-event-stream-refs.js.map +1 -1
- package/dist/react/use-opencode-local.d.ts +17 -0
- package/dist/react/use-opencode-local.d.ts.map +1 -1
- package/dist/react/use-opencode-local.js +41 -7
- package/dist/react/use-opencode-local.js.map +1 -1
- package/dist/react/use-opencode-sessions/messages.d.ts +101 -1
- package/dist/react/use-opencode-sessions/messages.d.ts.map +1 -1
- package/dist/react/use-opencode-sessions/messages.js +481 -63
- package/dist/react/use-opencode-sessions/messages.js.map +1 -1
- package/dist/react/use-project-apps.d.ts +24 -1
- package/dist/react/use-project-apps.d.ts.map +1 -1
- package/dist/react/use-project-apps.js +5 -3
- package/dist/react/use-project-apps.js.map +1 -1
- package/dist/react/use-runtime-boot-stalled.d.ts +32 -0
- package/dist/react/use-runtime-boot-stalled.d.ts.map +1 -0
- package/dist/react/use-runtime-boot-stalled.js +48 -0
- package/dist/react/use-runtime-boot-stalled.js.map +1 -0
- package/dist/react/use-runtime-reconnect.d.ts +67 -1
- package/dist/react/use-runtime-reconnect.d.ts.map +1 -1
- package/dist/react/use-runtime-reconnect.js +116 -18
- package/dist/react/use-runtime-reconnect.js.map +1 -1
- package/dist/react/use-session-prompts.d.ts +113 -0
- package/dist/react/use-session-prompts.d.ts.map +1 -0
- package/dist/react/use-session-prompts.js +242 -0
- package/dist/react/use-session-prompts.js.map +1 -0
- package/dist/react/use-session-send.d.ts +169 -20
- package/dist/react/use-session-send.d.ts.map +1 -1
- package/dist/react/use-session-send.js +178 -29
- package/dist/react/use-session-send.js.map +1 -1
- package/dist/react/use-session-sync.d.ts +35 -2
- package/dist/react/use-session-sync.d.ts.map +1 -1
- package/dist/react/use-session-sync.js +46 -9
- package/dist/react/use-session-sync.js.map +1 -1
- package/dist/react/use-session-working.d.ts +57 -0
- package/dist/react/use-session-working.d.ts.map +1 -0
- package/dist/react/use-session-working.js +178 -0
- package/dist/react/use-session-working.js.map +1 -0
- package/dist/react/use-session.d.ts +122 -5
- package/dist/react/use-session.d.ts.map +1 -1
- package/dist/react/use-session.js +343 -69
- package/dist/react/use-session.js.map +1 -1
- package/package.json +2 -2
- package/dist/browser/stores/tab-store.d.ts +0 -91
- package/dist/browser/stores/tab-store.d.ts.map +0 -1
- package/dist/browser/stores/tab-store.js +0 -369
- package/dist/browser/stores/tab-store.js.map +0 -1
- package/dist/core/session/send-queue.d.ts +0 -70
- package/dist/core/session/send-queue.d.ts.map +0 -1
- package/dist/core/session/send-queue.js +0 -116
- package/dist/core/session/send-queue.js.map +0 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one abort classifier. Every producer of an "this turn was aborted"
|
|
3
|
+
* error in this codebase — the SDK's own optimistic patch, the real opencode
|
|
4
|
+
* wire error, and a plain `AbortController`/`fetch` abort — ends up here.
|
|
5
|
+
*
|
|
6
|
+
* Before this file, FOUR divergent detectors existed across `apps/web` and
|
|
7
|
+
* this package: an identity read, a prose sniff with its own pattern lists, a
|
|
8
|
+
* duck-typed name/message check, and a loose `/abort/i` regex. They agreed
|
|
9
|
+
* often enough to hide the disagreements — e.g. `/abort/i` matches "aborted"
|
|
10
|
+
* as a substring of a transport-failure message ("upstream unreachable …
|
|
11
|
+
* The operation was aborted"), mislabeling a real failure as a user-initiated
|
|
12
|
+
* stop. `isAbortError` is the single, documented replacement.
|
|
13
|
+
*
|
|
14
|
+
* Producers (studied, not guessed):
|
|
15
|
+
* - `SyntheticAbortError` — the client-synthesized marker patched onto a
|
|
16
|
+
* message when the user hits Stop, or when a runtime disposes mid-stream.
|
|
17
|
+
* `{ name: "AbortError", data: { message: string } }`. See
|
|
18
|
+
* `react/use-session-send.ts` (`applyOptimisticAbort`) and
|
|
19
|
+
* `react/use-opencode-events/use-event-stream-refs.ts`
|
|
20
|
+
* (`markSessionAbortedLocally`).
|
|
21
|
+
* - `MessageAbortedError` — the real opencode wire shape, one member of
|
|
22
|
+
* `AssistantMessage['error']` (`@opencode-ai/sdk` `types.gen.d.ts`).
|
|
23
|
+
* `{ name: "MessageAbortedError", data: { message: string } }`.
|
|
24
|
+
* - A `DOMException`/`Error`-shaped `AbortError` from a real
|
|
25
|
+
* `AbortController`/`fetch` abort. `.name === "AbortError"`.
|
|
26
|
+
*/
|
|
27
|
+
/** Error names whose mere presence identifies an abort, no text sniff needed. */
|
|
28
|
+
const ABORT_ERROR_NAMES = new Set(['AbortError', 'MessageAbortedError']);
|
|
29
|
+
/**
|
|
30
|
+
* Phrases that mean a HUMAN stopped this, not that a connection died.
|
|
31
|
+
*
|
|
32
|
+
* Phrases, never bare words: "aborted" is a substring of transport-failure
|
|
33
|
+
* messages too ("The operation was aborted" is exactly how an aborted fetch
|
|
34
|
+
* against an unreachable upstream describes itself), so a substring alone is
|
|
35
|
+
* not evidence of intent.
|
|
36
|
+
*/
|
|
37
|
+
const ABORT_TEXT_PATTERNS = [
|
|
38
|
+
'operation was aborted',
|
|
39
|
+
'aborted by user',
|
|
40
|
+
'interrupted by user',
|
|
41
|
+
'cancelled by user',
|
|
42
|
+
'canceled by user',
|
|
43
|
+
'request was cancelled',
|
|
44
|
+
'request was canceled',
|
|
45
|
+
'aborterror',
|
|
46
|
+
];
|
|
47
|
+
/**
|
|
48
|
+
* Words that mean the TRANSPORT failed. Their presence disqualifies the text
|
|
49
|
+
* sniff outright, however abort-ish the rest of the prose reads.
|
|
50
|
+
*/
|
|
51
|
+
const TRANSPORT_FAILURE_TEXT_PATTERNS = [
|
|
52
|
+
'unreachable',
|
|
53
|
+
'upstream',
|
|
54
|
+
'econnreset',
|
|
55
|
+
'econnrefused',
|
|
56
|
+
'socket hang up',
|
|
57
|
+
'network',
|
|
58
|
+
'fetch failed',
|
|
59
|
+
'timed out',
|
|
60
|
+
'timeout',
|
|
61
|
+
'gateway',
|
|
62
|
+
'502',
|
|
63
|
+
'503',
|
|
64
|
+
'504',
|
|
65
|
+
];
|
|
66
|
+
/**
|
|
67
|
+
* LAST RESORT ONLY — a substring sniff over arbitrary error prose. Used
|
|
68
|
+
* internally by `isAbortError` when no `name` identity is available (a bare
|
|
69
|
+
* string caller) or when `name` doesn't match a known abort shape but the
|
|
70
|
+
* error's own nested text does (some producers carry an abort-ish message
|
|
71
|
+
* under an unrelated/unknown `name`).
|
|
72
|
+
*/
|
|
73
|
+
function looksLikeAbortText(text) {
|
|
74
|
+
const lower = text.toLowerCase();
|
|
75
|
+
if (TRANSPORT_FAILURE_TEXT_PATTERNS.some((p) => lower.includes(p)))
|
|
76
|
+
return false;
|
|
77
|
+
return ABORT_TEXT_PATTERNS.some((p) => lower.includes(p));
|
|
78
|
+
}
|
|
79
|
+
/** The text a structured error carries about itself — `data.message` (the
|
|
80
|
+
* shape every producer above uses) or a bare top-level `message`. */
|
|
81
|
+
function nestedErrorText(rec) {
|
|
82
|
+
const data = rec.data;
|
|
83
|
+
const dataMessage = data && typeof data === 'object' ? data.message : undefined;
|
|
84
|
+
if (typeof dataMessage === 'string')
|
|
85
|
+
return dataMessage;
|
|
86
|
+
return typeof rec.message === 'string' ? rec.message : undefined;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Was this error an abort — a user-initiated stop, or a client-synthesized
|
|
90
|
+
* stand-in for one — as opposed to a genuine failure?
|
|
91
|
+
*
|
|
92
|
+
* Identity first: a `name` matching a known abort shape (`AbortError`,
|
|
93
|
+
* `MessageAbortedError`) is always an abort, regardless of message text.
|
|
94
|
+
* Falls back to sniffing the error's own nested text only when identity
|
|
95
|
+
* doesn't resolve it — a plain string (the last-resort case: a caller that
|
|
96
|
+
* only has a formatted display message, not the original structured error),
|
|
97
|
+
* or a structured error whose `name` doesn't match but whose message reads
|
|
98
|
+
* as an abort anyway.
|
|
99
|
+
*/
|
|
100
|
+
export function isAbortError(error) {
|
|
101
|
+
if (typeof error === 'string')
|
|
102
|
+
return looksLikeAbortText(error);
|
|
103
|
+
if (!error || typeof error !== 'object')
|
|
104
|
+
return false;
|
|
105
|
+
const rec = error;
|
|
106
|
+
const name = rec.name;
|
|
107
|
+
if (typeof name === 'string' && ABORT_ERROR_NAMES.has(name))
|
|
108
|
+
return true;
|
|
109
|
+
const text = nestedErrorText(rec);
|
|
110
|
+
return typeof text === 'string' ? looksLikeAbortText(text) : false;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Every value a producer can stamp into `data.reason` on a
|
|
114
|
+
* `SyntheticAbortError` — the machine-readable WHY behind an abort, read by
|
|
115
|
+
* `abortErrorReason` below. Closed on purpose: a renderer branches on this
|
|
116
|
+
* value (`'user'` → show "Interrupted", anything else → show nothing), so a
|
|
117
|
+
* free-text reason would not fail loudly, it would just silently render
|
|
118
|
+
* wrong.
|
|
119
|
+
*/
|
|
120
|
+
export const ABORT_REASONS = [
|
|
121
|
+
/** `applyOptimisticAbort` (`react/use-session-send.ts`) — a real user Stop
|
|
122
|
+
* click, patched instantly so the "Interrupted" row appears before the
|
|
123
|
+
* SSE round-trip. */
|
|
124
|
+
'user',
|
|
125
|
+
/** `markSessionAbortedLocally` (`react/use-opencode-events/use-event-stream-refs.ts`),
|
|
126
|
+
* invoked from the `server.instance.disposed` handler in `handle-event.ts`.
|
|
127
|
+
* Pure infrastructure — OpenCode disposed and respawned mid-stream — for
|
|
128
|
+
* EVERY non-idle session in the tab, not a user action. Must render
|
|
129
|
+
* nothing: a respawn that recovers cleanly should not scar the transcript. */
|
|
130
|
+
'runtime-disposed',
|
|
131
|
+
/** NOT YET EMITTED — see `ABORT_REASONS_NOT_YET_EMITTED` below. */
|
|
132
|
+
'orphan-finalized',
|
|
133
|
+
/** NOT YET EMITTED — see `ABORT_REASONS_NOT_YET_EMITTED` below. */
|
|
134
|
+
'wake',
|
|
135
|
+
];
|
|
136
|
+
/**
|
|
137
|
+
* Members that NO code path writes today. Read this before reading a zero.
|
|
138
|
+
*
|
|
139
|
+
* `'orphan-finalized'` is reserved for the sandbox daemon's orphan-turn
|
|
140
|
+
* finalizer (`apps/kortix-sandbox-agent-server/src/main.ts`,
|
|
141
|
+
* `finalizeOrphanedTurn` / `abortOpencodeTurn`). That finalizer aborts through
|
|
142
|
+
* OpenCode's OWN `/session/{id}/abort` REST endpoint — a bare `POST` with no
|
|
143
|
+
* body — so the resulting `MessageAbortedError` is entirely opencode's wire
|
|
144
|
+
* shape. There is no hook to inject a client-chosen `data.reason` into it;
|
|
145
|
+
* doing so would mean forking opencode's abort response, which is worse than
|
|
146
|
+
* leaving it untagged. So a genuine wire abort (no synthetic patch involved)
|
|
147
|
+
* stays reason-less on purpose — see `abortErrorReason`'s doc comment.
|
|
148
|
+
*
|
|
149
|
+
* `'wake'` is reserved for a not-yet-built producer (a session woken from a
|
|
150
|
+
* park mid-turn) and is declared ahead of that work for the same reason
|
|
151
|
+
* `apps/api/src/projects/stop-reason.ts` pre-declares `idle_grace` /
|
|
152
|
+
* `boot_floor_expired`: a renderer branching on this union should see a
|
|
153
|
+
* closed set, not discover a new member via a runtime string it never typed.
|
|
154
|
+
*/
|
|
155
|
+
export const ABORT_REASONS_NOT_YET_EMITTED = [
|
|
156
|
+
'orphan-finalized',
|
|
157
|
+
'wake',
|
|
158
|
+
];
|
|
159
|
+
/**
|
|
160
|
+
* The machine-readable reason an abort happened, when the producer sent one
|
|
161
|
+
* (`data.reason`, e.g. `'runtime-disposed'`). Set by `applyOptimisticAbort`
|
|
162
|
+
* (`'user'`) and `markSessionAbortedLocally` (`'runtime-disposed'`). A real
|
|
163
|
+
* opencode wire `MessageAbortedError` — the daemon's own `/abort` call, see
|
|
164
|
+
* `ABORT_REASONS_NOT_YET_EMITTED` above — carries no `data.reason` and never
|
|
165
|
+
* will, so this returns `undefined` for it: that is a genuine, once-only
|
|
166
|
+
* cut turn, not a fabricated marker, and callers render it as "Interrupted"
|
|
167
|
+
* exactly like a `reason: 'user'` abort. Returns `undefined` when absent,
|
|
168
|
+
* never a guess.
|
|
169
|
+
*
|
|
170
|
+
* Validated against `ABORT_REASONS`, not merely typed as `string`: a
|
|
171
|
+
* renderer branches on this value (`'user'` → "Interrupted", anything else →
|
|
172
|
+
* nothing), so an unrecognized/typo'd string previously reached that branch
|
|
173
|
+
* unfiltered and silently suppressed the error UI. An unknown value now
|
|
174
|
+
* returns `undefined` — the same safe default as a reason-less real wire
|
|
175
|
+
* abort — instead of propagating an unvalidated string.
|
|
176
|
+
*/
|
|
177
|
+
export function abortErrorReason(error) {
|
|
178
|
+
if (!error || typeof error !== 'object')
|
|
179
|
+
return undefined;
|
|
180
|
+
const data = error.data;
|
|
181
|
+
if (!data || typeof data !== 'object')
|
|
182
|
+
return undefined;
|
|
183
|
+
const reason = data.reason;
|
|
184
|
+
if (typeof reason !== 'string' || !reason)
|
|
185
|
+
return undefined;
|
|
186
|
+
return ABORT_REASONS.includes(reason)
|
|
187
|
+
? reason
|
|
188
|
+
: undefined;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=abort-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abort-error.js","sourceRoot":"","sources":["../../../src/core/http/abort-error.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/core/http/api-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAsD,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/core/http/api-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAsD,MAAM,cAAc,CAAC;AAU5F,OAAO,EACL,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,0BAA0B,CAAC;AAElE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAE5D;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAuD9D,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAErD;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AA8VD,eAAO,MAAM,cAAc;YACX,CAAC,iBACJ,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,iBACvC,YAAY,GAC1B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAuC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,iBAAe,UAAU,CACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,QAAQ,CAAC,CA8BnB;AAED,eAAO,MAAM,UAAU;UACf,CAAC,kBACK,MAAM,YACN,IAAI,CAAC,WAAW,GAAG,gBAAgB,EAAE,QAAQ,GAAG,MAAM,CAAC;WAG5D,CAAC,kBACI,MAAM,SACT,GAAG,YACA,IAAI,CAAC,WAAW,GAAG,gBAAgB,EAAE,QAAQ,CAAC;UAQpD,CAAC,kBACK,MAAM,SACT,GAAG,YACA,IAAI,CAAC,WAAW,GAAG,gBAAgB,EAAE,QAAQ,CAAC;YAQlD,CAAC,kBACG,MAAM,SACT,GAAG,YACA,IAAI,CAAC,WAAW,GAAG,gBAAgB,EAAE,QAAQ,CAAC;aAQjD,CAAC,kBACE,MAAM,YACN,IAAI,CAAC,WAAW,GAAG,gBAAgB,EAAE,QAAQ,GAAG,MAAM,CAAC;aAO1D,CAAC,kBACE,MAAM,YACN,QAAQ,YACR,IAAI,CAAC,WAAW,GAAG,gBAAgB,EAAE,QAAQ,GAAG,MAAM,CAAC;gBAcvD,CAAC,kBACD,MAAM,YACN,QAAQ,YACR,IAAI,CAAC,WAAW,GAAG,gBAAgB,EAAE,QAAQ,GAAG,MAAM,CAAC;;CAepE,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { normalizeClientSource } from '../../platform/auth-core.js';
|
|
|
2
2
|
import { getSupabaseAccessTokenWithRetry } from './auth.js';
|
|
3
3
|
import { ApiError, AuthError, parseBillingError, RequestTooLargeError } from './api/errors.js';
|
|
4
4
|
import { platformConfig } from './config.js';
|
|
5
|
+
import { impersonationHeaders } from './impersonation.js';
|
|
5
6
|
const getApiUrl = () => platformConfig().backendUrl || '';
|
|
6
7
|
// Ported from web's error-handler. User-facing error handling is routed
|
|
7
8
|
// through platformConfig().onError?.() instead of web's handleApiError.
|
|
@@ -130,6 +131,11 @@ async function makeRequest(url, options = {}) {
|
|
|
130
131
|
if (adminBypassEnabled) {
|
|
131
132
|
headers['x-kortix-admin-bypass'] = '1';
|
|
132
133
|
}
|
|
134
|
+
// Act-as: while a platform admin holds a live grant, EVERY platform request
|
|
135
|
+
// from this tab carries it, exactly as the banner claims. Attached after the
|
|
136
|
+
// caller's own headers so a call site cannot accidentally drop it, and
|
|
137
|
+
// before `Authorization` because the server validates the pair together.
|
|
138
|
+
Object.assign(headers, impersonationHeaders(url));
|
|
133
139
|
if (token) {
|
|
134
140
|
headers['Authorization'] = `Bearer ${token}`;
|
|
135
141
|
}
|
|
@@ -196,10 +202,19 @@ async function makeRequest(url, options = {}) {
|
|
|
196
202
|
let errorData = null;
|
|
197
203
|
try {
|
|
198
204
|
errorData = await response.json();
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
205
|
+
// ORDER MATTERS, and `reason` is LAST on purpose.
|
|
206
|
+
//
|
|
207
|
+
// A Kortix error body pairs a machine slug with the sentence written for
|
|
208
|
+
// the user, e.g. the 409 from `POST /sessions/:id/restart`:
|
|
209
|
+
// { error: "The original sandbox is unavailable. …",
|
|
210
|
+
// code: "SESSION_RUNTIME_IDENTITY_UNAVAILABLE",
|
|
211
|
+
// reason: "runtime_identity_unavailable" }
|
|
212
|
+
// `reason` used to be read first, so that customer saw the bare slug
|
|
213
|
+
// `runtime_identity_unavailable` as the card detail AND the toast.
|
|
214
|
+
// Not one `reason` value in the API is a sentence — they are all
|
|
215
|
+
// snake_case slugs — so preferring it could only ever downgrade the
|
|
216
|
+
// message. Branch on `code` (kept below); render the human field.
|
|
217
|
+
if (typeof errorData.message === 'string') {
|
|
203
218
|
errorMessage = errorData.message;
|
|
204
219
|
}
|
|
205
220
|
else if (errorData.error && typeof errorData.error === 'string') {
|
|
@@ -212,6 +227,11 @@ async function makeRequest(url, options = {}) {
|
|
|
212
227
|
else if (typeof errorData.detail?.message === 'string') {
|
|
213
228
|
errorMessage = errorData.detail.message;
|
|
214
229
|
}
|
|
230
|
+
else if (typeof errorData.reason === 'string') {
|
|
231
|
+
// Last resort: a body with no prose at all still says something more
|
|
232
|
+
// useful than `HTTP 409: Conflict`.
|
|
233
|
+
errorMessage = errorData.reason;
|
|
234
|
+
}
|
|
215
235
|
}
|
|
216
236
|
catch { }
|
|
217
237
|
const isRequestDeadline = isRequestDeadlineResponse(response.status, errorData, errorMessage);
|
|
@@ -447,6 +467,10 @@ async function postStream(endpoint, data, options = {}) {
|
|
|
447
467
|
headers['X-Kortix-Client'] = clientSource;
|
|
448
468
|
if (adminBypassEnabled)
|
|
449
469
|
headers['x-kortix-admin-bypass'] = '1';
|
|
470
|
+
// Same act-as rule as makeRequest — a streamed POST is still a platform
|
|
471
|
+
// request, and an SSE stream opened without the header would silently read
|
|
472
|
+
// the OPERATOR's account while the banner named the customer's.
|
|
473
|
+
Object.assign(headers, impersonationHeaders(endpoint));
|
|
450
474
|
if (token)
|
|
451
475
|
headers['Authorization'] = `Bearer ${token}`;
|
|
452
476
|
const controller = new AbortController();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/core/http/api-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/core/http/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client half of platform-admin act-as impersonation.
|
|
3
|
+
*
|
|
4
|
+
* The client holds an ID, never a capability. `X-Kortix-Impersonate: <grantId>`
|
|
5
|
+
* is only meaningful next to the operator's own Supabase JWT, and the API
|
|
6
|
+
* re-validates ownership, expiry, revocation and the operator's CURRENT
|
|
7
|
+
* platform role on every request (see apps/api/src/shared/impersonation.ts).
|
|
8
|
+
* So nothing here is a security boundary — losing this value to another tab or
|
|
9
|
+
* another user grants them nothing. What this module owes the user is honesty:
|
|
10
|
+
* while a session is stored, EVERY request carries the header, and the app
|
|
11
|
+
* shell shows the banner that says so.
|
|
12
|
+
*
|
|
13
|
+
* Persisted in `sessionStorage`, not `localStorage`: acting as an account is
|
|
14
|
+
* per-tab and must not outlive the tab. `window`/`sessionStorage` are globals,
|
|
15
|
+
* not imports, so every access is guarded — the SDK core has to load in Node,
|
|
16
|
+
* a Worker, and React Native, where neither exists.
|
|
17
|
+
*/
|
|
18
|
+
/** The request header. Matches `IMPERSONATION_HEADER` in the API. */
|
|
19
|
+
export declare const IMPERSONATION_HEADER = "X-Kortix-Impersonate";
|
|
20
|
+
/** What the console stores after minting a grant. */
|
|
21
|
+
export interface ImpersonationSession {
|
|
22
|
+
/** `impersonation_grants.id`. The only part sent to the server. */
|
|
23
|
+
grantId: string;
|
|
24
|
+
/** The account being acted as — what the banner names. */
|
|
25
|
+
accountId: string;
|
|
26
|
+
/** Display name, for the banner. Null when the account has none. */
|
|
27
|
+
accountName?: string | null;
|
|
28
|
+
/** ISO-8601 instant the grant dies. The server caps this at one hour. */
|
|
29
|
+
expiresAt: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A session with no parseable future expiry is NOT a session. Treating an
|
|
33
|
+
* unreadable date as "no expiry" would leave a banner up, and a header
|
|
34
|
+
* attached, forever after one corrupt write.
|
|
35
|
+
*/
|
|
36
|
+
export declare function isImpersonationSessionLive(session: ImpersonationSession | null | undefined, now?: number): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* The live session, or null. Reads through to `sessionStorage` once per JS
|
|
39
|
+
* context so a full page navigation (admin console → app shell) keeps acting
|
|
40
|
+
* as the account, then serves the in-memory mirror.
|
|
41
|
+
*
|
|
42
|
+
* An expired session is DROPPED here — the store never hands back a value the
|
|
43
|
+
* server would 403 — and dropping it notifies subscribers, so the banner
|
|
44
|
+
* disappears on its own when the hour is up.
|
|
45
|
+
*/
|
|
46
|
+
export declare function getImpersonationSession(): ImpersonationSession | null;
|
|
47
|
+
export declare function setImpersonationSession(session: ImpersonationSession | null): void;
|
|
48
|
+
export declare function clearImpersonationSession(): void;
|
|
49
|
+
/** Subscribe to session changes (the banner's data source). Returns an unsubscribe. */
|
|
50
|
+
export declare function subscribeToImpersonation(listener: () => void): () => void;
|
|
51
|
+
export declare function shouldAttachImpersonation(url: string): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Headers a platform request adds while acting as an account. `{}` when there
|
|
54
|
+
* is no live session, so the ordinary path allocates one empty object and
|
|
55
|
+
* touches nothing else.
|
|
56
|
+
*/
|
|
57
|
+
export declare function impersonationHeaders(url?: string): Record<string, string>;
|
|
58
|
+
//# sourceMappingURL=impersonation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impersonation.d.ts","sourceRoot":"","sources":["../../../src/core/http/impersonation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,qEAAqE;AACrE,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAI3D,qDAAqD;AACrD,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;CACnB;AAgBD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,EAChD,GAAG,GAAE,MAAmB,GACvB,OAAO,CAIT;AA6BD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,IAAI,oBAAoB,GAAG,IAAI,CAUrE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAclF;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAUhD;AAED,uFAAuF;AACvF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAKzE;AAuBD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAU9D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIzE"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client half of platform-admin act-as impersonation.
|
|
3
|
+
*
|
|
4
|
+
* The client holds an ID, never a capability. `X-Kortix-Impersonate: <grantId>`
|
|
5
|
+
* is only meaningful next to the operator's own Supabase JWT, and the API
|
|
6
|
+
* re-validates ownership, expiry, revocation and the operator's CURRENT
|
|
7
|
+
* platform role on every request (see apps/api/src/shared/impersonation.ts).
|
|
8
|
+
* So nothing here is a security boundary — losing this value to another tab or
|
|
9
|
+
* another user grants them nothing. What this module owes the user is honesty:
|
|
10
|
+
* while a session is stored, EVERY request carries the header, and the app
|
|
11
|
+
* shell shows the banner that says so.
|
|
12
|
+
*
|
|
13
|
+
* Persisted in `sessionStorage`, not `localStorage`: acting as an account is
|
|
14
|
+
* per-tab and must not outlive the tab. `window`/`sessionStorage` are globals,
|
|
15
|
+
* not imports, so every access is guarded — the SDK core has to load in Node,
|
|
16
|
+
* a Worker, and React Native, where neither exists.
|
|
17
|
+
*/
|
|
18
|
+
/** The request header. Matches `IMPERSONATION_HEADER` in the API. */
|
|
19
|
+
export const IMPERSONATION_HEADER = 'X-Kortix-Impersonate';
|
|
20
|
+
const STORAGE_KEY = 'kortix.impersonation';
|
|
21
|
+
let current = null;
|
|
22
|
+
let hydrated = false;
|
|
23
|
+
const listeners = new Set();
|
|
24
|
+
function storage() {
|
|
25
|
+
try {
|
|
26
|
+
if (typeof sessionStorage === 'undefined')
|
|
27
|
+
return null;
|
|
28
|
+
return sessionStorage;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Access to storage throws outright in some privacy modes.
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A session with no parseable future expiry is NOT a session. Treating an
|
|
37
|
+
* unreadable date as "no expiry" would leave a banner up, and a header
|
|
38
|
+
* attached, forever after one corrupt write.
|
|
39
|
+
*/
|
|
40
|
+
export function isImpersonationSessionLive(session, now = Date.now()) {
|
|
41
|
+
if (!session || !session.grantId || !session.accountId)
|
|
42
|
+
return false;
|
|
43
|
+
const expiry = Date.parse(session.expiresAt);
|
|
44
|
+
return Number.isFinite(expiry) && expiry > now;
|
|
45
|
+
}
|
|
46
|
+
function parse(raw) {
|
|
47
|
+
if (!raw)
|
|
48
|
+
return null;
|
|
49
|
+
try {
|
|
50
|
+
const parsed = JSON.parse(raw);
|
|
51
|
+
if (typeof parsed?.grantId !== 'string' || typeof parsed?.accountId !== 'string')
|
|
52
|
+
return null;
|
|
53
|
+
return {
|
|
54
|
+
grantId: parsed.grantId,
|
|
55
|
+
accountId: parsed.accountId,
|
|
56
|
+
accountName: typeof parsed.accountName === 'string' ? parsed.accountName : null,
|
|
57
|
+
expiresAt: typeof parsed.expiresAt === 'string' ? parsed.expiresAt : '',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function notify() {
|
|
65
|
+
for (const listener of listeners) {
|
|
66
|
+
try {
|
|
67
|
+
listener();
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// A broken subscriber must not stop the others, and must never break the
|
|
71
|
+
// request that triggered the change.
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The live session, or null. Reads through to `sessionStorage` once per JS
|
|
77
|
+
* context so a full page navigation (admin console → app shell) keeps acting
|
|
78
|
+
* as the account, then serves the in-memory mirror.
|
|
79
|
+
*
|
|
80
|
+
* An expired session is DROPPED here — the store never hands back a value the
|
|
81
|
+
* server would 403 — and dropping it notifies subscribers, so the banner
|
|
82
|
+
* disappears on its own when the hour is up.
|
|
83
|
+
*/
|
|
84
|
+
export function getImpersonationSession() {
|
|
85
|
+
if (!hydrated) {
|
|
86
|
+
hydrated = true;
|
|
87
|
+
current = parse(storage()?.getItem(STORAGE_KEY) ?? null);
|
|
88
|
+
}
|
|
89
|
+
if (current && !isImpersonationSessionLive(current)) {
|
|
90
|
+
clearImpersonationSession();
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
return current;
|
|
94
|
+
}
|
|
95
|
+
export function setImpersonationSession(session) {
|
|
96
|
+
hydrated = true;
|
|
97
|
+
if (!session) {
|
|
98
|
+
clearImpersonationSession();
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
current = session;
|
|
102
|
+
try {
|
|
103
|
+
storage()?.setItem(STORAGE_KEY, JSON.stringify(session));
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// Quota or privacy mode. The in-memory mirror still works for this tab's
|
|
107
|
+
// lifetime; only reload-survival is lost.
|
|
108
|
+
}
|
|
109
|
+
notify();
|
|
110
|
+
}
|
|
111
|
+
export function clearImpersonationSession() {
|
|
112
|
+
hydrated = true;
|
|
113
|
+
const had = current !== null;
|
|
114
|
+
current = null;
|
|
115
|
+
try {
|
|
116
|
+
storage()?.removeItem(STORAGE_KEY);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
/* see setImpersonationSession */
|
|
120
|
+
}
|
|
121
|
+
if (had)
|
|
122
|
+
notify();
|
|
123
|
+
}
|
|
124
|
+
/** Subscribe to session changes (the banner's data source). Returns an unsubscribe. */
|
|
125
|
+
export function subscribeToImpersonation(listener) {
|
|
126
|
+
listeners.add(listener);
|
|
127
|
+
return () => {
|
|
128
|
+
listeners.delete(listener);
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* The admin console is the ONE surface that is never impersonated.
|
|
133
|
+
*
|
|
134
|
+
* The server refuses an impersonated `/v1/admin/*` request outright — no
|
|
135
|
+
* nesting, no minting a second grant, no changing platform roles from inside a
|
|
136
|
+
* customer's context. The revoke route lives under that same prefix, so a
|
|
137
|
+
* client that attached the header everywhere would 403 its own Exit button and
|
|
138
|
+
* strand the operator until the grant expired.
|
|
139
|
+
*
|
|
140
|
+
* Skipping it here is UX, not a security decision: the server's denial is the
|
|
141
|
+
* control, and it still fires for any client that does send the header.
|
|
142
|
+
*
|
|
143
|
+
* Matched on `admin/` FOLLOWED BY one of the console's two sub-routers, not on
|
|
144
|
+
* the bare word: every admin route is `/admin/api/…` or `/admin/analytics/…`,
|
|
145
|
+
* while `/projects/admin/sessions` is an ordinary product path for a project
|
|
146
|
+
* that happens to be called "admin". Anchoring on the pair keeps a
|
|
147
|
+
* customer-controlled name from silently exempting itself, and keeps working
|
|
148
|
+
* when the backend URL carries a path prefix of its own.
|
|
149
|
+
*/
|
|
150
|
+
const ADMIN_CONSOLE_PATH_RE = /(^|\/)admin\/(api|analytics)(\/|$)/;
|
|
151
|
+
export function shouldAttachImpersonation(url) {
|
|
152
|
+
let path = url;
|
|
153
|
+
if (/^https?:\/\//.test(url)) {
|
|
154
|
+
try {
|
|
155
|
+
path = new URL(url).pathname;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
path = url;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return !ADMIN_CONSOLE_PATH_RE.test(path);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Headers a platform request adds while acting as an account. `{}` when there
|
|
165
|
+
* is no live session, so the ordinary path allocates one empty object and
|
|
166
|
+
* touches nothing else.
|
|
167
|
+
*/
|
|
168
|
+
export function impersonationHeaders(url) {
|
|
169
|
+
if (url !== undefined && !shouldAttachImpersonation(url))
|
|
170
|
+
return {};
|
|
171
|
+
const session = getImpersonationSession();
|
|
172
|
+
return session ? { [IMPERSONATION_HEADER]: session.grantId } : {};
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=impersonation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impersonation.js","sourceRoot":"","sources":["../../../src/core/http/impersonation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,qEAAqE;AACrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAc3C,IAAI,OAAO,GAAgC,IAAI,CAAC;AAChD,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;AAExC,SAAS,OAAO;IACd,IAAI,CAAC;QACH,IAAI,OAAO,cAAc,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC;QACvD,OAAO,cAAc,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAgD,EAChD,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC;AACjD,CAAC;AAED,SAAS,KAAK,CAAC,GAAkB;IAC/B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkC,CAAC;QAChE,IAAI,OAAO,MAAM,EAAE,OAAO,KAAK,QAAQ,IAAI,OAAO,MAAM,EAAE,SAAS,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC9F,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,WAAW,EAAE,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;YAC/E,SAAS,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;SACxE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,MAAM;IACb,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,QAAQ,EAAE,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACP,yEAAyE;YACzE,qCAAqC;QACvC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB;IACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,CAAC;QAChB,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,yBAAyB,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAoC;IAC1E,QAAQ,GAAG,IAAI,CAAC;IAChB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,yBAAyB,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IACD,OAAO,GAAG,OAAO,CAAC;IAClB,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,0CAA0C;IAC5C,CAAC;IACD,MAAM,EAAE,CAAC;AACX,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,QAAQ,GAAG,IAAI,CAAC;IAChB,MAAM,GAAG,GAAG,OAAO,KAAK,IAAI,CAAC;IAC7B,OAAO,GAAG,IAAI,CAAC;IACf,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IACD,IAAI,GAAG;QAAE,MAAM,EAAE,CAAC;AACpB,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,wBAAwB,CAAC,QAAoB;IAC3D,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,OAAO,GAAG,EAAE;QACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,qBAAqB,GAAG,oCAAoC,CAAC;AAEnE,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACpE,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAC1C,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACpE,CAAC"}
|
|
@@ -20,6 +20,12 @@ export interface GitHubAppStatus {
|
|
|
20
20
|
* 'pat' = a personal/fine-grained access token, via `setGitHubAppPat` or
|
|
21
21
|
* `MANAGED_GIT_GITHUB_TOKEN`. 'none' = unconfigured. */
|
|
22
22
|
source: 'db' | 'env' | 'pat' | 'none';
|
|
23
|
+
/** Whether the App's own OAuth client (client_id/client_secret) is set —
|
|
24
|
+
* required for the account-linking "Continue with GitHub" identity proof
|
|
25
|
+
* (apps/(auth)/github/setup). Independent of `configured`: the manifest
|
|
26
|
+
* flow always sets both together, but `setGitHubAppFromExisting` can leave
|
|
27
|
+
* this false if an operator pastes App creds without OAuth credentials. */
|
|
28
|
+
oauth_configured: boolean;
|
|
23
29
|
}
|
|
24
30
|
/** Whether a GitHub App is configured for this platform, and (if so) which one. */
|
|
25
31
|
export declare function getGitHubAppStatus(): Promise<GitHubAppStatus>;
|
|
@@ -50,6 +56,13 @@ export interface GitHubAppExistingInput {
|
|
|
50
56
|
/** The id of this App's installation on the target account/org. */
|
|
51
57
|
installationId: string;
|
|
52
58
|
slug?: string;
|
|
59
|
+
/** The App's own OAuth client id/secret (GitHub settings → General →
|
|
60
|
+
* "Client secrets"). Optional — without these the App-JWT/installation
|
|
61
|
+
* half still works, but the account-linking "Continue with GitHub"
|
|
62
|
+
* identity proof stays unconfigured for this App until they're supplied
|
|
63
|
+
* here or via KORTIX_GITHUB_APP_CLIENT_ID/SECRET. */
|
|
64
|
+
clientId?: string;
|
|
65
|
+
clientSecret?: string;
|
|
53
66
|
}
|
|
54
67
|
/**
|
|
55
68
|
* "Paste an existing GitHub App" — an alternative to the manifest flow for an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-app.d.ts","sourceRoot":"","sources":["../../../../src/core/rest/platform-client/github-app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;6DAIyD;IACzD,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"github-app.d.ts","sourceRoot":"","sources":["../../../../src/core/rest/platform-client/github-app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;6DAIyD;IACzD,MAAM,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IACtC;;;;gFAI4E;IAC5E,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,mFAAmF;AACnF,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAOnE;AAED,MAAM,WAAW,2BAA2B;IAC1C,4FAA4F;IAC5F,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,0FAA0F;IAC1F,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0FAA0F;IAC1F,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,qGAAqG;IACrG,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,GAAE,2BAAgC,GACtC,OAAO,CAAC,sBAAsB,CAAC,CASjC;AAED,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;0DAIsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBtC;AAED,MAAM,WAAW,iBAAiB;IAChC,oGAAoG;IACpG,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAOrF;AAED,mFAAmF;AACnF,wBAAsB,mBAAmB,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAOjE"}
|
|
@@ -46,6 +46,8 @@ export async function setGitHubAppFromExisting(input) {
|
|
|
46
46
|
private_key: input.privateKey,
|
|
47
47
|
installation_id: input.installationId,
|
|
48
48
|
slug: input.slug,
|
|
49
|
+
client_id: input.clientId,
|
|
50
|
+
client_secret: input.clientSecret,
|
|
49
51
|
}, { showErrors: false });
|
|
50
52
|
if (response.error)
|
|
51
53
|
throw response.error;
|