Développement de connecteur - Pb avec Yarn dev


#1

Bonjour,

J’ai réussi à créer un connecteur qui fonctionne avec yarn standalone…

Vient maintenant la partie “yarn dev”…
J’ai beau changer l’url de cozy (pour mettre mon cozy local) dans le fichier konnector-dev-config.json

quand je fais yarn dev
il me dit qu’il ne trouve pas " http://cozy.tools:8080"…
or dans mon fichier, COZY_URL vaut http://localhost:8080

Je ne comprends pas, c’est comme si il y avait une sorte de cache.
Qqun aurait une idée ?

Marc


#2

Bonjour @marcpolycarpe

Le mode dev sert à tester le connecteur sur un vrai cozy, (par exemple en production, ton propre cozy)
Ca permet de vérifier certaines choses dont :

  • Que tout se passe correctement depuis une ip de production
  • Que les fichiers sont bien enregistrés dans le cozy (permissions notamment)
  • Que les factures sont bien reliées à des opérations bancaires.

Il faut donc que tu configures l’url de ton cozy dans COZY_URL, j’imagine quelque chose comme ‘https://marcpolycarpe.mycozy.cloud’ si tu possèdes un cozy hébergé chez nous. Et en lancant ‘yarn dev’ ca l’executera la bas (moyennant un token à la première utilisation que tu pourras facilement crée via une pop-up dans ton navigateur web)

Tiens nous au courant si tu n’as pas réussi.

Pour ce qui est du http://cozy.tools:8080, c’est le cas par défault pour les devs qui font tourner un cozy localement sur 127.0.0.1:8080 (avec docker, généralement), tu n’as pas besoin de t’embarquer la dedans pour faire juste un connecteur.
Et pour l’explication technique :

  • le 8080 est utilisé pour être sur un port haut, a priori libre, plutot que le 80/443
  • cozy.tools est un domaine qui résoud vers 127.0.0.1 (localhost), c’est juste un hack de notre part pour trouver facilement le localhost sur tous les systèmes.

Par curiosité, c’est quel connecteur ?

Lucas


#3

Je pense que tu avais déja trouvée cette documentation, mais je la reposte pour les suivants

https://docs.cozy.io/en/tutorials/konnector/#linking-your-connector-to-a-cozy-dev-mode


#4

Bonjour, @lucas

Merci de ton retour.

Voici un résumé de mon install :

J’ai un cozy auto hébergé fraichement installé (d’hier en version testing).
J’ai essayé de créer un connecteur (en l’occurrence pour répondre à ta question, c’est pour la SAUR un fournisseur d’eau… pour l’instant le plus simple dont j’ai besoin pour me faire les dents…)
le yarn standalone fonctionne correctement, mon connecteur récupère bien tout ce qu’il faut la ou il faut (en tout cas, d’après ce que je vois dans les logs)

et du coup, maintenant, j’aimerais le tester sur mon cozy autohébergé (qui est sur la meme machine)
Maintenant mes questions :

1 - Ce que je ne comprends absolument pas, c’est que dans le fichier konnectore-dev-config.json, j’ai :
{
“COZY_URL”: “http://localhost:8080”,
“fields”: {
“login”:“identifiant”,
“password”:“pwd”
}
}

et que lorsque je lance yarn dev, il me parle du http://cozy.tools:8080 qui renvoie un 404 (c’est peut être la mon pb)

2 - Pourrais tu me donner un peu plus de détails sur ta phrase :
“moyennant un token à la première utilisation que tu pourras facilement crée via une pop-up dans ton navigateur web” ? (il me manque peut être aussi cette info)

Merci d’avance
Marc


#5

Concernant le 1)
Tu as raison, il y a un problème avec le konnector-dev-config.json, la modification n’est pas prise en compte.

Si tu veux le changer, ce que je te propose c’est de mettre une variable d’environnement, ca va marcher.
‘export COZY_URL=http://localhost:8080’

Aprés je te le répète cozy-tools:8080 = 127.0.0.1:8080 = localhost:8080
Est ce que tu es sur que ton cozy tourne bien à cette url ?

Pour 2) tu vas lancer le connecteur sur un cozy distant (en l’occurence sur la même machine chez toi ^^), le cozy doit s’assurer que tu es bien autorisé, il va donc te demander ton mot de passe pour valider cela.
Soit il ouvre un onglet dans ton navigateur, soit tu peux copier coller le lien que tu verras dans la sortie de la commande yarn dev
Ensuite le cozy crée un token d’accès pour ce cas spécifique, tout se fait automatiquement.

Lucas


#6

Merci de ton retour @lucas

Du coup, pour le #1, a priori je te dirais que je suis sûr mais l’informatique m’a toujours appris, qu’il ne faut jamais être trop sûr…
Je dirais quand meme oui, quand je lance “curl http://localhost:8080/version
j’ai bien un json valide avec des numéros de version et tout et tout…

Pour le 2 par contre (et c’est ce qui me fait douter du 1 d’ailleurs…)
Je lance un yarn dev sur un terminal en ssh (donc pas de navigateur) mais pas d’url non plus à la fin…
Pour lancer en dev il faut aussi un token (généré avec cozy-stack instances token-cli )
Si oui, que dois je mettre dans scope ? (il y a une enum qque part ?)

je te mets le résultat complet du yarn dev au cas ou tu voies quelque chose… :

yarn run v1.12.3
$ cozy-run-dev
cozy-authenticate: debug : “COZY_URL” : http://cozy.tools:8080
manifest: debug : “scopes found” : [ ‘io.cozy.bank.operations’,
‘io.cozy.bills’,
‘io.cozy.files’,
‘io.cozy.accounts’ ]
{ FetchError: {“error”:{}}
name: ‘FetchError’,
response:
Body {
url: ‘http://cozy.tools:8080/auth/register’,
status: 404,
statusText: ‘Not Found’,
headers: Headers { _headers: [Object] },
ok: false,
body:
PassThrough {
_readableState: [Object],
readable: false,
domain: null,
_events: [Object],
_eventsCount: 4,
_maxListeners: undefined,
_writableState: [Object],
writable: false,
allowHalfOpen: true,
_transformState: [Object] },
bodyUsed: true,
size: 0,
timeout: 0,
_raw: [ <Buffer 7b 22 65 72 72 6f 72 22 3a 7b 7d 7d> ],
_abort: false,
_bytes: 12 },
url: ‘http://cozy.tools:8080/auth/register’,
status: 404,
reason: { error: {} } } ‘unexpected error’
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.


#7

Ok pour le 1)
Je pense que c’est bon. Ton cozy tourne etc…

Grace à yarn dev, tu ne devrais pas avoir à créer de token manuellement.

Dans ton log on voit qu’il le trouve bien quelquechose sur localhost:8080. Mais j’ai l’impression qu’il te redirige vers la page register, comme si le cozy n’avait pas été initialisé.

Est ce que tu as déja accéder à ce cozy une première fois avec un navigateur depuis que tu l’as installé ? Tu as configuré un mot de passe dans le petit assistant de démarrage, etc…?


#8

Alors… j’ai été plus loin

J’ai réussi à le faire marcher en mettant l’url externe de mon cozy…
https://cozy.mondomaine.fr

la j’ai bien l’url qui s’affiche, je la prends et je la mets dans mon navigateur…
j’accepte les autorisations et j’ai une erreur de connexion sur localhost:3333 (ce qui est normal… vu que je ne suis pas sur la même machine.)
-> Par contre deux problèmes :
1 - Je ne comprends pas pourquoi ça marche en passant par le nom de domaine et pas par localhost
2 - Je n’arrive pas à autoriser mon konnector, si je modifie l’url appelée pour mettre le nom de domaine, j’ai une fermeture violente de connexion et si je modifie l’url de départ pour mettre mon domaine à la place de localhost dans l’url, paramèter redirect_uri, j’ai une erreur de cozy qui me dit que les paramètres ne correspondent pas…
cela me semble être un bug, non?
3 - j’ai essayé d’aller plus loin, en faisant un curl de localhost:3333 directement sur la machine ou tourne cozy, ca débloque le yarn dev qui était en attente mais j’ai une erreur :

cozy-authenticate: debug : “url received” : /do_access?access_code=28480cb294f774c532c040992f2171e1
Error: Missing states from current URL

et voici l’url que j’ai appelée en local (ou j’ai bien le state):
http://localhost:3333/do_access?access_code=28480cb294f774c532c040992f2171e1&code=28480cb294f774c532c040992f2171e1&state=MH0l4GaiUxPAVNxsqmqmt

pour récapituler, il me semble y avoir plusieurs pb :

  • le COZY_URL avec localhost qui ne fonctionne pas…
  • le retour sur localhost:3333 alors que je ne suis pas sur la même machine (d’ailleurs, ca serait pas mal de documenter que le port 3333 doit être ouvert, moi j’ai tout bloqué a part le 443 et le 80 uniquement sur let’sEncrypt
  • L’erreur “Missing states from current URL” lorsqu’on valide à la main l’authentification sur la machine

Je vais continuer de creuser

Marc


#9

j’ai réussi à l’activer, une paire de guillemets autour de l’url a permis à curl de ne pas perdre des paramètres…

mais, j’ai une erreur que je ne comprends pas…

TypeError: “file” argument must be a non-empty string
at normalizeSpawnArguments (child_process.js:389:11)
at exports.spawn (child_process.js:502:38)
at authenticate.then.then (/root/konnectors/cozy-konnector-saur/node_modules/cozy-jobs-cli/src/run-dev.js:54:21)
at
at process._tickCallback (internal/process/next_tick.js:189:7)
at Function.Module.runMain (module.js:696:11)
at startup (bootstrap_node.js:204:16)
at bootstrap_node.js:625:3 ‘unexpected error’

Si qqun a une idée ?
je suis preneur;…


#10

Bon ben voila, j’ai développé 4 connecteurs qui a priori fonctionnent… mais je ne peux pas les tester a cause de cette erreur.

Du coup, si vous avez une idée je suis preneur pour pouvoir tester mes connecteurs…
merci d’avance…

Marc


#11

Hello @marcpolycarpe

Ce que tu peux faire pour tester les connecteurs, c’est utilisé un cozy hébergé chez nous.
Tu peux en créer un facilement sur https://cozy.io/
Utilise le ‘export COZY_URL=…’

Il faudra de toute facon en passer par la pour publier les connecteurs

Le bug sur le COZY_URL a été reproduit et pris en compte.
Le bug en rapport avec l’utilisation de yarn-dev et le localhost est plus complexe, je me renseigne et je reviens vers toi.


#12

Bonne nouvelle @marcpolycarpe
Concernant le bug de COZY_URL, j’ai identifié l’origine du problème. C’est une régression suite à la mise à jour de cozy-jobs-cli en 1.6.1, début décembre.
Le cozy-konnector-template a été corrigé, tu peux faire la même chose pour tes connecteurs, la COZY_URL du konnector-dev-config.json sera bien prise en compte. Plus besoin d’exporter une variable d’environnement.

Merci à toi de nous avoir mis en évidence le problème.

Concernant le localhost, je n’arrive pas bien à cerner le problème, Il me faut plus de détails.
Est ce que tu peux essayer un simple ‘yarn dev’ avec une COZY_URL sur ton ‘https://cozy.mondomaine.fr
Et me copier le log, obsfusqué si besoin.

Ce qu’il doit se passer :
Le yarn dev se lance
Te propose une url du style https://cozy.mondomaine.fr/auth/authorize?client_id=9aeXXXXXX&redirect_uri=http%3A%2F%2Flocalhost%3A3333%2Fdo_access&state=Y9ebnA3o6N24AsTN4eqzIA&response_type=code&scope=io.cozy.bank.operations%20io.cozy.bills%20io.cozy.files%20io.cozy.accounts
Tu peux taper ton mot de passe, et accepter la liste de droits
Puis tu es redirigé vers http://localhost:3333/do_access?access_code=4xxx&code=4xxx&state=YxxxA#
(attention ce localhost:3333 est celui de ta ‘machine de dev’)
Cette requête est prise par le yarn dev pour se configurer et le connecteur se lance.

Lucas


#13

Salut @lucas

Merci pour le fix, je l’ai appliqué et cela fonctionne maintenant … (même sur mon cozy autohébergé)

pour ce qui est du localhost, il faudrait que je puisse enlever les credentials pour repartir au meme point (j’ai réussi à valider les credentials une fois) du coup maintenant, je n’ai plus les meme pb…
comment je pourrais faire ca ?

Marc


#14

Oui le token se trouve dans le fichier .token.json à la racine du connecteur.
Tu peux le supprimer ou le renommer pour en garder une sauvegarde.

Est ce que tu as déja publié du code quelques part pour ces connecteurs ?
Je peux commencer à les review si tu veux pour préparer le processus de publication dans notre store.


#15

J’ai rien publié du tout mais je peux en effet, ca fera au moins une sauvegarde…
En plus, vu que c’est mes premiers dev en node, ca sera bien d’avoir un oeil exterieur !

Comment ca se passe pour déployer ? (j’ai jamais utilisé github non plus autrement qu’avec un git clone…)

:sweat_smile:


#16

j’ai aussi une question, comment on fait pour organiser les “fichiers” récupérés en sous dossier (par exemple si il y a plusieurs contrats ?
et je regarde le yarn dev sans les credentials


#17

Alors pour mon problème de localhost :

j’ai dans mon fichier konnector
avec cozy.tools qui se résoud en localhost

Quand je fais un yarn dev (le premier, donc sans aucun credential)
j’ai ça sur la sortie (le log est en dessous) :

{
“COZY_URL”: “http://cozy.tools:8080”,
“fields”: {
“login”:“user”,
“password”:“pwd”
}
}

cozy-authenticate: debug : “COZY_URL” : http://cozy.tools:8080
manifest: debug : “scopes found” : [ ‘io.cozy.bank.operations’,
‘io.cozy.bills’,
‘io.cozy.files’,
‘io.cozy.accounts’ ]
{ FetchError: {“error”:{}}
name: ‘FetchError’,
response:
Body {
url: ‘http://cozy.tools:8080/auth/register’,
status: 404,
statusText: ‘Not Found’,
headers: Headers { _headers: [Object] },
ok: false,
body:
PassThrough {
_readableState: [Object],
readable: false,
domain: null,
_events: [Object],
_eventsCount: 4,
_maxListeners: undefined,
_writableState: [Object],
writable: false,
allowHalfOpen: true,
_transformState: [Object] },
bodyUsed: true,
size: 0,
timeout: 0,
_raw: [ <Buffer 7b 22 65 72 72 6f 72 22 3a 7b 7d 7d> ],
_abort: false,
_bytes: 12 },
url: ‘http://cozy.tools:8080/auth/register’,
status: 404,
reason: { error: {} } } ‘unexpected error’
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

et dans le log (/var/log/cozy/stack.log)
Jan 2 08:55:13 vps217744 cozy[1017]: time=“2019-01-02T08:55:13-05:00” level=error msg=“POST /auth/register code=404, message=Instance not found” nspace=http
Jan 2 08:57:28 vps217744 cozy[1017]: time=“2019-01-02T08:57:28-05:00” level=error msg=“POST /auth/register code=404, message=Instance not found” nspace=http

Je viens de tilter, est ce qu’il n’y aurait (ne devrait) pas y avoir une variable d’environnement avec l’instance par défaut (c’est le instance not found qui me fait penser à ca…)

parce que si je remplace “http://cozy.tools:8080” par mon vrai “domaine” (celui avec lequel j’accède à mon cozy, ca fonctionne ?
est ce que ca serait pas tout betement ca ?


#18

Oui je pense que ca marche si tu mets le domaine publique de ton instance. C’est un cas un peu spécial, cet outil est fait plutot pour pouvoir lancer le yarn dev depuis une machine de dév vers un cozy tournant ailleurs
L’essentiel c’est que tu arrives à tester.

Pour la publication, il y a quelques trucs à préparer. (icone, manifest, etc…)
Voir la suite de la doc ici : https://docs.cozy.io/en/tutorials/konnector/#integration-in-the-store-for-all-the-users

Si besoin, je fais des aller-retour avec toi pour corriger ce qu’il faut dans le code.
Ensuite on finalise la préparation du connecteur de notre coté (build auto, suivi d’erreurs, etc…) et on le publie.

Tu peux me contacter par mail sur lucas /at/ cozycloud.cc si tu préfères
Concernant github.com, est ce que tu as un compte ?
L’idéal pour nous est d’avoir le repo sur l’organisation konnectors.
Je l’ai créé ici, je te mets les droits en lecture/ecriture dés que j’ai ton pseudo.
https://github.com/konnectors/saur

Ensuite il faut suivre un classique :

git init
git add . (attention à exclure les données sensibles)
git commit -m “first commit”
git remote add origin git@github.com:konnectors/saur.git
git push -u origin master

En cas de difficulté avec git ou autre, fais moi signe. Tu dois pouvoir t’en sortir au début avec les 4/5 commandes de bases git status, git add, git commit, git pull, git push.
On peux aussi s’organiser une visio si besoin.

Pour les dossiers, le mieux est de faire un sous dossier pour chaque compte mais ca implique de manipuler toi même les fichiers avec cozy-client, c’est un peu plus complexe à gérer.


#19

Le 1er connecteur de @marcpolycarpe vient d’être publier. \o/
C’est le connecteur SAUR, une société de distribution d’eau

Bravo à lui.