open-index/open-npm huggingface dataset:
npm package: @0xsequence/google-kms-signer
Description: an ethers.js- and sequence.js-compatible signer using Google Cloud Key Management Service keys
Author: Horizon Blockchain Games Inc.
Latest version: 0.3.0

# google-kms-signer

[GoogleKmsSigner](https://github.com/0xsequence/google-kms-signer) is an [ethers.js](https://ethers.org)- and [sequence.js](https://github.com/0xsequence/sequence.js)-compatible signer using [Google Cloud Key Management Service](https://cloud.google.com/security/products/security-key-management) keys

## prerequisites

### create google cloud kms key

https://console.cloud.google.com/security/kms/keyrings

1. create project or use existing one
2. create key ring or use existing one
3. create key
  - protection level: hsm
  - key material: hsm-generated
  - purpose: asymmetric sign
  - algorithm: elliptic curve secp256k1 - sha256 digest

### set up application default credentials

https://cloud.google.com/kms/docs/reference/libraries#authentication

1. install [gcloud cli](https://cloud.google.com/sdk/docs/install)
2. `gcloud auth application-default login`
3. authenticate

## installation

these instructions assume [pnpm](https://pnpm.io), please refer to docs if you use something else

```sh
pnpm add @0xsequence/google-kms-signer
```

## usage

### integration

create a signer:

```ts
import { GoogleKmsSigner } from '@0xsequence/google-kms-signer'

const signer = new GoogleKmsSigner({
  project: 'my-project',
  location: 'my-location',
  keyRing: 'my-key-ring',
  cryptoKey: 'my-crypto-key',
  cryptoKeyVersion: 'my-crypto-key-version'
})
```

get your signer's address:

```ts
const address = await signer.getAddress()
console.log(address)
```

sign a message:

```ts
const message = 'hello world'
const signature = await signer.signMessage(message)

console.log(signature)
console.log(`${ethers.utils.verifyMessage(message, signature)} = ${address}`)
```

send a transaction:

```ts
const provider = new ethers.providers.JsonRpcProvider('https://my-json-rpc-provider.com')
const connectedSigner = signer.connect(provider)

const response = await connectedSigner.sendTransaction({
  to: 'destination address',
  value: 123
})

const receipt = await response.wait()
console.log(receipt)
```

sign for a sequence wallet:

```ts
import { Session } from '@0xsequence/auth'
import { isValidMessageSignature } from '@0xsequence/provider'

const session = await Session.singleSigner({
  signer,
  projectAccessKey: 'my-project-access-key'
})

const message = ethers.utils.toUtf8Bytes('hello world')
const signature = await session.account.signMessage(message, chainId, 'eip6492')

console.log(isValidMessageSignature(session.account.address, message, signature, provider))
```

### running tests

```sh
cp .env.sample .env
```

edit the .env file, then:

```sh
pnpm test
```
npm package: @0xsequence/immutable-connector
Description: Immutable connector for Sequence Kit
Author: Sequence Platforms ULC
Latest version: 5.4.11

# Immutable connector for Sequence Web-SDK

## Installation

To install this package:

```bash
npm install @0xsequence/immutable-connector @imtbl/config @imtbl/sdk
# or

pnpm install @0xsequence/immutable-connector @imtbl/config @imtbl/sdk
# or
yarn add @0xsequence/immutable-connector @imtbl/config @imtbl/sdk
```

## Adding the connect

First, an Immutable Passport instance must be created with valid and correctly configured Immutable keys.

Note, that the application will need a callback route configured similarly to this example: https://github.com/immutable/ts-immutable-sdk/blob/main/examples/passport/login-with-nextjs/src/app/redirect/page.tsx

Also, the `forceScwDeployBeforeMessageSignature` parameter must be set to true for the signing of message to work for new users.

```js
export const passportInstance = new passport.Passport({
  baseConfig: {
    environment: Environment.SANDBOX,
    publishableKey: 'my_publisheable_key'
  },
  forceScwDeployBeforeMessageSignature: true,
  clientId: 'my_client_id',
  redirectUri: `${window.location.origin}/auth/callback`,
  logoutRedirectUri: `${window.location.origin}`,
  audience: 'platform_api',
  scope: 'openid offline_access email transact'
})
```

Finally, the wallet can be passed down to the web-sdk configuration similarly to other wallets,

```js
immutable({
  passportInstance,
  environment: Environment.SANDBOX
})
```