@ourlu/assistant-sdk 0.2.4 → 0.2.5
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/iife/audio.v1.028c93fe.js +160 -0
- package/dist/iife/audio.v1.051ececf.js +183 -0
- package/dist/iife/audio.v1.200db1a6.js +208 -0
- package/dist/iife/audio.v1.20858b08.js +191 -0
- package/dist/iife/audio.v1.2690e445.js +179 -0
- package/dist/iife/audio.v1.2742ff12.js +188 -0
- package/dist/iife/audio.v1.70af81b3.js +191 -0
- package/dist/iife/audio.v1.95146620.js +1 -1
- package/dist/iife/audio.v1.b330baaf.js +166 -0
- package/dist/iife/audio.v1.bb9c2d88.js +181 -0
- package/dist/iife/audio.v1.ea7571b2.js +182 -0
- package/dist/iife/audio.v1.fc0aa8af.js +191 -0
- package/dist/iife/audio.v1.js +107 -95
- package/dist/iife/engine.v1.2b5bb43b.js +3 -3
- package/dist/iife/engine.v1.3b09dc20.js +3 -3
- package/dist/iife/engine.v1.56074e5a.js +769 -0
- package/dist/iife/engine.v1.61c10e6c.js +770 -0
- package/dist/iife/engine.v1.773fc15d.js +2 -2
- package/dist/iife/engine.v1.80d2230f.js +3 -3
- package/dist/iife/engine.v1.940ba9ea.js +764 -0
- package/dist/iife/engine.v1.99a33ee2.js +767 -0
- package/dist/iife/engine.v1.9ca6b7ec.js +3 -3
- package/dist/iife/engine.v1.a1f7dea2.js +764 -0
- package/dist/iife/engine.v1.c0c00bd0.js +3 -3
- package/dist/iife/engine.v1.c127656e.js +820 -0
- package/dist/iife/engine.v1.c54c9a1a.js +3 -3
- package/dist/iife/engine.v1.d1052e81.js +3 -3
- package/dist/iife/engine.v1.f6d23a0f.js +770 -0
- package/dist/iife/engine.v1.js +75 -25
- package/dist/iife/loader.v1.js +5 -1
- package/dist/iife/signalement.v1.d321dfde.js +518 -0
- package/dist/iife/signalement.v1.js +518 -0
- package/dist/iife/ui.v1.00abf020.js +895 -0
- package/dist/iife/ui.v1.6becaa84.js +895 -0
- package/dist/iife/ui.v1.6c9e4995.js +895 -0
- package/dist/iife/ui.v1.88bf5494.js +898 -0
- package/dist/iife/ui.v1.a8cfe724.js +900 -0
- package/dist/iife/ui.v1.e007c7c4.js +926 -0
- package/dist/iife/ui.v1.e24ba2bd.js +903 -0
- package/dist/iife/ui.v1.f1d8e998.js +903 -0
- package/dist/iife/ui.v1.fc52b520.js +895 -0
- package/dist/iife/ui.v1.js +44 -77
- package/dist/iife/widget-manifest.json +4 -3
- package/package.json +2 -1
package/dist/iife/engine.v1.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
var WidgetUIManager = runtime.WidgetUIManager, WidgetAudioManager = runtime.WidgetAudioManager;
|
|
11
11
|
var EventBus = runtime.EventBus, CONTAINER_ID = runtime.constants.CONTAINER_ID;
|
|
12
12
|
var MASCOT_SPECS = JSON.parse('[["mascotSecondaryColor","mascot_secondary_color","data-mascot-secondary-color","#68b1d6"],["mascotSecondaryDarkColor","mascot_secondary_dark_color","data-mascot-secondary-dark-color","#1472a8"],["mascotGoldColor","mascot_gold_color","data-mascot-gold-color","#ffd22e"],["mascotEyeColor","mascot_eye_color","data-mascot-eye-color","#040402"],["mascotBeakColor","mascot_beak_color","data-mascot-beak-color","#ab5f30"],["mascotClawColor","mascot_claw_color","data-mascot-claw-color","#ab5f30"],["mascotNeutralColor","mascot_neutral_color","data-mascot-neutral-color","#e6e6e6"],["mascotBrowColor","mascot_brow_color","data-mascot-brow-color","#3e3e3e"]]');
|
|
13
|
-
var CONFIG_STRING_ATTRS = JSON.parse('[["tenantId","data-tenant-id",""],["widgetKey","data-widget-key",""],["apiBaseUrl","data-api-base-url",""],["widgetOrigin","data-widget-origin",""],["bootstrapEndpoint","data-bootstrap-endpoint",""],["configEndpoint","data-config-endpoint",""],["sessionBootstrapToken","data-session-bootstrap-token",""],["sessionBootstrapTokenExpiresAt","data-session-bootstrap-token-expires-at",""],["chatSessionEndpoint","data-chat-session-endpoint","/v1/occe/chat/sessions"],["chatMessageTemplate","data-chat-message-template","/v1/occe/chat/sessions/{session_id}/messages"],["chatStreamTemplate","data-chat-stream-template","/v1/occe/chat/sessions/{session_id}/stream"],["chatAudioSessionTemplate","data-chat-audio-session-template","/v1/occe/chat/sessions/{session_id}/audio/session"],["chatAudioChunkTemplate","data-chat-audio-chunk-template","/v1/occe/chat/sessions/{session_id}/audio/chunk"],["chatAudioCloseTemplate","data-chat-audio-close-template","/v1/occe/chat/sessions/{session_id}/audio/close"],["chatAudioStreamTemplate","data-chat-audio-stream-template","/v1/occe/chat/sessions/{session_id}/audio/stream"],["panelWidth","data-panel-width","420"],["panelHeight","data-panel-height","640"],["panelMaxHeightVh","data-panel-max-height-vh","85"],["mascotUrl","data-mascot-url",""],["welcomeMessage","data-welcome-message","Bonjour ! Comment puis-je vous aider ?"],["disclaimerText","data-disclaimer-text","
|
|
13
|
+
var CONFIG_STRING_ATTRS = JSON.parse('[["tenantId","data-tenant-id",""],["widgetKey","data-widget-key",""],["apiBaseUrl","data-api-base-url",""],["widgetOrigin","data-widget-origin",""],["bootstrapEndpoint","data-bootstrap-endpoint",""],["configEndpoint","data-config-endpoint",""],["sessionBootstrapToken","data-session-bootstrap-token",""],["sessionBootstrapTokenExpiresAt","data-session-bootstrap-token-expires-at",""],["chatSessionEndpoint","data-chat-session-endpoint","/v1/occe/chat/sessions"],["chatMessageTemplate","data-chat-message-template","/v1/occe/chat/sessions/{session_id}/messages"],["chatStreamTemplate","data-chat-stream-template","/v1/occe/chat/sessions/{session_id}/stream"],["chatAudioSessionTemplate","data-chat-audio-session-template","/v1/occe/chat/sessions/{session_id}/audio/session"],["chatAudioChunkTemplate","data-chat-audio-chunk-template","/v1/occe/chat/sessions/{session_id}/audio/chunk"],["chatAudioCloseTemplate","data-chat-audio-close-template","/v1/occe/chat/sessions/{session_id}/audio/close"],["chatAudioStreamTemplate","data-chat-audio-stream-template","/v1/occe/chat/sessions/{session_id}/audio/stream"],["panelWidth","data-panel-width","420"],["panelHeight","data-panel-height","640"],["panelMaxHeightVh","data-panel-max-height-vh","85"],["mascotUrl","data-mascot-url",""],["welcomeMessage","data-welcome-message","Bonjour ! Comment puis-je vous aider ?"],["disclaimerText","data-disclaimer-text","Les r\u00e9ponses g\u00e9n\u00e9r\u00e9es par IA ne constituent pas une d\u00e9cision administrative officielle."],["transparencyText","data-transparency-text","Propuls\u00e9 par Ourlu \u00b7 IA locale et transparente."]]');
|
|
14
14
|
var RUNTIME_ENDPOINT_SPECS = JSON.parse('[["chatSessionEndpoint","chat_session_endpoint","/v1/occe/chat/sessions"],["chatMessageTemplate","chat_message_template","/v1/occe/chat/sessions/{session_id}/messages"],["chatStreamTemplate","chat_stream_template","/v1/occe/chat/sessions/{session_id}/stream"],["chatAudioSessionTemplate","chat_audio_session_template","/v1/occe/chat/sessions/{session_id}/audio/session"],["chatAudioChunkTemplate","chat_audio_chunk_template","/v1/occe/chat/sessions/{session_id}/audio/chunk"],["chatAudioCloseTemplate","chat_audio_close_template","/v1/occe/chat/sessions/{session_id}/audio/close"],["chatAudioStreamTemplate","chat_audio_stream_template","/v1/occe/chat/sessions/{session_id}/audio/stream"]]');
|
|
15
15
|
function applyMascotLabelColors(config, labels) {
|
|
16
16
|
MASCOT_SPECS.forEach(function(spec) {
|
|
@@ -147,9 +147,9 @@ function applyWidgetTextConfig(config, widgetConfig) {
|
|
|
147
147
|
}
|
|
148
148
|
var TURNSTILE_SCRIPT_URL = "https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit";
|
|
149
149
|
var TURNSTILE_CONTAINER_ID = "__ourlu_turnstile_container";
|
|
150
|
-
var TURNSTILE_LOAD_TIMEOUT_MS =
|
|
151
|
-
var TURNSTILE_CHALLENGE_TIMEOUT_MS =
|
|
152
|
-
var TURNSTILE_TOKEN_TTL_MS =
|
|
150
|
+
var TURNSTILE_LOAD_TIMEOUT_MS = 15000;
|
|
151
|
+
var TURNSTILE_CHALLENGE_TIMEOUT_MS = 120000;
|
|
152
|
+
var TURNSTILE_TOKEN_TTL_MS = 280000;
|
|
153
153
|
function TurnstileChallengeManager(siteKey) {
|
|
154
154
|
this.siteKey = String(siteKey || "").trim();
|
|
155
155
|
this.scriptLoaded = false;
|
|
@@ -159,7 +159,7 @@ function TurnstileChallengeManager(siteKey) {
|
|
|
159
159
|
this.cachedTokenTimestamp = 0;
|
|
160
160
|
}
|
|
161
161
|
Object.assign(TurnstileChallengeManager.prototype, {
|
|
162
|
-
isEnabled: function() { return
|
|
162
|
+
isEnabled: function() { return false; /* TURNSTILE_DISABLED_FOR_DEV */ },
|
|
163
163
|
loadScript: function() {
|
|
164
164
|
if (this.scriptLoaded) return Promise.resolve();
|
|
165
165
|
if (this.scriptLoadPromise) return this.scriptLoadPromise;
|
|
@@ -228,6 +228,7 @@ Object.assign(TurnstileChallengeManager.prototype, {
|
|
|
228
228
|
return Boolean(this.cachedToken) && (Date.now() - this.cachedTokenTimestamp) < TURNSTILE_TOKEN_TTL_MS;
|
|
229
229
|
},
|
|
230
230
|
execute: async function() {
|
|
231
|
+
return ""; /* TURNSTILE_DISABLED_FOR_DEV */
|
|
231
232
|
if (!this.isEnabled()) return "";
|
|
232
233
|
if (this.isCachedTokenValid()) return this.cachedToken;
|
|
233
234
|
await this.loadScript();
|
|
@@ -314,11 +315,7 @@ Object.assign(WidgetApiManager.prototype, {
|
|
|
314
315
|
applyRuntimeConfig: function(payload, sourceLabel) {
|
|
315
316
|
var runtimeConfig = payload && payload.runtime_config ? payload.runtime_config : {};
|
|
316
317
|
assignRuntimeEndpoints(this.config, runtimeConfig);
|
|
317
|
-
|
|
318
|
-
if (incomingTurnstileKey && !this.config.turnstileSiteKey) {
|
|
319
|
-
this.config.turnstileSiteKey = incomingTurnstileKey;
|
|
320
|
-
if (!this.turnstile) this.turnstile = new TurnstileChallengeManager(incomingTurnstileKey);
|
|
321
|
-
}
|
|
318
|
+
/* TURNSTILE_DISABLED_FOR_DEV — skip dynamic Turnstile instantiation */
|
|
322
319
|
var widgetConfig = payload && payload.widget_config ? payload.widget_config : null;
|
|
323
320
|
if (!widgetConfig) return;
|
|
324
321
|
var currentThemeVersion = normalizeThemeVersion(this.config.themeVersion);
|
|
@@ -463,7 +460,7 @@ Object.assign(WidgetApiManager.prototype, {
|
|
|
463
460
|
});
|
|
464
461
|
var payload = await response.json();
|
|
465
462
|
var sessionId = payload.session_id || payload.id || "";
|
|
466
|
-
if (!sessionId) throw new Error("
|
|
463
|
+
if (!sessionId) throw new Error("Identifiant de session introuvable.");
|
|
467
464
|
self.state.sessionId = sessionId;
|
|
468
465
|
self.state.sessionPromise = null;
|
|
469
466
|
self.events.emit("ready", payload || {});
|
|
@@ -542,6 +539,7 @@ Object.assign(WidgetApiManager.prototype, {
|
|
|
542
539
|
if (eventName === "final" && callbacks.onFinal) callbacks.onFinal(payload);
|
|
543
540
|
if (eventName === "done" && callbacks.onDone) callbacks.onDone(payload);
|
|
544
541
|
if (eventName === "error" && callbacks.onError) callbacks.onError(payload.message || "Erreur de streaming");
|
|
542
|
+
if (eventName === "module_signalement" && callbacks.onModuleSignalement) callbacks.onModuleSignalement(payload);
|
|
545
543
|
if (eventName === "transcription_draft_delta" && callbacks.onDelta) callbacks.onDelta(payload);
|
|
546
544
|
if (eventName === "transcription_draft_complete" && callbacks.onComplete) callbacks.onComplete(payload);
|
|
547
545
|
if (eventName === "transcription_draft_error" && callbacks.onError) callbacks.onError(payload);
|
|
@@ -573,24 +571,22 @@ Object.assign(WidgetApiManager.prototype, {
|
|
|
573
571
|
if (requestOptions) Object.assign(options, requestOptions);
|
|
574
572
|
return options;
|
|
575
573
|
}, sessionId);
|
|
576
|
-
if (!response.body) throw new Error("
|
|
574
|
+
if (!response.body) throw new Error("Le flux de réponse est indisponible.");
|
|
577
575
|
return this.consumeSSE(response.body.getReader(), callbacks, allowedEvents);
|
|
578
576
|
},
|
|
579
577
|
streamSession: async function(sessionId, callbacks) {
|
|
580
|
-
return this.openEventStream("stream_session", this.config.chatStreamTemplate, sessionId, callbacks, ["token", "final", "error", "done"]);
|
|
578
|
+
return this.openEventStream("stream_session", this.config.chatStreamTemplate, sessionId, callbacks, ["token", "final", "error", "done", "module_signalement"]);
|
|
581
579
|
},
|
|
582
580
|
streamAudioDraft: async function(sessionId, callbacks) {
|
|
583
581
|
var self = this;
|
|
584
582
|
var controller = new AbortController();
|
|
585
|
-
var
|
|
586
|
-
"
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
["transcription_draft_delta", "transcription_draft_complete", "transcription_draft_error"]
|
|
591
|
-
|
|
592
|
-
);
|
|
593
|
-
streamPromise.catch(function(error) {
|
|
583
|
+
var response = await this.fetchWithBootstrapRetry("audio_stream", this.config.chatAudioStreamTemplate, function() {
|
|
584
|
+
return { method: "GET", headers: self.buildHeaders(), signal: controller.signal };
|
|
585
|
+
}, sessionId);
|
|
586
|
+
if (!response.body) throw new Error("Le flux de réponse est indisponible.");
|
|
587
|
+
var consumePromise = this.consumeSSE(response.body.getReader(), callbacks,
|
|
588
|
+
["transcription_draft_delta", "transcription_draft_complete", "transcription_draft_error"]);
|
|
589
|
+
consumePromise.catch(function(error) {
|
|
594
590
|
if (self.isExpectedStreamAbortError(error)) return;
|
|
595
591
|
if (callbacks.onTransportError) callbacks.onTransportError(error.message || "Erreur stream audio");
|
|
596
592
|
});
|
|
@@ -668,11 +664,18 @@ function mountFromScript(scriptTag) {
|
|
|
668
664
|
var state = { open: false, sessionId: "", token: config.sessionBootstrapToken || "", sending: false, listening: false, bootstrapPromise: null, sessionPromise: null };
|
|
669
665
|
var ui = new WidgetUIManager(config);
|
|
670
666
|
if (!ui.mount()) return;
|
|
671
|
-
var turnstile =
|
|
667
|
+
var turnstile = null; /* TURNSTILE_DISABLED_FOR_DEV */
|
|
672
668
|
var api = new WidgetApiManager(config, state, events, ui, turnstile);
|
|
673
669
|
var audio = new WidgetAudioManager(state, api, ui);
|
|
674
670
|
if (!audio.isSupported()) ui.micButton.style.display = "none";
|
|
675
671
|
api.hydrateTheme().catch(function() {});
|
|
672
|
+
|
|
673
|
+
var signalementModule = null;
|
|
674
|
+
var SignalementModuleManager = runtime.SignalementModuleManager;
|
|
675
|
+
if (SignalementModuleManager) {
|
|
676
|
+
signalementModule = new SignalementModuleManager(ui.getRoot(), events, api, ui);
|
|
677
|
+
signalementModule.mount(ui.getPanel(), ui.getHeader());
|
|
678
|
+
}
|
|
676
679
|
var mediaQueryList = null;
|
|
677
680
|
var handleHostThemeChange = null;
|
|
678
681
|
if (typeof window.matchMedia === "function") {
|
|
@@ -686,9 +689,44 @@ function mountFromScript(scriptTag) {
|
|
|
686
689
|
if (typeof mediaQueryList.addEventListener === "function") mediaQueryList.addEventListener("change", handleHostThemeChange);
|
|
687
690
|
else if (typeof mediaQueryList.addListener === "function") mediaQueryList.addListener(handleHostThemeChange);
|
|
688
691
|
}
|
|
692
|
+
var signalementActive = false;
|
|
693
|
+
|
|
694
|
+
if (signalementModule) {
|
|
695
|
+
events.on("module:signalement:open", function() { signalementActive = true; });
|
|
696
|
+
events.on("module:signalement:closed", function() { signalementActive = false; });
|
|
697
|
+
events.on("module:signalement:submitted", function(result) {
|
|
698
|
+
signalementActive = false;
|
|
699
|
+
ui.addMessage("assistant", "");
|
|
700
|
+
var lastMsg = ui.messages.lastElementChild;
|
|
701
|
+
if (lastMsg) ui.setAssistantFinalText(lastMsg, "Merci, votre signalement a été transmis. Référence : **" + (result.signalement_id || "N/A") + "**");
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
async function handleSignalementSubmit() {
|
|
706
|
+
if (!signalementModule || !signalementActive) return;
|
|
707
|
+
state.sending = true;
|
|
708
|
+
ui.setComposerDisabled(true);
|
|
709
|
+
ui.showError("");
|
|
710
|
+
try {
|
|
711
|
+
await api.ensureSession();
|
|
712
|
+
await signalementModule.submit();
|
|
713
|
+
} catch (error) {
|
|
714
|
+
ui.showError((error && error.message) || "Erreur lors de l'envoi du signalement.");
|
|
715
|
+
} finally {
|
|
716
|
+
state.sending = false;
|
|
717
|
+
ui.setComposerDisabled(false);
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
|
|
689
721
|
async function handleSend(event) {
|
|
690
722
|
event.preventDefault();
|
|
691
723
|
if (state.sending || state.listening) return;
|
|
724
|
+
|
|
725
|
+
if (signalementActive && signalementModule) {
|
|
726
|
+
await handleSignalementSubmit();
|
|
727
|
+
return;
|
|
728
|
+
}
|
|
729
|
+
|
|
692
730
|
var message = ui.pullInput();
|
|
693
731
|
if (!message) return;
|
|
694
732
|
state.sending = true;
|
|
@@ -699,9 +737,22 @@ function mountFromScript(scriptTag) {
|
|
|
699
737
|
try {
|
|
700
738
|
var sessionId = await api.postMessage(message);
|
|
701
739
|
ui.startAssistantStream();
|
|
740
|
+
var pendingSignalementData = null;
|
|
702
741
|
await api.streamSession(sessionId, {
|
|
703
742
|
onToken: function(token) { ui.appendAssistantToken(token); },
|
|
704
|
-
|
|
743
|
+
onModuleSignalement: function(payload) {
|
|
744
|
+
pendingSignalementData = payload || {};
|
|
745
|
+
},
|
|
746
|
+
onFinal: function(payload) {
|
|
747
|
+
ui.finalizeAssistantMessage(payload.content || "");
|
|
748
|
+
var sigData = pendingSignalementData || (payload.module_signalement ? payload.module_signalement : null);
|
|
749
|
+
if (signalementModule && sigData) {
|
|
750
|
+
var streamEl = ui.messages.lastElementChild;
|
|
751
|
+
ui.injectSignalementButton(streamEl, function() {
|
|
752
|
+
signalementModule.open(sigData);
|
|
753
|
+
});
|
|
754
|
+
}
|
|
755
|
+
},
|
|
705
756
|
onError: function(errorText) { ui.showError(errorText || "Erreur de streaming."); },
|
|
706
757
|
onDone: function() {}
|
|
707
758
|
});
|
|
@@ -754,7 +805,6 @@ function mountFromScript(scriptTag) {
|
|
|
754
805
|
if (typeof mediaQueryList.removeEventListener === "function") mediaQueryList.removeEventListener("change", handleHostThemeChange);
|
|
755
806
|
else if (typeof mediaQueryList.removeListener === "function") mediaQueryList.removeListener(handleHostThemeChange);
|
|
756
807
|
}
|
|
757
|
-
if (audio.stopDraftStream) audio.stopDraftStream();
|
|
758
808
|
audio.cleanupMedia();
|
|
759
809
|
if (ui.host && ui.host.parentNode) ui.host.parentNode.removeChild(ui.host);
|
|
760
810
|
}, on: function(eventName, handler) { events.on(eventName, handler); } };
|
package/dist/iife/loader.v1.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(function() {
|
|
2
2
|
"use strict";
|
|
3
|
-
var __WIDGET_MANIFEST__ = {"ui.v1.js":"ui.v1.
|
|
3
|
+
var __WIDGET_MANIFEST__ = {"ui.v1.js":"ui.v1.e007c7c4.js","audio.v1.js":"audio.v1.20858b08.js","signalement.v1.js":"signalement.v1.d321dfde.js","engine.v1.js":"engine.v1.c127656e.js"};
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
var RUNTIME_NS = "__OurluWidgetRuntimeV1";
|
|
@@ -45,14 +45,18 @@
|
|
|
45
45
|
if (!window[RUNTIME_FLAG]) {
|
|
46
46
|
var uiFileName = resolveManifestFileName("ui.v1.js");
|
|
47
47
|
var audioFileName = resolveManifestFileName("audio.v1.js");
|
|
48
|
+
var signalementFileName = resolveManifestFileName("signalement.v1.js");
|
|
48
49
|
var engineFileName = resolveManifestFileName("engine.v1.js");
|
|
49
50
|
|
|
50
51
|
var uiRuntimeUrl = scriptTag.getAttribute("data-runtime-ui-url") || buildApiRuntimeAssetUrl(scriptTag, uiFileName);
|
|
51
52
|
var audioRuntimeUrl = scriptTag.getAttribute("data-runtime-audio-url") || buildApiRuntimeAssetUrl(scriptTag, audioFileName);
|
|
53
|
+
var signalementRuntimeUrl = scriptTag.getAttribute("data-runtime-signalement-url") || buildApiRuntimeAssetUrl(scriptTag, signalementFileName);
|
|
52
54
|
var engineRuntimeUrl = scriptTag.getAttribute("data-runtime-engine-url") || buildApiRuntimeAssetUrl(scriptTag, engineFileName);
|
|
53
55
|
|
|
54
56
|
window[RUNTIME_FLAG] = loadScript(uiRuntimeUrl).then(function() {
|
|
55
57
|
return loadScript(audioRuntimeUrl);
|
|
58
|
+
}).then(function() {
|
|
59
|
+
return loadScript(signalementRuntimeUrl);
|
|
56
60
|
}).then(function() {
|
|
57
61
|
return loadScript(engineRuntimeUrl);
|
|
58
62
|
});
|