@kittl/sdk 0.0.9 → 1.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dashboardStandalonePage/sdk.d.ts +8261 -0
- package/dist/{kittl-sdk.esm.js → dashboardStandalonePage/sdk.esm.js} +191 -301
- package/dist/{kittl-sdk.js → dashboardStandalonePage/sdk.js} +191 -301
- package/dist/editorContentPanel/sdk.d.ts +5951 -90
- package/dist/editorContentPanel/sdk.esm.js +206 -30
- package/dist/editorContentPanel/sdk.js +206 -30
- package/dist/editorScriptRunner/sdk.d.ts +5425 -133
- package/dist/editorScriptRunner/sdk.esm.js +204 -30
- package/dist/editorScriptRunner/sdk.js +204 -30
- package/dist/sharedFileBrowser/sdk.d.ts +185 -2609
- package/dist/sharedFileBrowser/sdk.esm.js +192 -16
- package/dist/sharedFileBrowser/sdk.js +192 -16
- package/package.json +8 -7
- package/dist/sdk.d.ts +0 -2756
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
/*! Kittl SDK - https://kittl.com - see license for terms */
|
|
3
3
|
|
|
4
4
|
var FROM_EXTENSION_COMMANDS = {
|
|
5
|
+
/** Capability-owned AI callback registration. */
|
|
6
|
+
AI_GENERATOR_SUBSCRIBE: "ai-generator-subscribe",
|
|
7
|
+
/** Capability-owned AI callback teardown. */
|
|
8
|
+
AI_GENERATOR_UNSUBSCRIBE: "ai-generator-unsubscribe",
|
|
5
9
|
/** SDK API call */
|
|
6
10
|
SDK_CALL: "sdk-call",
|
|
7
11
|
/** AI handler registration */
|
|
@@ -50,6 +54,8 @@ var FROM_EXTENSION_COMMANDS = {
|
|
|
50
54
|
LOADED: "loaded"
|
|
51
55
|
};
|
|
52
56
|
var TO_EXTENSION_COMMANDS = {
|
|
57
|
+
/** Callback payload for generator or pending-set subscriptions. */
|
|
58
|
+
AI_GENERATOR_UPDATE: "ai-generator-update",
|
|
53
59
|
/** SDK API response */
|
|
54
60
|
SDK_RESPONSE: "sdk-response",
|
|
55
61
|
/** File browser fetch content request */
|
|
@@ -66,6 +72,10 @@ var TO_EXTENSION_COMMANDS = {
|
|
|
66
72
|
APP_STATE_UPDATE: "app-state-update"
|
|
67
73
|
};
|
|
68
74
|
|
|
75
|
+
function isAIGeneratorUpdateMessage(data) {
|
|
76
|
+
return !!data && typeof data === "object" && "command" in data && data.command === "ai-generator-update" && "subscriptionId" in data && typeof data.subscriptionId === "string";
|
|
77
|
+
}
|
|
78
|
+
|
|
69
79
|
var isSDKResponseMessage = (data) => {
|
|
70
80
|
return typeof data === "object" && data !== null && "command" in data && data.command === TO_EXTENSION_COMMANDS.SDK_RESPONSE && "messageId" in data && typeof data.messageId === "string";
|
|
71
81
|
};
|
|
@@ -135,7 +145,10 @@ var APPROVED_EXTENSION_COMMUNICATION_DOMAINS = [
|
|
|
135
145
|
"https://app.stagingdesigner.com",
|
|
136
146
|
"https://*.stagingdesigner.com",
|
|
137
147
|
"http://localhost:3000",
|
|
138
|
-
"https://app.kittl.com"
|
|
148
|
+
"https://app.kittl.com",
|
|
149
|
+
// website, for sandboxed standalone dashboard pages
|
|
150
|
+
"http://localhost:3003",
|
|
151
|
+
"https://www.kittl.com"
|
|
139
152
|
];
|
|
140
153
|
var toOrigin = (value) => {
|
|
141
154
|
if (!value) {
|
|
@@ -190,8 +203,15 @@ var getParentDomain = () => {
|
|
|
190
203
|
};
|
|
191
204
|
|
|
192
205
|
var pendingRequests = /* @__PURE__ */ new Map();
|
|
206
|
+
var sdkVersion;
|
|
207
|
+
function setSDKVersion(version2) {
|
|
208
|
+
sdkVersion = version2;
|
|
209
|
+
}
|
|
193
210
|
var postMessageToParent = (message) => {
|
|
194
|
-
window.parent.postMessage(
|
|
211
|
+
window.parent.postMessage(
|
|
212
|
+
sdkVersion === void 0 ? message : { ...message, sdkVersion },
|
|
213
|
+
getParentDomain()
|
|
214
|
+
);
|
|
195
215
|
};
|
|
196
216
|
var sendMessage = (message) => {
|
|
197
217
|
postMessageToParent(message);
|
|
@@ -214,6 +234,27 @@ var sendLoaded = () => {
|
|
|
214
234
|
};
|
|
215
235
|
|
|
216
236
|
var createSDKCallMessage = {
|
|
237
|
+
aiGenerator: (dots, args, messageId) => ({
|
|
238
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
239
|
+
dots,
|
|
240
|
+
args,
|
|
241
|
+
messageId,
|
|
242
|
+
apiType: "aiGenerator"
|
|
243
|
+
}),
|
|
244
|
+
mockup: (dots, args, messageId) => ({
|
|
245
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
246
|
+
dots,
|
|
247
|
+
args,
|
|
248
|
+
messageId,
|
|
249
|
+
apiType: "mockup"
|
|
250
|
+
}),
|
|
251
|
+
fileBrowser: (dots, args, messageId) => ({
|
|
252
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
253
|
+
dots,
|
|
254
|
+
args,
|
|
255
|
+
messageId,
|
|
256
|
+
apiType: "fileBrowser"
|
|
257
|
+
}),
|
|
217
258
|
ai: (dots, args, messageId) => ({
|
|
218
259
|
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
219
260
|
dots,
|
|
@@ -249,6 +290,13 @@ var createSDKCallMessage = {
|
|
|
249
290
|
messageId,
|
|
250
291
|
apiType: "font"
|
|
251
292
|
}),
|
|
293
|
+
project: (dots, args, messageId) => ({
|
|
294
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
295
|
+
dots,
|
|
296
|
+
args,
|
|
297
|
+
messageId,
|
|
298
|
+
apiType: "project"
|
|
299
|
+
}),
|
|
252
300
|
state: (dots, args, messageId) => ({
|
|
253
301
|
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
254
302
|
dots,
|
|
@@ -269,6 +317,27 @@ var createSDKCallMessage = {
|
|
|
269
317
|
args,
|
|
270
318
|
messageId,
|
|
271
319
|
apiType: "data"
|
|
320
|
+
}),
|
|
321
|
+
brandKit: (dots, args, messageId) => ({
|
|
322
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
323
|
+
dots,
|
|
324
|
+
args,
|
|
325
|
+
messageId,
|
|
326
|
+
apiType: "brandKit"
|
|
327
|
+
}),
|
|
328
|
+
openMicroEditor: (dots, args, messageId) => ({
|
|
329
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
330
|
+
dots,
|
|
331
|
+
args,
|
|
332
|
+
messageId,
|
|
333
|
+
apiType: "openMicroEditor"
|
|
334
|
+
}),
|
|
335
|
+
openMainEditor: (dots, args, messageId) => ({
|
|
336
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
337
|
+
dots,
|
|
338
|
+
args,
|
|
339
|
+
messageId,
|
|
340
|
+
apiType: "openMainEditor"
|
|
272
341
|
})
|
|
273
342
|
};
|
|
274
343
|
function createApiProxy(apiType) {
|
|
@@ -285,6 +354,64 @@ function createApiProxy(apiType) {
|
|
|
285
354
|
});
|
|
286
355
|
}
|
|
287
356
|
|
|
357
|
+
function createAIGeneratorBridgeApi() {
|
|
358
|
+
const callbacks = /* @__PURE__ */ new Map();
|
|
359
|
+
const proxy = createApiProxy("aiGenerator");
|
|
360
|
+
async function subscribe(request, callback) {
|
|
361
|
+
const subscriptionId = generateMessageId();
|
|
362
|
+
callbacks.set(subscriptionId, callback);
|
|
363
|
+
let response;
|
|
364
|
+
try {
|
|
365
|
+
response = await sendMessage({
|
|
366
|
+
command: "ai-generator-subscribe",
|
|
367
|
+
...request,
|
|
368
|
+
subscriptionId,
|
|
369
|
+
messageId: generateMessageId()
|
|
370
|
+
});
|
|
371
|
+
} catch (error) {
|
|
372
|
+
callbacks.delete(subscriptionId);
|
|
373
|
+
throw error;
|
|
374
|
+
}
|
|
375
|
+
if (!response.isOk) {
|
|
376
|
+
callbacks.delete(subscriptionId);
|
|
377
|
+
throw new Error(response.error.message);
|
|
378
|
+
}
|
|
379
|
+
return () => {
|
|
380
|
+
callbacks.delete(subscriptionId);
|
|
381
|
+
postMessageToParent({
|
|
382
|
+
command: "ai-generator-unsubscribe",
|
|
383
|
+
subscriptionId
|
|
384
|
+
});
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
const methods = {
|
|
388
|
+
registerGenerator: (id, callback) => subscribe({ method: "registerGenerator", args: [id] }, (update) => {
|
|
389
|
+
if (update) callback(update);
|
|
390
|
+
}),
|
|
391
|
+
subscribeToGenerationUpdates: (ids, callback) => subscribe(
|
|
392
|
+
{ method: "subscribeToGenerationUpdates", args: [ids] },
|
|
393
|
+
(update) => {
|
|
394
|
+
if (update) callback(update);
|
|
395
|
+
}
|
|
396
|
+
),
|
|
397
|
+
subscribeToPendingGenerations: (callback) => subscribe(
|
|
398
|
+
{ method: "subscribeToPendingGenerations", args: [] },
|
|
399
|
+
() => callback()
|
|
400
|
+
),
|
|
401
|
+
/** Callers may reuse richer internal submission objects; never send their local abort callbacks. */
|
|
402
|
+
cancelGenerations: (submission) => proxy.cancelGenerations({
|
|
403
|
+
generationIds: submission.generationIds,
|
|
404
|
+
until: submission.until
|
|
405
|
+
})
|
|
406
|
+
};
|
|
407
|
+
return {
|
|
408
|
+
api: new Proxy(proxy, {
|
|
409
|
+
get: (target, property, receiver) => property in methods ? methods[property] : Reflect.get(target, property, receiver)
|
|
410
|
+
}),
|
|
411
|
+
dispatch: (message) => callbacks.get(message.subscriptionId)?.(message.update)
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
|
|
288
415
|
var generationHandlers = /* @__PURE__ */ new Map();
|
|
289
416
|
var generationSubscriptions = /* @__PURE__ */ new Map();
|
|
290
417
|
var dispatchAIGenerationUpdate = (subscriptionId, update) => {
|
|
@@ -652,7 +779,7 @@ var SandboxedAuthClient = class {
|
|
|
652
779
|
}
|
|
653
780
|
};
|
|
654
781
|
|
|
655
|
-
var
|
|
782
|
+
var createBatchFor = async (apiType) => {
|
|
656
783
|
const response = await sendMessage({
|
|
657
784
|
command: FROM_EXTENSION_COMMANDS.BATCH_CREATE,
|
|
658
785
|
messageId: generateMessageId()
|
|
@@ -661,14 +788,17 @@ var createBatch = async () => {
|
|
|
661
788
|
throw response.error;
|
|
662
789
|
}
|
|
663
790
|
const { batchKey } = response.result;
|
|
664
|
-
const sendDesignCall = (dots, args) =>
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
791
|
+
const sendDesignCall = (dots, args) => {
|
|
792
|
+
const message = {
|
|
793
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
794
|
+
dots: apiType === "project" ? ["design", "api", ...dots] : dots,
|
|
795
|
+
args,
|
|
796
|
+
messageId: generateMessageId(),
|
|
797
|
+
apiType,
|
|
798
|
+
batchKey
|
|
799
|
+
};
|
|
800
|
+
return sendMessage(message);
|
|
801
|
+
};
|
|
672
802
|
const commit = async () => {
|
|
673
803
|
const res = await sendMessage({
|
|
674
804
|
command: FROM_EXTENSION_COMMANDS.BATCH_COMMIT,
|
|
@@ -695,6 +825,8 @@ var createBatch = async () => {
|
|
|
695
825
|
};
|
|
696
826
|
return buildNode([]);
|
|
697
827
|
};
|
|
828
|
+
var createBatch = () => createBatchFor("design");
|
|
829
|
+
var createProjectBatch = () => createBatchFor("project");
|
|
698
830
|
|
|
699
831
|
var createContextBridgeApi = () => {
|
|
700
832
|
const contextProxy = createApiProxy("context");
|
|
@@ -862,6 +994,7 @@ var designStateApi = createDesignStateBridgeApi();
|
|
|
862
994
|
var appStateApi = createAppStateBridgeApi();
|
|
863
995
|
var { api: contextApi, dispatch: dispatchContextUpdate } = createContextBridgeApi();
|
|
864
996
|
var authClient = new SandboxedAuthClient();
|
|
997
|
+
var aiGeneratorBridge = createAIGeneratorBridgeApi();
|
|
865
998
|
var handleIncomingMessage = (event) => {
|
|
866
999
|
const parent = window.parent;
|
|
867
1000
|
if (!parent || parent === window) {
|
|
@@ -884,6 +1017,10 @@ var handleIncomingMessage = (event) => {
|
|
|
884
1017
|
statelessApi.dispatch(data.type, data.payload);
|
|
885
1018
|
return;
|
|
886
1019
|
}
|
|
1020
|
+
if (isAIGeneratorUpdateMessage(data)) {
|
|
1021
|
+
aiGeneratorBridge.dispatch(data);
|
|
1022
|
+
return;
|
|
1023
|
+
}
|
|
887
1024
|
if (isAIGenerationUpdatePushMessage(data)) {
|
|
888
1025
|
dispatchAIGenerationUpdate(data.subscriptionId, data.update);
|
|
889
1026
|
return;
|
|
@@ -908,7 +1045,28 @@ var handleIncomingMessage = (event) => {
|
|
|
908
1045
|
);
|
|
909
1046
|
}
|
|
910
1047
|
};
|
|
1048
|
+
var projectProxy = createApiProxy("project");
|
|
1049
|
+
var projectApi = {
|
|
1050
|
+
design: {
|
|
1051
|
+
state: {
|
|
1052
|
+
getState: projectProxy.design.state.getState,
|
|
1053
|
+
subscribe: designStateApi.subscribe
|
|
1054
|
+
},
|
|
1055
|
+
api: projectProxy.design.api,
|
|
1056
|
+
createBatch: createProjectBatch
|
|
1057
|
+
},
|
|
1058
|
+
app: {
|
|
1059
|
+
state: {
|
|
1060
|
+
getState: projectProxy.app.state.getState,
|
|
1061
|
+
subscribe: appStateApi.subscribe
|
|
1062
|
+
},
|
|
1063
|
+
api: projectProxy.app.api
|
|
1064
|
+
}
|
|
1065
|
+
};
|
|
911
1066
|
var bridgeHandlers = {
|
|
1067
|
+
aiGenerator: aiGeneratorBridge.api,
|
|
1068
|
+
brandKit: createApiProxy("brandKit"),
|
|
1069
|
+
mockup: createApiProxy("mockup"),
|
|
912
1070
|
ai: createAIApiProxy(),
|
|
913
1071
|
context: contextApi,
|
|
914
1072
|
data: createApiProxy("data"),
|
|
@@ -917,12 +1075,17 @@ var bridgeHandlers = {
|
|
|
917
1075
|
appStore: appStateApi,
|
|
918
1076
|
export: createApiProxy("export"),
|
|
919
1077
|
font: createApiProxy("font"),
|
|
1078
|
+
project: projectApi,
|
|
920
1079
|
state: createApiProxy("state"),
|
|
921
1080
|
upload: createApiProxy("upload"),
|
|
922
|
-
fileBrowser:
|
|
1081
|
+
fileBrowser: { getFiles: createApiProxy("fileBrowser").getFiles },
|
|
1082
|
+
fileBrowserRegistration: createFileBrowserApiProxy(),
|
|
1083
|
+
openMicroEditor: createApiProxy("openMicroEditor"),
|
|
1084
|
+
openMainEditor: createApiProxy("openMainEditor"),
|
|
923
1085
|
auth: authClient,
|
|
924
1086
|
stateless: statelessApi,
|
|
925
|
-
createBatch
|
|
1087
|
+
createBatch,
|
|
1088
|
+
createProjectBatch
|
|
926
1089
|
};
|
|
927
1090
|
|
|
928
1091
|
// src/api/utils.ts
|
|
@@ -933,6 +1096,9 @@ function unwrapResult(result) {
|
|
|
933
1096
|
throw result.error;
|
|
934
1097
|
}
|
|
935
1098
|
|
|
1099
|
+
// package.json
|
|
1100
|
+
var version = "1.0.0";
|
|
1101
|
+
|
|
936
1102
|
// src/utils/syncHtmlDataThemeFromHostContext.ts
|
|
937
1103
|
async function syncHtmlDataThemeFromHostContext(kittl2) {
|
|
938
1104
|
if (typeof document === "undefined") {
|
|
@@ -973,12 +1139,17 @@ function createKittlSDK(apis) {
|
|
|
973
1139
|
handleIncomingMessage(event);
|
|
974
1140
|
}
|
|
975
1141
|
);
|
|
976
|
-
|
|
1142
|
+
const { context } = apis;
|
|
1143
|
+
const themeSynced = context?.get && context.subscribe ? syncHtmlDataThemeFromHostContext({
|
|
1144
|
+
context
|
|
1145
|
+
}) : Promise.resolve();
|
|
1146
|
+
void themeSynced.catch(() => void 0).then(() => {
|
|
977
1147
|
kittl2.onLoadedCallback?.();
|
|
978
1148
|
sendLoaded();
|
|
979
1149
|
});
|
|
980
1150
|
};
|
|
981
1151
|
if (typeof document !== "undefined" && typeof window !== "undefined") {
|
|
1152
|
+
setSDKVersion(version);
|
|
982
1153
|
window.kittl = kittl2;
|
|
983
1154
|
if (document.readyState === "loading") {
|
|
984
1155
|
document.addEventListener("DOMContentLoaded", initSdk);
|
|
@@ -992,8 +1163,13 @@ function createKittlSDK(apis) {
|
|
|
992
1163
|
// src/sharedFileBrowser.ts
|
|
993
1164
|
var kittl = createKittlSDK({
|
|
994
1165
|
auth: bridgeHandlers.auth,
|
|
995
|
-
context:
|
|
996
|
-
|
|
1166
|
+
// context only carries tab registration here: the file browser is hidden, so
|
|
1167
|
+
// it has no theme to follow and nothing to drag
|
|
1168
|
+
context: {
|
|
1169
|
+
registerUploadBrowser: bridgeHandlers.fileBrowserRegistration.registerUploadBrowser
|
|
1170
|
+
},
|
|
1171
|
+
// Both locations share callback tracking so existing file-browser extensions work unchanged.
|
|
1172
|
+
fileBrowser: bridgeHandlers.fileBrowserRegistration
|
|
997
1173
|
});
|
|
998
1174
|
export {
|
|
999
1175
|
kittl,
|
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
(() => {
|
|
6
6
|
|
|
7
7
|
var FROM_EXTENSION_COMMANDS = {
|
|
8
|
+
/** Capability-owned AI callback registration. */
|
|
9
|
+
AI_GENERATOR_SUBSCRIBE: "ai-generator-subscribe",
|
|
10
|
+
/** Capability-owned AI callback teardown. */
|
|
11
|
+
AI_GENERATOR_UNSUBSCRIBE: "ai-generator-unsubscribe",
|
|
8
12
|
/** SDK API call */
|
|
9
13
|
SDK_CALL: "sdk-call",
|
|
10
14
|
/** AI handler registration */
|
|
@@ -53,6 +57,8 @@
|
|
|
53
57
|
LOADED: "loaded"
|
|
54
58
|
};
|
|
55
59
|
var TO_EXTENSION_COMMANDS = {
|
|
60
|
+
/** Callback payload for generator or pending-set subscriptions. */
|
|
61
|
+
AI_GENERATOR_UPDATE: "ai-generator-update",
|
|
56
62
|
/** SDK API response */
|
|
57
63
|
SDK_RESPONSE: "sdk-response",
|
|
58
64
|
/** File browser fetch content request */
|
|
@@ -69,6 +75,10 @@
|
|
|
69
75
|
APP_STATE_UPDATE: "app-state-update"
|
|
70
76
|
};
|
|
71
77
|
|
|
78
|
+
function isAIGeneratorUpdateMessage(data) {
|
|
79
|
+
return !!data && typeof data === "object" && "command" in data && data.command === "ai-generator-update" && "subscriptionId" in data && typeof data.subscriptionId === "string";
|
|
80
|
+
}
|
|
81
|
+
|
|
72
82
|
var isSDKResponseMessage = (data) => {
|
|
73
83
|
return typeof data === "object" && data !== null && "command" in data && data.command === TO_EXTENSION_COMMANDS.SDK_RESPONSE && "messageId" in data && typeof data.messageId === "string";
|
|
74
84
|
};
|
|
@@ -138,7 +148,10 @@
|
|
|
138
148
|
"https://app.stagingdesigner.com",
|
|
139
149
|
"https://*.stagingdesigner.com",
|
|
140
150
|
"http://localhost:3000",
|
|
141
|
-
"https://app.kittl.com"
|
|
151
|
+
"https://app.kittl.com",
|
|
152
|
+
// website, for sandboxed standalone dashboard pages
|
|
153
|
+
"http://localhost:3003",
|
|
154
|
+
"https://www.kittl.com"
|
|
142
155
|
];
|
|
143
156
|
var toOrigin = (value) => {
|
|
144
157
|
if (!value) {
|
|
@@ -193,8 +206,15 @@
|
|
|
193
206
|
};
|
|
194
207
|
|
|
195
208
|
var pendingRequests = /* @__PURE__ */ new Map();
|
|
209
|
+
var sdkVersion;
|
|
210
|
+
function setSDKVersion(version2) {
|
|
211
|
+
sdkVersion = version2;
|
|
212
|
+
}
|
|
196
213
|
var postMessageToParent = (message) => {
|
|
197
|
-
window.parent.postMessage(
|
|
214
|
+
window.parent.postMessage(
|
|
215
|
+
sdkVersion === void 0 ? message : { ...message, sdkVersion },
|
|
216
|
+
getParentDomain()
|
|
217
|
+
);
|
|
198
218
|
};
|
|
199
219
|
var sendMessage = (message) => {
|
|
200
220
|
postMessageToParent(message);
|
|
@@ -217,6 +237,27 @@
|
|
|
217
237
|
};
|
|
218
238
|
|
|
219
239
|
var createSDKCallMessage = {
|
|
240
|
+
aiGenerator: (dots, args, messageId) => ({
|
|
241
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
242
|
+
dots,
|
|
243
|
+
args,
|
|
244
|
+
messageId,
|
|
245
|
+
apiType: "aiGenerator"
|
|
246
|
+
}),
|
|
247
|
+
mockup: (dots, args, messageId) => ({
|
|
248
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
249
|
+
dots,
|
|
250
|
+
args,
|
|
251
|
+
messageId,
|
|
252
|
+
apiType: "mockup"
|
|
253
|
+
}),
|
|
254
|
+
fileBrowser: (dots, args, messageId) => ({
|
|
255
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
256
|
+
dots,
|
|
257
|
+
args,
|
|
258
|
+
messageId,
|
|
259
|
+
apiType: "fileBrowser"
|
|
260
|
+
}),
|
|
220
261
|
ai: (dots, args, messageId) => ({
|
|
221
262
|
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
222
263
|
dots,
|
|
@@ -252,6 +293,13 @@
|
|
|
252
293
|
messageId,
|
|
253
294
|
apiType: "font"
|
|
254
295
|
}),
|
|
296
|
+
project: (dots, args, messageId) => ({
|
|
297
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
298
|
+
dots,
|
|
299
|
+
args,
|
|
300
|
+
messageId,
|
|
301
|
+
apiType: "project"
|
|
302
|
+
}),
|
|
255
303
|
state: (dots, args, messageId) => ({
|
|
256
304
|
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
257
305
|
dots,
|
|
@@ -272,6 +320,27 @@
|
|
|
272
320
|
args,
|
|
273
321
|
messageId,
|
|
274
322
|
apiType: "data"
|
|
323
|
+
}),
|
|
324
|
+
brandKit: (dots, args, messageId) => ({
|
|
325
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
326
|
+
dots,
|
|
327
|
+
args,
|
|
328
|
+
messageId,
|
|
329
|
+
apiType: "brandKit"
|
|
330
|
+
}),
|
|
331
|
+
openMicroEditor: (dots, args, messageId) => ({
|
|
332
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
333
|
+
dots,
|
|
334
|
+
args,
|
|
335
|
+
messageId,
|
|
336
|
+
apiType: "openMicroEditor"
|
|
337
|
+
}),
|
|
338
|
+
openMainEditor: (dots, args, messageId) => ({
|
|
339
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
340
|
+
dots,
|
|
341
|
+
args,
|
|
342
|
+
messageId,
|
|
343
|
+
apiType: "openMainEditor"
|
|
275
344
|
})
|
|
276
345
|
};
|
|
277
346
|
function createApiProxy(apiType) {
|
|
@@ -288,6 +357,64 @@
|
|
|
288
357
|
});
|
|
289
358
|
}
|
|
290
359
|
|
|
360
|
+
function createAIGeneratorBridgeApi() {
|
|
361
|
+
const callbacks = /* @__PURE__ */ new Map();
|
|
362
|
+
const proxy = createApiProxy("aiGenerator");
|
|
363
|
+
async function subscribe(request, callback) {
|
|
364
|
+
const subscriptionId = generateMessageId();
|
|
365
|
+
callbacks.set(subscriptionId, callback);
|
|
366
|
+
let response;
|
|
367
|
+
try {
|
|
368
|
+
response = await sendMessage({
|
|
369
|
+
command: "ai-generator-subscribe",
|
|
370
|
+
...request,
|
|
371
|
+
subscriptionId,
|
|
372
|
+
messageId: generateMessageId()
|
|
373
|
+
});
|
|
374
|
+
} catch (error) {
|
|
375
|
+
callbacks.delete(subscriptionId);
|
|
376
|
+
throw error;
|
|
377
|
+
}
|
|
378
|
+
if (!response.isOk) {
|
|
379
|
+
callbacks.delete(subscriptionId);
|
|
380
|
+
throw new Error(response.error.message);
|
|
381
|
+
}
|
|
382
|
+
return () => {
|
|
383
|
+
callbacks.delete(subscriptionId);
|
|
384
|
+
postMessageToParent({
|
|
385
|
+
command: "ai-generator-unsubscribe",
|
|
386
|
+
subscriptionId
|
|
387
|
+
});
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
const methods = {
|
|
391
|
+
registerGenerator: (id, callback) => subscribe({ method: "registerGenerator", args: [id] }, (update) => {
|
|
392
|
+
if (update) callback(update);
|
|
393
|
+
}),
|
|
394
|
+
subscribeToGenerationUpdates: (ids, callback) => subscribe(
|
|
395
|
+
{ method: "subscribeToGenerationUpdates", args: [ids] },
|
|
396
|
+
(update) => {
|
|
397
|
+
if (update) callback(update);
|
|
398
|
+
}
|
|
399
|
+
),
|
|
400
|
+
subscribeToPendingGenerations: (callback) => subscribe(
|
|
401
|
+
{ method: "subscribeToPendingGenerations", args: [] },
|
|
402
|
+
() => callback()
|
|
403
|
+
),
|
|
404
|
+
/** Callers may reuse richer internal submission objects; never send their local abort callbacks. */
|
|
405
|
+
cancelGenerations: (submission) => proxy.cancelGenerations({
|
|
406
|
+
generationIds: submission.generationIds,
|
|
407
|
+
until: submission.until
|
|
408
|
+
})
|
|
409
|
+
};
|
|
410
|
+
return {
|
|
411
|
+
api: new Proxy(proxy, {
|
|
412
|
+
get: (target, property, receiver) => property in methods ? methods[property] : Reflect.get(target, property, receiver)
|
|
413
|
+
}),
|
|
414
|
+
dispatch: (message) => callbacks.get(message.subscriptionId)?.(message.update)
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
|
|
291
418
|
var generationHandlers = /* @__PURE__ */ new Map();
|
|
292
419
|
var generationSubscriptions = /* @__PURE__ */ new Map();
|
|
293
420
|
var dispatchAIGenerationUpdate = (subscriptionId, update) => {
|
|
@@ -655,7 +782,7 @@
|
|
|
655
782
|
}
|
|
656
783
|
};
|
|
657
784
|
|
|
658
|
-
var
|
|
785
|
+
var createBatchFor = async (apiType) => {
|
|
659
786
|
const response = await sendMessage({
|
|
660
787
|
command: FROM_EXTENSION_COMMANDS.BATCH_CREATE,
|
|
661
788
|
messageId: generateMessageId()
|
|
@@ -664,14 +791,17 @@
|
|
|
664
791
|
throw response.error;
|
|
665
792
|
}
|
|
666
793
|
const { batchKey } = response.result;
|
|
667
|
-
const sendDesignCall = (dots, args) =>
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
794
|
+
const sendDesignCall = (dots, args) => {
|
|
795
|
+
const message = {
|
|
796
|
+
command: FROM_EXTENSION_COMMANDS.SDK_CALL,
|
|
797
|
+
dots: apiType === "project" ? ["design", "api", ...dots] : dots,
|
|
798
|
+
args,
|
|
799
|
+
messageId: generateMessageId(),
|
|
800
|
+
apiType,
|
|
801
|
+
batchKey
|
|
802
|
+
};
|
|
803
|
+
return sendMessage(message);
|
|
804
|
+
};
|
|
675
805
|
const commit = async () => {
|
|
676
806
|
const res = await sendMessage({
|
|
677
807
|
command: FROM_EXTENSION_COMMANDS.BATCH_COMMIT,
|
|
@@ -698,6 +828,8 @@
|
|
|
698
828
|
};
|
|
699
829
|
return buildNode([]);
|
|
700
830
|
};
|
|
831
|
+
var createBatch = () => createBatchFor("design");
|
|
832
|
+
var createProjectBatch = () => createBatchFor("project");
|
|
701
833
|
|
|
702
834
|
var createContextBridgeApi = () => {
|
|
703
835
|
const contextProxy = createApiProxy("context");
|
|
@@ -865,6 +997,7 @@
|
|
|
865
997
|
var appStateApi = createAppStateBridgeApi();
|
|
866
998
|
var { api: contextApi, dispatch: dispatchContextUpdate } = createContextBridgeApi();
|
|
867
999
|
var authClient = new SandboxedAuthClient();
|
|
1000
|
+
var aiGeneratorBridge = createAIGeneratorBridgeApi();
|
|
868
1001
|
var handleIncomingMessage = (event) => {
|
|
869
1002
|
const parent = window.parent;
|
|
870
1003
|
if (!parent || parent === window) {
|
|
@@ -887,6 +1020,10 @@
|
|
|
887
1020
|
statelessApi.dispatch(data.type, data.payload);
|
|
888
1021
|
return;
|
|
889
1022
|
}
|
|
1023
|
+
if (isAIGeneratorUpdateMessage(data)) {
|
|
1024
|
+
aiGeneratorBridge.dispatch(data);
|
|
1025
|
+
return;
|
|
1026
|
+
}
|
|
890
1027
|
if (isAIGenerationUpdatePushMessage(data)) {
|
|
891
1028
|
dispatchAIGenerationUpdate(data.subscriptionId, data.update);
|
|
892
1029
|
return;
|
|
@@ -911,7 +1048,28 @@
|
|
|
911
1048
|
);
|
|
912
1049
|
}
|
|
913
1050
|
};
|
|
1051
|
+
var projectProxy = createApiProxy("project");
|
|
1052
|
+
var projectApi = {
|
|
1053
|
+
design: {
|
|
1054
|
+
state: {
|
|
1055
|
+
getState: projectProxy.design.state.getState,
|
|
1056
|
+
subscribe: designStateApi.subscribe
|
|
1057
|
+
},
|
|
1058
|
+
api: projectProxy.design.api,
|
|
1059
|
+
createBatch: createProjectBatch
|
|
1060
|
+
},
|
|
1061
|
+
app: {
|
|
1062
|
+
state: {
|
|
1063
|
+
getState: projectProxy.app.state.getState,
|
|
1064
|
+
subscribe: appStateApi.subscribe
|
|
1065
|
+
},
|
|
1066
|
+
api: projectProxy.app.api
|
|
1067
|
+
}
|
|
1068
|
+
};
|
|
914
1069
|
var bridgeHandlers = {
|
|
1070
|
+
aiGenerator: aiGeneratorBridge.api,
|
|
1071
|
+
brandKit: createApiProxy("brandKit"),
|
|
1072
|
+
mockup: createApiProxy("mockup"),
|
|
915
1073
|
ai: createAIApiProxy(),
|
|
916
1074
|
context: contextApi,
|
|
917
1075
|
data: createApiProxy("data"),
|
|
@@ -920,12 +1078,17 @@
|
|
|
920
1078
|
appStore: appStateApi,
|
|
921
1079
|
export: createApiProxy("export"),
|
|
922
1080
|
font: createApiProxy("font"),
|
|
1081
|
+
project: projectApi,
|
|
923
1082
|
state: createApiProxy("state"),
|
|
924
1083
|
upload: createApiProxy("upload"),
|
|
925
|
-
fileBrowser:
|
|
1084
|
+
fileBrowser: { getFiles: createApiProxy("fileBrowser").getFiles },
|
|
1085
|
+
fileBrowserRegistration: createFileBrowserApiProxy(),
|
|
1086
|
+
openMicroEditor: createApiProxy("openMicroEditor"),
|
|
1087
|
+
openMainEditor: createApiProxy("openMainEditor"),
|
|
926
1088
|
auth: authClient,
|
|
927
1089
|
stateless: statelessApi,
|
|
928
|
-
createBatch
|
|
1090
|
+
createBatch,
|
|
1091
|
+
createProjectBatch
|
|
929
1092
|
};
|
|
930
1093
|
|
|
931
1094
|
// src/api/utils.ts
|
|
@@ -936,6 +1099,9 @@
|
|
|
936
1099
|
throw result.error;
|
|
937
1100
|
}
|
|
938
1101
|
|
|
1102
|
+
// package.json
|
|
1103
|
+
var version = "1.0.0";
|
|
1104
|
+
|
|
939
1105
|
// src/utils/syncHtmlDataThemeFromHostContext.ts
|
|
940
1106
|
async function syncHtmlDataThemeFromHostContext(kittl2) {
|
|
941
1107
|
if (typeof document === "undefined") {
|
|
@@ -976,12 +1142,17 @@
|
|
|
976
1142
|
handleIncomingMessage(event);
|
|
977
1143
|
}
|
|
978
1144
|
);
|
|
979
|
-
|
|
1145
|
+
const { context } = apis;
|
|
1146
|
+
const themeSynced = context?.get && context.subscribe ? syncHtmlDataThemeFromHostContext({
|
|
1147
|
+
context
|
|
1148
|
+
}) : Promise.resolve();
|
|
1149
|
+
void themeSynced.catch(() => void 0).then(() => {
|
|
980
1150
|
kittl2.onLoadedCallback?.();
|
|
981
1151
|
sendLoaded();
|
|
982
1152
|
});
|
|
983
1153
|
};
|
|
984
1154
|
if (typeof document !== "undefined" && typeof window !== "undefined") {
|
|
1155
|
+
setSDKVersion(version);
|
|
985
1156
|
window.kittl = kittl2;
|
|
986
1157
|
if (document.readyState === "loading") {
|
|
987
1158
|
document.addEventListener("DOMContentLoaded", initSdk);
|
|
@@ -995,7 +1166,12 @@
|
|
|
995
1166
|
// src/sharedFileBrowser.ts
|
|
996
1167
|
var kittl = createKittlSDK({
|
|
997
1168
|
auth: bridgeHandlers.auth,
|
|
998
|
-
context:
|
|
999
|
-
|
|
1169
|
+
// context only carries tab registration here: the file browser is hidden, so
|
|
1170
|
+
// it has no theme to follow and nothing to drag
|
|
1171
|
+
context: {
|
|
1172
|
+
registerUploadBrowser: bridgeHandlers.fileBrowserRegistration.registerUploadBrowser
|
|
1173
|
+
},
|
|
1174
|
+
// Both locations share callback tracking so existing file-browser extensions work unchanged.
|
|
1175
|
+
fileBrowser: bridgeHandlers.fileBrowserRegistration
|
|
1000
1176
|
});
|
|
1001
1177
|
})();
|