Migrer depuis la v1

Ce qui change entre le module v1 et Saphere Scan v2, dans l’ordre où vous le rencontrerez.

La version 2 est un module distinct plutôt qu’une mise à jour de la version 1. Une intégration ne migre pas d’elle-même : vous remplacez le script, renommez quelques options, et adaptez la façon d’obtenir une habilitation.

Rien ne change côté serveur. Le même compte, les mêmes mesures, les mêmes variables. Ce qui change est le code de votre page.

Les cinq changements, dans l’ordre

v1v2
Le scriptUn script classique, ou un module ES, depuis /saphere-scan/v1/…Un module ES, depuis /saphere-scan/v2/main.js
Le montageHandler.load("#container", options)SaphereScan.create("#container", options) puis bootstrap()
L’habilitationVotre point d’entrée crée une mesure et rend son identifiantVotre point d’entrée délivre un jeton d’accès, valable une fois
Les événementsSix noms, et votre gestionnaire pouvait refuser un changement d’écranQuarante et un noms, et le refus est passé aux hooks
L’apparencePréparée dans la consolePréparée dans la console, sans changement

1. Le script et le montage

<!-- v1 -->
<script src="https://cdn.saphere.ai/saphere-scan/v1/js/main.min.js"></script>
<script>
    Handler.load("#scan", options)
</script>

<!-- v2 -->
<script type="module">
    import SaphereScan from "https://cdn.saphere.ai/saphere-scan/v2/main.js"

    const instance = SaphereScan.create("#scan", options)
    await instance.bootstrap()
</script>

Deux différences derrière cela. create() rend une instance au lieu d’agir sur un objet global, de sorte que plusieurs widgets peuvent coexister sur une même page. Et le montage se fait désormais en deux temps : create() valide vos options tout de suite et lève si quelque chose ne va pas, bootstrap() met le widget à l’écran.

Le contrat du conteneur est le même : vous donnez un div qui a une hauteur, le widget le remplit, et il garde ses styles pour lui.

2. L’habilitation

C’est le changement qui demande votre serveur, et la raison d’être de la v2.

En v1, votre point d’entrée créait une mesure et rendait son identifiant. Cet identifiant ouvrait la session de mesure.

En v2, votre point d’entrée délivre un jeton d’accès : valable peu de temps, utilisable une fois, et ne portant que l’autorisation de conduire une mesure. Votre clé d’API reste sur votre serveur dans les deux versions, mais un jeton qui fuit ne vaut presque rien, là où un identifiant de mesure valait une mesure entière.

// v1
createMeasure: { strategy: "delegate", url: "/api/saphere-measure" }

// v2
proxy: { retrieveAccessToken: { strategy: "delegate", url: "/api/saphere-token" } }

Ce que votre point d’entrée ne porte plus, c’est la mesure elle-même. En v1 vous la décriviez dans le corps de l’appel qui la créait ; en v2 c’est une option du widget, createMeasureOptions, où vont les données patient que vous détenez déjà. Le jeton autorise ; l’option décrit.

Les stratégies gardent leurs noms et leur sens : delegate pour que le widget appelle votre point d’entrée, handle pour que votre propre code obtienne la valeur. Les jetons d’accès décrivent ce que votre point d’entrée doit appeler.

3. Les événements

La v1 rapportait six événements ; la v2 en rapporte quarante et un, et aucun des anciens noms ne survit. La nomenclature est désormais domaine:événement : ready est devenu widget:ready, result est devenu measure:result, et ainsi de suite. La liste complète, avec une table de correspondance v1 vers v2, est dans les événements.

Un comportement a déménagé plutôt que d’être renommé. En v1, votre gestionnaire onEvent était attendu, et rendre false annulait un changement d’écran — ce qui permettait à un gestionnaire lent de retenir l’interface. En v2, onEvent n’est jamais attendu, et le pouvoir de refuser est passé aux hooks, où il est borné par un délai de garde.

4. Les options qui changent de nom

v1v2
createMeasureproxy.retrieveAccessToken
allowLeaveRelève de la personnalisation, dans la console
allowSkipRelève de la personnalisation, dans la console
useShadowDisparue ; le widget garde toujours ses styles pour lui
langInchangée
desiredVariables, tagsInchangées, et désormais rejointes par createMeasureOptions

5. Ce qui ne change pas

La mesure elle-même. Les mêmes trente secondes, les mêmes conditions, les mêmes variables, la même forme de résultat. Un utilisateur qui compare les deux versions voit une interface différente, non une mesure différente.

Votre personnalisation non plus : écrans, couleurs et textes se préparent dans le même atelier de la console pour les deux versions.

Faites tourner les deux côte à côte

Rien n’empêche un compte de servir la v1 sur une page et la v2 sur une autre, en même temps. C’est la façon la plus sûre de migrer : posez la v2 sur un seul parcours, comparez, puis déplacez le reste.

La v2 est en bêta

Vérifiez avec i-Virtual où elle en est pour votre compte avant de planifier une migration complète.