# Imports

Toutes ces méthodes exposent un constructeur avec la même interface SealdSDK constructeur.

En règle générale, importer le SDK et les plugins directement devrait fonctionner dans la majorité des situations.

Vous pouvez cependant vouloir plus de contrôle sur quelle version du SDK est utilisée, sur les polyfills inclus, etc. Ce guide vous explique toutes les options possibles et leurs différences.

Il y a 3 manières d'utiliser le Seald-SDK dans votre navigateur, selon vos besoins et l'architecture de votre application web.

# Bibliothèque polyfillée

De la même manière, vous pouvez importer les fichiers suivants pour les plugins :

Cette version est déjà empaquetée, transpilée et minifiée pour l'utilisation dans un navigateur web. Elle inclut toutes les bibliothèques, dépendances et polyfills nécessaires à son fonctionnement.

Utilisez cette méthode si vous utilisez un bundler comme webpack, mais que vous ne voulez pas configurer ce bundler pour inclure les polyfills nécessaires.

# Bibliothèque

Ceci importe @seald-io/sdk/browser/seald-sdk.js, qui est la version pour le navigateur.

De la même manière, vous pouvez importer les fichiers suivants pour les plugins :

Utilisez cette méthode si vous utilisez un bundler comme webpack. Pour cela, referez-vous à la section Empaquetage personnalisé et transpilation.

Cette méthode est recommandée, puisqu'elle permet de diminuer la duplication des dépendances et polyfills, et donc minimiser la taille finale de votre application.

# Bundle

Copiez le fichier @seald-io/sdk/browser/seald-sdk.browser.js dans votre projet et importez-le via une balise <script>.

De la même manière, vous pouvez copier les fichiers suivants pour les plugins :

  • @seald-io/sdk-plugin-ssks-password/browser/seald-sdk-plugin-ssks-password.browser.js
  • @seald-io/sdk-plugin-ssks-2mr/browser/seald-sdk-plugin-ssks-2mr.browser.js

Par exemple, pour importer le SDK et le plugin SSKS-Password :

Cette version est déjà empaquetée, transpilée et minifiée pour l'utilisation dans un navigateur web. Elle inclut toutes les bibliothèques, dépendances et polyfills nécessaires à son fonctionnement.

Elle expose le constructeur Seald SDK dans la variable globale window.SealdSDK.

Les plugins sont exposés dans les variables globales :

  • window.SealdSDKPluginSSKSPassword
  • window.SealdSDKPluginSSKS2MR

# Node.js / Electron

import SealdSDK from '@seald-io/sdk'

const seald = SealdSDK({ appId, apiURL })

Cela importe la version empaquetée pour les projets Node.js.

Elle peut être utilisée pour un serveur NodeJS, une application de bureau en Electron, des tests unitaires, etc.

# React-Native

# Installation

Le Seald SDK pour react-native a des "peer dependencies" qui doivent être installées séparément :

  • react-native-modpow
  • @react-native-async-storage/async-storage (pour les versions 0.11.X et antérieures, il s'agissait du paquet @react-native-community/async-storage)
  • react-native-scrypt
  • react-native-rsa-native
  • react-native-get-random-values

Vous pouvez les installer avec la commande:

npm i -S react-native-modpow @react-native-async-storage/async-storage react-native-scrypt react-native-rsa-native react-native-get-random-values

Ce paquet ainsi que ces dépendances sont liés automatiquement, pour Android. Pour iOS, vous aurez peut-être besoin de lancer cd ios && pod install.

# Bundle

La librairie exposée par défaut est une version empaquetée, transpilée et minifiée. Elle est utilisable telle quelle.

De la même manière, vous pouvez importer les fichiers suivants pour les plugins :

# Bibliothèque

Si votre application est elle-même transpilée, vous pouvez importer la librairie source. Cela vous permettra alors d'optimiser la taille de votre application.

Cette bibliothèque devra être transpilée pour être utilisée. Pour cela, referez-vous à la section Empaquetage personnalisé et transpilation.

De la même manière, vous pouvez importer les fichiers suivants pour les plugins :

# Empaquetage personnalisé et transpilation

Pour transpiler le SDK, vous aurez besoin d'activer les polyfills des modules internes de NodeJS.

Voici un example de configuration pour le bundler Webpack 5 :

module.exports = {
  // ... ,
  node: {
    global: true
  },
  resolve: {
    fallback: {
      assert: require.resolve('assert/'),
      fs: false,
      path: require.resolve('path-browserify'),
      events: require.resolve('events/'),
      constants: require.resolve('constants-browserify'),
      os: require.resolve('os-browserify/browser'),
      util: require.resolve('util/'),
      stream: require.resolve('stream-browserify'),
      crypto: false
    }
  },
  plugins: [
    new webpack.ProvidePlugin({
      process: 'process/browser',
      Buffer: ['buffer', 'Buffer'],
      setImmediate: ['timers-browserify', 'setImmediate'],
      clearImmediate: ['timers-browserify', 'clearImmediate']
    })
  ]
  // ...
}

Vous pourrez avoir besoin d'installer en devDependencies les paquets assert path-browserify events constants-browserify os-browserify util stream-browserify process buffer timers-browserify.

Pour plus de détails, voir la documentation de webpack (opens new window).

# React-Native

Certaines dépendances du SDK ont des implémentations spécifiques pour React-Native déclarées comme alias dans le champ "react-native" de leur package.json. Ce champ est automatiquement utilisé par metro (opens new window).

Si vous utilisez un bundler intermédiaire avant d'utiliser metro (comme webpack), vous devrez le spécifier. Vous devrez également considérer comme externes les dépendances natives de React-Native. Dans webpack, il faut ajouter les options suivantes :

module.exports = {
  externals: [
    'react-native',
    'react-native-modpow',
    'react-native-scrypt',
    'react-native-rsa-native',
    '@react-native-async-storage/async-storage',
    'react-native-get-random-values',
    'react-native/Libraries/Utilities/PolyfillFunctions'
  ],
  resolve: {
    aliasFields: ['react-native', 'browser', 'main']
  }
}