@octonodes/ui-extensions 0.2.13 → 0.2.26

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.
Files changed (79) hide show
  1. package/README.md +105 -8
  2. package/dist/app/OctonodeAppProvider/AppAccessScreen/AppAccessScreen.d.ts +3 -0
  3. package/dist/app/OctonodeAppProvider/AppAccessScreen/AppAccessScreen.d.ts.map +1 -0
  4. package/dist/app/OctonodeAppProvider/AppAccessScreen/AppAccessScreen.js +17 -0
  5. package/dist/app/OctonodeAppProvider/AppAccessScreen/AppAccessScreen.js.map +1 -0
  6. package/dist/app/OctonodeAppProvider/AppAccessScreen/AppAccessScreen.types.d.ts +4 -0
  7. package/dist/app/OctonodeAppProvider/AppAccessScreen/AppAccessScreen.types.d.ts.map +1 -0
  8. package/dist/app/OctonodeAppProvider/AppAccessScreen/AppAccessScreen.types.js +2 -0
  9. package/dist/app/OctonodeAppProvider/AppAccessScreen/AppAccessScreen.types.js.map +1 -0
  10. package/dist/app/OctonodeAppProvider/AppAccessScreen/constants.d.ts +3 -0
  11. package/dist/app/OctonodeAppProvider/AppAccessScreen/constants.d.ts.map +1 -0
  12. package/dist/app/OctonodeAppProvider/AppAccessScreen/constants.js +14 -0
  13. package/dist/app/OctonodeAppProvider/AppAccessScreen/constants.js.map +1 -0
  14. package/dist/app/OctonodeAppProvider/AppAccessScreen/index.d.ts +3 -0
  15. package/dist/app/OctonodeAppProvider/AppAccessScreen/index.d.ts.map +1 -0
  16. package/dist/app/OctonodeAppProvider/AppAccessScreen/index.js +3 -0
  17. package/dist/app/OctonodeAppProvider/AppAccessScreen/index.js.map +1 -0
  18. package/dist/app/OctonodeAppProvider/OctonodeAppProvider.d.ts +5 -0
  19. package/dist/app/OctonodeAppProvider/OctonodeAppProvider.d.ts.map +1 -0
  20. package/dist/app/OctonodeAppProvider/OctonodeAppProvider.js +72 -0
  21. package/dist/app/OctonodeAppProvider/OctonodeAppProvider.js.map +1 -0
  22. package/dist/app/OctonodeAppProvider/OctonodeAppProvider.types.d.ts +12 -0
  23. package/dist/app/OctonodeAppProvider/OctonodeAppProvider.types.d.ts.map +1 -0
  24. package/dist/app/OctonodeAppProvider/OctonodeAppProvider.types.js +2 -0
  25. package/dist/app/OctonodeAppProvider/OctonodeAppProvider.types.js.map +1 -0
  26. package/dist/app/OctonodeAppProvider/index.d.ts +3 -0
  27. package/dist/app/OctonodeAppProvider/index.d.ts.map +1 -0
  28. package/dist/app/OctonodeAppProvider/index.js +3 -0
  29. package/dist/app/OctonodeAppProvider/index.js.map +1 -0
  30. package/dist/app/constants.d.ts +2 -0
  31. package/dist/app/constants.d.ts.map +1 -0
  32. package/dist/app/constants.js +3 -0
  33. package/dist/app/constants.js.map +1 -0
  34. package/dist/app/hosted.d.ts +6 -0
  35. package/dist/app/hosted.d.ts.map +1 -0
  36. package/dist/app/hosted.js +174 -0
  37. package/dist/app/hosted.js.map +1 -0
  38. package/dist/app/index.d.ts +5 -1
  39. package/dist/app/index.d.ts.map +1 -1
  40. package/dist/app/index.js +6 -4
  41. package/dist/app/index.js.map +1 -1
  42. package/dist/app/project.d.ts +1 -1
  43. package/dist/app/project.d.ts.map +1 -1
  44. package/dist/app/server.d.ts +4 -0
  45. package/dist/app/server.d.ts.map +1 -1
  46. package/dist/app/server.js +15 -3
  47. package/dist/app/server.js.map +1 -1
  48. package/dist/app/types.d.ts +24 -3
  49. package/dist/app/types.d.ts.map +1 -1
  50. package/dist/contributions.d.ts +5 -0
  51. package/dist/contributions.d.ts.map +1 -0
  52. package/dist/contributions.js +71 -0
  53. package/dist/contributions.js.map +1 -0
  54. package/dist/contributions.types.d.ts +93 -0
  55. package/dist/contributions.types.d.ts.map +1 -0
  56. package/dist/contributions.types.js +2 -0
  57. package/dist/contributions.types.js.map +1 -0
  58. package/dist/index.d.ts +9 -4
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +12 -4
  61. package/dist/index.js.map +1 -1
  62. package/dist/locales/de.json +22 -0
  63. package/dist/locales/en.json +22 -0
  64. package/dist/locales/es.json +22 -0
  65. package/dist/locales/fr.json +22 -0
  66. package/dist/locales/index.d.ts +113 -0
  67. package/dist/locales/index.d.ts.map +1 -0
  68. package/dist/locales/index.js +8 -0
  69. package/dist/locales/index.js.map +1 -0
  70. package/dist/locales/ja.json +22 -0
  71. package/dist/react.d.ts +2 -0
  72. package/dist/react.d.ts.map +1 -1
  73. package/dist/react.js +16 -4
  74. package/dist/react.js.map +1 -1
  75. package/dist/targets.d.ts +2 -0
  76. package/dist/targets.d.ts.map +1 -0
  77. package/dist/targets.js +46 -0
  78. package/dist/targets.js.map +1 -0
  79. package/package.json +5 -1
@@ -0,0 +1,174 @@
1
+ import { HOSTED_APP_PROTOCOL } from "./constants.js";
2
+ /** Only app-relative routes may cross the Studio boundary. */
3
+ export function appRoute(value) {
4
+ if (typeof value !== "string" || value.length > 4096 || !value.startsWith("/") || /[\\\s\p{Cc}]/u.test(value))
5
+ return null;
6
+ try {
7
+ const url = new URL(value, "https://app.invalid");
8
+ if (url.origin !== "https://app.invalid" || url.username || url.password || url.hash.includes("octonode_session"))
9
+ return null;
10
+ return url.pathname + url.search + url.hash;
11
+ }
12
+ catch {
13
+ return null;
14
+ }
15
+ }
16
+ /** Browser history remains the router. The bridge mirrors it into the Studio URL. */
17
+ export function connectHostedApp() {
18
+ const fragment = new URLSearchParams(location.hash.slice(1));
19
+ const embedded = parent !== window;
20
+ // Only non-secret embedding coordinates survive a child reload.
21
+ let saved = null;
22
+ try {
23
+ if (embedded)
24
+ saved = sessionStorage.getItem("octonode.host");
25
+ }
26
+ catch {
27
+ /* Storage can be disabled in embedded browsers. */
28
+ }
29
+ const coordinates = saved ? new URLSearchParams(saved) : new URLSearchParams();
30
+ const origin = fragment.get("octonode_parent") ?? coordinates.get("origin");
31
+ const nonce = fragment.get("octonode_channel") ?? coordinates.get("channel");
32
+ if (embedded &&
33
+ (!origin ||
34
+ !nonce ||
35
+ new URL(origin).origin !== origin ||
36
+ !(origin.startsWith("https://") || /^http:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/.test(origin))))
37
+ throw new Error("Open this app from Studio to establish a trusted session");
38
+ try {
39
+ if (embedded)
40
+ sessionStorage.setItem("octonode.host", new URLSearchParams({ origin: origin, channel: nonce }).toString());
41
+ }
42
+ catch {
43
+ /* The launch coordinates still establish this session. */
44
+ }
45
+ const token = embedded ? undefined : (fragment.get("octonode_session") ?? undefined);
46
+ if (fragment.has("octonode_parent") || token)
47
+ history.replaceState(history.state, "", appRoute(fragment.get("octonode_path")) ?? location.pathname + location.search);
48
+ const listeners = new Set();
49
+ let state = {
50
+ embedded,
51
+ status: token ? "ready" : embedded ? "connecting" : "standalone",
52
+ token,
53
+ path: location.pathname + location.search + location.hash,
54
+ };
55
+ let disposed = false;
56
+ let navigation = [];
57
+ const publish = (patch) => {
58
+ state = { ...state, ...patch };
59
+ listeners.forEach((listener) => listener());
60
+ };
61
+ const send = (message) => {
62
+ if (embedded && !disposed)
63
+ parent.postMessage({ ...message, octonode: HOSTED_APP_PROTOCOL, channel: nonce }, origin);
64
+ };
65
+ const push = history.pushState;
66
+ const replace = history.replaceState;
67
+ const routeChanged = (replaceRoute = false) => {
68
+ const path = location.pathname + location.search + location.hash;
69
+ publish({ path });
70
+ send({ type: "navigate", path, replace: replaceRoute });
71
+ };
72
+ const pushRoute = function (...args) {
73
+ push.apply(history, args);
74
+ routeChanged();
75
+ };
76
+ const replaceRoute = function (...args) {
77
+ replace.apply(history, args);
78
+ routeChanged(true);
79
+ };
80
+ history.pushState = pushRoute;
81
+ history.replaceState = replaceRoute;
82
+ const popped = () => routeChanged(true);
83
+ const receive = (event) => {
84
+ const message = event.data;
85
+ if (!embedded ||
86
+ event.source !== parent ||
87
+ event.origin !== origin ||
88
+ message?.octonode !== HOSTED_APP_PROTOCOL ||
89
+ message.channel !== nonce)
90
+ return;
91
+ if (message.type === "session" &&
92
+ typeof message.token === "string" &&
93
+ /^octo_app_[A-Za-z0-9_-]{43}$/.test(message.token) &&
94
+ Number.isFinite(message.expiresAt) &&
95
+ message.expiresAt > Date.now()) {
96
+ publish({ status: "ready", token: message.token, expiresAt: message.expiresAt });
97
+ send({ type: "ack" });
98
+ if (navigation.length)
99
+ send({ type: "navigation", items: navigation });
100
+ }
101
+ if (message.type === "expired")
102
+ publish({ status: "expired", token: undefined });
103
+ if (message.type === "route") {
104
+ const path = appRoute(message.path);
105
+ if (path && path !== state.path) {
106
+ replace.call(history, history.state, "", path);
107
+ publish({ path });
108
+ dispatchEvent(new PopStateEvent("popstate", { state: history.state }));
109
+ }
110
+ }
111
+ };
112
+ addEventListener("message", receive);
113
+ addEventListener("popstate", popped);
114
+ addEventListener("hashchange", popped);
115
+ const heartbeat = setInterval(() => {
116
+ if (state.expiresAt && state.expiresAt <= Date.now())
117
+ publish({ status: "expired", token: undefined });
118
+ send({ type: "ready" });
119
+ }, 1000);
120
+ send({ type: "ready" });
121
+ return {
122
+ getSnapshot: () => state,
123
+ subscribe(listener) {
124
+ listeners.add(listener);
125
+ return () => {
126
+ listeners.delete(listener);
127
+ };
128
+ },
129
+ navigate(path, options = {}) {
130
+ const route = appRoute(path);
131
+ if (!route)
132
+ throw new Error("Expected an app-relative route");
133
+ history[options.replace ? "replaceState" : "pushState"](null, "", route);
134
+ dispatchEvent(new PopStateEvent("popstate"));
135
+ },
136
+ setNavigation(items) {
137
+ if (items.length > 12 ||
138
+ items.some((item) => !item.label.trim() || item.label.length > 40 || !appRoute(item.path)))
139
+ throw new Error("Expected up to 12 app-relative navigation items");
140
+ navigation = items;
141
+ if (state.status === "ready")
142
+ send({ type: "navigation", items });
143
+ },
144
+ async fetch(input, init) {
145
+ const url = new URL(input, location.href);
146
+ if (url.origin !== location.origin)
147
+ throw new Error("App bearer may only be sent to the app's own backend");
148
+ if (!state.token || (state.expiresAt && state.expiresAt <= Date.now()))
149
+ throw new Error("App session expired. Reopen the app from Studio.");
150
+ const headers = new Headers(init?.headers);
151
+ headers.set("authorization", `Bearer ${state.token}`);
152
+ const response = await fetch(url, { ...init, headers, redirect: "error" });
153
+ if (response.status === 401) {
154
+ publish({ status: "expired", token: undefined });
155
+ send({ type: "ready" });
156
+ }
157
+ return response;
158
+ },
159
+ dispose() {
160
+ disposed = true;
161
+ clearInterval(heartbeat);
162
+ removeEventListener("message", receive);
163
+ removeEventListener("popstate", popped);
164
+ removeEventListener("hashchange", popped);
165
+ if (history.pushState === pushRoute)
166
+ history.pushState = push;
167
+ if (history.replaceState === replaceRoute)
168
+ history.replaceState = replace;
169
+ listeners.clear();
170
+ state = { ...state, token: undefined };
171
+ },
172
+ };
173
+ }
174
+ //# sourceMappingURL=hosted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted.js","sourceRoot":"","sources":["../../src/app/hosted.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,9 @@
1
- import type { AppContext } from "./types.js";
1
+ import type { AppBridgeRequest, AppContext } from "./types.js";
2
2
  export type { AppBridgeRequest, AppBridgeResponse, AppContext, AppExecution, AppGrant, AppProject } from "./types.js";
3
+ export type { HostedApp, HostedAppNavigationItem, HostedAppState } from "./types.js";
4
+ export { connectHostedApp, appRoute } from "./hosted.js";
5
+ export { HOSTED_APP_PROTOCOL } from "./constants.js";
6
+ export declare function request<T>(operation: AppBridgeRequest["operation"], body?: unknown): Promise<T>;
3
7
  /** Connects an installed extension to its live workspace and project grants. */
4
8
  export declare function connectApp(): Promise<AppContext>;
5
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAuC,UAAU,EAAY,MAAM,YAAY,CAAC;AAE5F,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA8CtH,gFAAgF;AAChF,wBAAsB,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CAUtD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAqB,UAAU,EAAY,MAAM,YAAY,CAAC;AAE5F,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtH,YAAY,EAAE,SAAS,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,wBAAgB,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CA0C/F;AAED,gFAAgF;AAChF,wBAAsB,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,CAUtD"}
package/dist/app/index.js CHANGED
@@ -1,8 +1,10 @@
1
1
  // Generated from packages/ui-extensions/src/app/index.ts. Do not edit; run the Octonode SDK sync.
2
2
  import { getAppSession, UI_EXTENSION_API_VERSION } from "../index.js";
3
3
  import { appContext } from "./project.js";
4
- function request(operation, body) {
5
- getAppSession();
4
+ export { connectHostedApp, appRoute } from "./hosted.js";
5
+ export { HOSTED_APP_PROTOCOL } from "./constants.js";
6
+ export function request(operation, body) {
7
+ const apiVersion = getAppSession().protocolVersion ?? UI_EXTENSION_API_VERSION;
6
8
  if (parent === window)
7
9
  throw new Error("App actions require an installed extension");
8
10
  const requestId = crypto.randomUUID();
@@ -14,7 +16,7 @@ function request(operation, body) {
14
16
  if (event.source !== parent ||
15
17
  message?.octonode !== "ui-extension" ||
16
18
  message.type !== "app-response" ||
17
- message.apiVersion !== UI_EXTENSION_API_VERSION ||
19
+ message.apiVersion !== apiVersion ||
18
20
  message.requestId !== requestId)
19
21
  return;
20
22
  finish(message.ok ? undefined : new Error(message.error || "App action failed"), message.value);
@@ -32,7 +34,7 @@ function request(operation, body) {
32
34
  function send() {
33
35
  parent.postMessage({
34
36
  octonode: "ui-extension",
35
- apiVersion: UI_EXTENSION_API_VERSION,
37
+ apiVersion,
36
38
  type: "app-request",
37
39
  requestId,
38
40
  operation,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1C,SAAS,OAAO,CAAI,SAAwC,EAAE,IAAc;IAC1E,aAAa,EAAE,CAAC;IAChB,IAAI,MAAM,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACtC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACpF,MAAM,KAAK,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7E,MAAM,OAAO,GAAG,CAAC,KAAmB,EAAE,EAAE;YACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAyC,CAAC;YAChE,IACE,KAAK,CAAC,MAAM,KAAK,MAAM;gBACvB,OAAO,EAAE,QAAQ,KAAK,cAAc;gBACpC,OAAO,CAAC,IAAI,KAAK,cAAc;gBAC/B,OAAO,CAAC,UAAU,KAAK,wBAAwB;gBAC/C,OAAO,CAAC,SAAS,KAAK,SAAS;gBAE/B,OAAO;YACT,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAAC,EAAE,OAAO,CAAC,KAAU,CAAC,CAAC;QACvG,CAAC,CAAC;QACF,SAAS,MAAM,CAAC,KAAa,EAAE,KAAS;YACtC,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxC,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;gBACpB,OAAO,CAAC,KAAU,CAAC,CAAC;QAC3B,CAAC;QACD,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACrC,SAAS,IAAI;YACX,MAAM,CAAC,WAAW,CAChB;gBACE,QAAQ,EAAE,cAAc;gBACxB,UAAU,EAAE,wBAAwB;gBACpC,IAAI,EAAE,aAAa;gBACnB,SAAS;gBACT,SAAS;gBACT,IAAI;aACsB,EAC5B,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAM3B,SAAS,CAAC,CAAC;IACd,OAAO,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1C,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,UAAU,OAAO,CAAI,SAAwC,EAAE,IAAc;IACjF,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC,eAAe,IAAI,wBAAwB,CAAC;IAC/E,IAAI,MAAM,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACtC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACpF,MAAM,KAAK,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7E,MAAM,OAAO,GAAG,CAAC,KAAmB,EAAE,EAAE;YACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAyC,CAAC;YAChE,IACE,KAAK,CAAC,MAAM,KAAK,MAAM;gBACvB,OAAO,EAAE,QAAQ,KAAK,cAAc;gBACpC,OAAO,CAAC,IAAI,KAAK,cAAc;gBAC/B,OAAO,CAAC,UAAU,KAAK,UAAU;gBACjC,OAAO,CAAC,SAAS,KAAK,SAAS;gBAE/B,OAAO;YACT,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAAC,EAAE,OAAO,CAAC,KAAU,CAAC,CAAC;QACvG,CAAC,CAAC;QACF,SAAS,MAAM,CAAC,KAAa,EAAE,KAAS;YACtC,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxC,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;gBACpB,OAAO,CAAC,KAAU,CAAC,CAAC;QAC3B,CAAC;QACD,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACrC,SAAS,IAAI;YACX,MAAM,CAAC,WAAW,CAChB;gBACE,QAAQ,EAAE,cAAc;gBACxB,UAAU;gBACV,IAAI,EAAE,aAAa;gBACnB,SAAS;gBACT,SAAS;gBACT,IAAI;aACsB,EAC5B,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAM3B,SAAS,CAAC,CAAC;IACd,OAAO,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type { AppSession } from "../index.js";
2
2
  import type { AppBridgeRequest, AppContext, AppGrant } from "./types.js";
3
- export type AppRequest = <T>(operation: AppBridgeRequest["operation"], body?: unknown) => Promise<T>;
3
+ export type AppRequest = <T>(operation: Exclude<AppBridgeRequest["operation"], "host">, body?: unknown) => Promise<T>;
4
4
  export declare function appContext(session: Pick<AppSession, "appId" | "installationId" | "workspace" | "projectId">, verified: {
5
5
  appId: string;
6
6
  installationId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/app/project.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAgB,QAAQ,EAAc,MAAM,YAAY,CAAC;AAEnG,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAoCrG,wBAAgB,UAAU,CACxB,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,gBAAgB,GAAG,WAAW,GAAG,WAAW,CAAC,EACjF,QAAQ,EAAE;IACR,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,CAAC;CACpB,EACD,OAAO,EAAE,UAAU,GAClB,UAAU,CAyBZ"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/app/project.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAgB,QAAQ,EAAc,MAAM,YAAY,CAAC;AAEnG,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAoCtH,wBAAgB,UAAU,CACxB,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,gBAAgB,GAAG,WAAW,GAAG,WAAW,CAAC,EACjF,QAAQ,EAAE;IACR,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACnC,MAAM,EAAE,QAAQ,EAAE,CAAC;CACpB,EACD,OAAO,EAAE,UAAU,GAClB,UAAU,CAyBZ"}
@@ -1,5 +1,9 @@
1
1
  import type { AppContext } from "./types.js";
2
2
  export type { AppContext, AppExecution, AppGrant, AppProject } from "./types.js";
3
+ export declare class AppRequestError extends Error {
4
+ readonly status: number;
5
+ constructor(message: string, status: number);
6
+ }
3
7
  /** Verify the browser's app bearer before using it from a developer-hosted backend. */
4
8
  export declare function connectAppServer(token: string, options: {
5
9
  appId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/app/server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;AAEvD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjF,uFAAuF;AACvF,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D,OAAO,CAAC,UAAU,CAAC,CAgCrB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/app/server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;AAEvD,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjF,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,MAAM,EAAE,MAAM;gBAD9B,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM;CAKjC;AAED,uFAAuF;AACvF,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D,OAAO,CAAC,UAAU,CAAC,CAoCrB"}
@@ -1,9 +1,17 @@
1
1
  // Generated from packages/ui-extensions/src/app/server.ts. Do not edit; run the Octonode SDK sync.
2
2
  import { appContext } from "./project.js";
3
+ export class AppRequestError extends Error {
4
+ status;
5
+ constructor(message, status) {
6
+ super(message);
7
+ this.status = status;
8
+ this.name = "AppRequestError";
9
+ }
10
+ }
3
11
  /** Verify the browser's app bearer before using it from a developer-hosted backend. */
4
12
  export async function connectAppServer(token, options) {
5
13
  if (!/^octo_app_[A-Za-z0-9_-]{43}$/.test(token))
6
- throw new Error("Invalid app session");
14
+ throw new AppRequestError("Invalid app session", 401);
7
15
  const base = new URL(options.baseUrl);
8
16
  if (base.protocol !== "https:" && !(base.protocol === "http:" && ["localhost", "127.0.0.1"].includes(base.hostname)))
9
17
  throw new Error("Octonode API URL must use HTTPS");
@@ -14,6 +22,8 @@ export async function connectAppServer(token, options) {
14
22
  ? "/api/apps/runtime/data"
15
23
  : "/api/apps/runtime/executions";
16
24
  const response = await fetch(new URL(path, base), {
25
+ redirect: "manual",
26
+ signal: AbortSignal.timeout(15_000),
17
27
  method: operation === "context" ? "GET" : "POST",
18
28
  headers: {
19
29
  authorization: `Bearer ${token}`,
@@ -21,13 +31,15 @@ export async function connectAppServer(token, options) {
21
31
  },
22
32
  ...(operation === "context" ? {} : { body: JSON.stringify(body) }),
23
33
  });
34
+ if (response.status >= 300 && response.status < 400)
35
+ throw new AppRequestError("Octonode app API redirects are not allowed", 502);
24
36
  if (!response.ok)
25
- throw new Error(`Octonode app request failed (${response.status})`);
37
+ throw new AppRequestError(`Octonode app request failed (${response.status})`, response.status);
26
38
  return response.json();
27
39
  };
28
40
  const verified = await request("context");
29
41
  if (verified.appId !== options.appId)
30
- throw new Error("App session belongs to another app");
42
+ throw new AppRequestError("App session belongs to another app", 403);
31
43
  return appContext({ ...verified, projectId: options.projectId }, verified, request);
32
44
  }
33
45
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/app/server.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAK3D,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAa,EACb,OAA+D;IAE/D,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClH,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,MAAM,OAAO,GAAe,KAAK,EAAK,SAA8C,EAAE,IAAc,EAAc,EAAE;QAClH,MAAM,IAAI,GACR,SAAS,KAAK,SAAS;YACrB,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,SAAS,KAAK,MAAM;gBACpB,CAAC,CAAC,wBAAwB;gBAC1B,CAAC,CAAC,8BAA8B,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;YAChD,MAAM,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;YAChD,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;aAC3E;YACD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;SACnE,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACtF,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAM3B,SAAS,CAAC,CAAC;IACd,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC5F,OAAO,UAAU,CAAC,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACtF,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/app/server.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAK3D,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGtB;IAFlB,YACE,OAAe,EACC,MAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,WAAM,GAAN,MAAM,CAAQ;QAG9B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAa,EACb,OAA+D;IAE/D,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,eAAe,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IACvG,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClH,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,MAAM,OAAO,GAAe,KAAK,EAAK,SAA8C,EAAE,IAAc,EAAc,EAAE;QAClH,MAAM,IAAI,GACR,SAAS,KAAK,SAAS;YACrB,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,SAAS,KAAK,MAAM;gBACpB,CAAC,CAAC,wBAAwB;gBAC1B,CAAC,CAAC,8BAA8B,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;YAChD,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;YACnC,MAAM,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;YAChD,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;aAC3E;YACD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;SACnE,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG;YACjD,MAAM,IAAI,eAAe,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;QAC/E,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,eAAe,CAAC,gCAAgC,QAAQ,CAAC,MAAM,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjH,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAM3B,SAAS,CAAC,CAAC;IACd,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;QAAE,MAAM,IAAI,eAAe,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;IAC3G,OAAO,UAAU,CAAC,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACtF,CAAC"}
@@ -1,4 +1,25 @@
1
1
  import type { AppSession } from "../index.js";
2
+ export type HostedAppState = {
3
+ embedded: boolean;
4
+ status: "connecting" | "ready" | "standalone" | "expired";
5
+ token?: string;
6
+ expiresAt?: number;
7
+ path: string;
8
+ };
9
+ export type HostedAppNavigationItem = {
10
+ label: string;
11
+ path: string;
12
+ };
13
+ export type HostedApp = {
14
+ getSnapshot(): HostedAppState;
15
+ subscribe(listener: () => void): () => void;
16
+ navigate(path: string, options?: {
17
+ replace?: boolean;
18
+ }): void;
19
+ setNavigation(items: HostedAppNavigationItem[]): void;
20
+ fetch(input: string, init?: RequestInit): Promise<Response>;
21
+ dispose(): void;
22
+ };
2
23
  export type AppGrant = {
3
24
  action: "projects:read" | "data:read" | "data:write" | "workflows:run";
4
25
  projectId: string;
@@ -52,15 +73,15 @@ export type AppContext = {
52
73
  };
53
74
  export type AppBridgeRequest = {
54
75
  octonode: "ui-extension";
55
- apiVersion: "1";
76
+ apiVersion: "1" | "2";
56
77
  type: "app-request";
57
78
  requestId: string;
58
- operation: "context" | "data" | "workflow.run";
79
+ operation: "context" | "data" | "workflow.run" | "host";
59
80
  body?: unknown;
60
81
  };
61
82
  export type AppBridgeResponse = {
62
83
  octonode: "ui-extension";
63
- apiVersion: "1";
84
+ apiVersion: "1" | "2";
64
85
  type: "app-response";
65
86
  requestId: string;
66
87
  ok: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/app/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,EAAE,eAAe,GAAG,WAAW,GAAG,YAAY,GAAG,eAAe,CAAC;IACvE,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,MAAM,EAAE;QACN,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,EAAE;YACJ,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;gBAAE,MAAM,CAAC,EAAE,MAAM,CAAC;gBAAC,KAAK,CAAC,EAAE,MAAM,CAAA;aAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YACrF,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YACzE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YACjH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;SAC1D,CAAC;KACH,CAAC;IACF,EAAE,EAAE;QACF,GAAG,CACD,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE;YAAE,cAAc,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE,GAClD,OAAO,CAAC,YAAY,CAAC,CAAC;KAC1B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3B,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACnC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC5B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,GAAG,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,cAAc,CAAC;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,GAAG,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/app/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ActionDefinition, AppExtensionTarget, ExtensionApi } from "./contributions.types.js";
2
+ export declare function extensionApi(target: AppExtensionTarget): ExtensionApi;
3
+ export declare function defineAction(target: AppExtensionTarget, handler: ActionDefinition["handler"]): ActionDefinition;
4
+ export declare function startAction(definition: ActionDefinition): void;
5
+ //# sourceMappingURL=contributions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contributions.d.ts","sourceRoot":"","sources":["../src/contributions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAEhB,kBAAkB,EAClB,YAAY,EAEb,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAkBrE;AACD,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAE/G;AACD,wBAAgB,WAAW,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CA8C9D"}
@@ -0,0 +1,71 @@
1
+ // Generated from packages/ui-extensions/src/contributions.ts. Do not edit; run the Octonode SDK sync.
2
+ import { getAppSession } from "./index.js";
3
+ import { request } from "./app/index.js";
4
+ function environment(target) {
5
+ getAppSession();
6
+ const value = globalThis.__octonodeExtension;
7
+ if (!value || value.target !== target)
8
+ throw new Error("Extension target context unavailable");
9
+ return value;
10
+ }
11
+ export function extensionApi(target) {
12
+ const value = environment(target);
13
+ return {
14
+ target,
15
+ context: value.context,
16
+ i18n: { t: (key) => value.translations[key] ?? key },
17
+ ui: {
18
+ openPanel: (id) => request("host", { command: "panel.open", id }),
19
+ openAssistant: (suggestion) => request("host", { command: "assistant.open", suggestion }),
20
+ },
21
+ tabs: {
22
+ undo: (scope, revision) => request("host", { command: "layout.undo", scope, revision }),
23
+ list: () => request("host", { command: "layout.list" }),
24
+ update: (scope, revision, items) => request("host", { command: "layout.update", scope, revision, items }),
25
+ },
26
+ edits: { propose: (input) => request("host", { command: "edit.propose", ...input }) },
27
+ };
28
+ }
29
+ export function defineAction(target, handler) {
30
+ return { kind: "action", target, handler };
31
+ }
32
+ export function startAction(definition) {
33
+ const value = environment(definition.target);
34
+ if (!value.invocationId)
35
+ throw new Error("Actions require host invocation");
36
+ const controller = new AbortController();
37
+ addEventListener("pagehide", () => controller.abort(), { once: true });
38
+ const api = {
39
+ ...extensionApi(definition.target),
40
+ signal: controller.signal,
41
+ invocationId: value.invocationId,
42
+ };
43
+ parent.postMessage({
44
+ octonode: "ui-extension",
45
+ apiVersion: "2",
46
+ type: "render",
47
+ target: definition.target,
48
+ tree: { type: "node-form", children: [] },
49
+ }, "*");
50
+ Promise.resolve()
51
+ .then(() => definition.handler(api))
52
+ .then(() => {
53
+ parent.postMessage({
54
+ octonode: "ui-extension",
55
+ apiVersion: "2",
56
+ type: "action-complete",
57
+ target: definition.target,
58
+ invocationId: value.invocationId,
59
+ }, "*");
60
+ })
61
+ .catch(() => {
62
+ parent.postMessage({
63
+ octonode: "ui-extension",
64
+ apiVersion: "2",
65
+ type: "error",
66
+ target: definition.target,
67
+ message: "Extension action failed",
68
+ }, "*");
69
+ });
70
+ }
71
+ //# sourceMappingURL=contributions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contributions.js","sourceRoot":"","sources":["../src/contributions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import type { APP_EXTENSION_TARGETS } from "./targets.js";
2
+ export type AppExtensionTarget = (typeof APP_EXTENSION_TARGETS)[number];
3
+ export type ExtensionContext = Readonly<{
4
+ projectId?: string;
5
+ worktreeId?: string;
6
+ workflowId?: string;
7
+ nodeId?: string;
8
+ nodeKind?: string;
9
+ edgeId?: string;
10
+ executionId?: string;
11
+ taskSpaceId?: string;
12
+ itemId?: string;
13
+ documentId?: string;
14
+ documentFormat?: "markdown" | "html" | "latex";
15
+ tableId?: string;
16
+ rowId?: string;
17
+ filePath?: string;
18
+ revision?: string | number;
19
+ draftRevision?: number;
20
+ selectedIds?: readonly string[];
21
+ canvas?: {
22
+ x: number;
23
+ y: number;
24
+ };
25
+ readOnly: boolean;
26
+ tasks?: readonly {
27
+ itemId: string;
28
+ taskSpaceId: string;
29
+ revision: number;
30
+ }[];
31
+ nodes?: readonly {
32
+ id: string;
33
+ kind?: string;
34
+ label?: string;
35
+ }[];
36
+ selection?: {
37
+ start: number;
38
+ end: number;
39
+ };
40
+ }>;
41
+ export type ExtensionApi = {
42
+ readonly target: AppExtensionTarget;
43
+ readonly context: ExtensionContext;
44
+ i18n: {
45
+ t(key: string): string;
46
+ };
47
+ ui: {
48
+ openPanel(id: string): Promise<void>;
49
+ openAssistant(suggestion?: string): Promise<void>;
50
+ };
51
+ edits: {
52
+ propose(input: {
53
+ resource: "file" | "document";
54
+ baseRevision: string;
55
+ draftRevision: number;
56
+ content: string;
57
+ mode: "append" | "replace" | "replace-selection";
58
+ }): Promise<void>;
59
+ };
60
+ tabs: {
61
+ undo(scope: string, revision: string): Promise<void>;
62
+ list(): Promise<{
63
+ scope: string;
64
+ revision: string;
65
+ items: {
66
+ id: string;
67
+ label?: string;
68
+ pinned?: boolean;
69
+ }[];
70
+ }[]>;
71
+ update(scope: string, revision: string, items: {
72
+ id: string;
73
+ label?: string;
74
+ pinned?: boolean;
75
+ }[]): Promise<void>;
76
+ };
77
+ };
78
+ export type ActionApi = ExtensionApi & {
79
+ signal: AbortSignal;
80
+ invocationId: string;
81
+ };
82
+ export type ActionDefinition = {
83
+ kind: "action";
84
+ target: AppExtensionTarget;
85
+ handler(api: ActionApi): Promise<void> | void;
86
+ };
87
+ export type ExtensionEnvironment = {
88
+ target: AppExtensionTarget;
89
+ context: ExtensionContext;
90
+ translations: Readonly<Record<string, string>>;
91
+ invocationId?: string;
92
+ };
93
+ //# sourceMappingURL=contributions.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contributions.types.d.ts","sourceRoot":"","sources":["../src/contributions.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contributions.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contributions.types.js","sourceRoot":"","sources":["../src/contributions.types.ts"],"names":[],"mappings":""}