Skip to content

Latest commit

 

History

History
307 lines (249 loc) · 24 KB

02-Develop-Initialize-User.mdx

File metadata and controls

307 lines (249 loc) · 24 KB
id title hide_title slug displayed_sidebar sidebar_position image
docs-notifications-develop-initialize-user
Initialize User
true
./initialize-user
pushNotificationSidebar
2
/assets/docs/previews/docs_notifications_develop--initialize_user.png

Initialize user overview

Before you can start sending notifications, or receiving notifications from your preferred protocol, you will need to initialize a user or re-authenticate the user. To do so you will use PushAPI.initialize call from @pushprotocol/restapi package.

<title>{`Initialize User | Push Notifcations | Push Documentation`}</title>

import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import Details from '@theme/Details';

Initialize user API

import { PushAPI, CONSTANTS } from '@pushprotocol/restapi';

// Initialize wallet user
// PushAPI.initialize(signer, {options?});
// 'CONSTANTS.ENV.PROD' -> mainnet apps | 'CONSTANTS.ENV.STAGING' -> testnet apps
const userAlice = await PushAPI.initialize(signer, {
  env: CONSTANTS.ENV.STAGING,
});

// Check for errors in userAlice's initialization and handle them if any
if (userAlice.errors.length > 0) {
  // Handle Errors Here
}

Note: If a signer is not provided, or if an invalid signer is passed, or the SDK fails to generate or decrypt keys for the signer, the PushAPI will switch to Read mode.

The function automatically initializes and returns the Push user profile object if one doesn't exist for the user or alternatively creates a new profile if the user has not been onboarded to Push network. This profile is used to interact with all function calls moving forward.


Using for Wallet Addresses

Push supports wallet addresses (EVM, with non-EVM coming soon). Simply passing the signer will ensure that the PushAPI is initialized with address of the wallet (derived by the signer).

:::tip Passing null in the signer enables Read Only Mode. Read only mode allows you to use certain APIs that are not sensitive in nature like reading user profile, listing notifications that are not encrypted by the sender, listing chats, etc. :::


Using for Lens / Cyberconnect / Any NFTs

Push also supports Lens, Cyberconnect, NFT wallets and any EVM or non-EVM wallets ensuring cross-chain messaging or cross-nft messaging can become a reality.

You will need to pass the account parameter in options object while initializing to target them. This will ensure that the PushAPI is initialized for the right account.

Example

  • NFT profile - Pass nft:{chain_standard}:{nftChainId}:{nftContractAddress}:{nftTokenId}
  • account - nft:eip155:11155111:0x42af3147f17239341477113484752D5D3dda997B:2:1683058528

Read about supported wallet standards to understand all supported formats for account parameter.


Initialize user parameters

When initializing your user, you can customize the process using several parameters. Here's a breakdown:

Param Type Sub-Type Default Remarks
signer SignerType - - Ethers or Viem Signer. Pass null and provide account to enable read only mode
options PushAPIInitializeProps - - Optional configuration properties for initializing the PushAPI.
- options.env ENV staging API env - 'prod' or 'staging'.
- options.progressHook (progress: ProgressHookType) => void - A callback function to receive progress updates during initialization. Expand Progress Hook Type and Response dropdown below to learn more
- options.account string - The account to associate user with. If not provided, it is derived from signer.
- options.version string ENC_TYPE_V3 The encryption version to use for the PushAPI.
- options.versionMeta { NFTPGP_V1 ?: password: string } - Metadata related to the encryption version, including a password if needed.
- options.autoUpgrade boolean true If true, upgrades encryption keys to latest encryption version.
- options.origin string - Specify origin or source while creating a Push Profile.

Note: Parameters in this style are mandatory.

Informs about individual progress stages during user creation / updates if progresshook as a callback function is passed during API call.
Param Type Subtype Default Remarks
progress object - - progress object that is passed in the callback
- Progress.progressId string - Predefined, ID associated with the progress objects
- Progress.progressTitle string - Predefined, title associated with the progress objects
- Progress.progressInfo string - Predefined, info associated with the progress objects
- Progress.level string - Predefined, Level associated with the progress objects

Progress object details

Progress.id Progress.level Progress.title Progress.info
PUSH-CREATE-01 INFO Generating Secure Profile Signature This step is only done for first time users and might take a few seconds. PGP keys are getting generated to provide you with secure yet seamless chat
PUSH-CREATE-02 INFO Signing Generated Profile This step is only done for first time users. Please sign the message to continue.
PUSH-CREATE-03 INFO Encrypting Generated Profile Encrypting your keys. Please sign the message to continue.
PUSH-CREATE-04 INFO Syncing Generated Profile Please sign the message to continue. Steady lads, chat is almost ready!
PUSH-CREATE-05 SUCCESS Setup Complete -
PUSH-UPGRADE-01 INFO Deprecated Generating New Profile Signature Trying to Upgrade Push Chat Keys to latest version. Please sign the message to continue.
PUSH-UPGRADE-02 INFO Decrypting Old Profile Trying to Upgrade Push Chat Keys to latest version. Please sign the message to continue.
PUSH-UPGRADE-03 INFO Deprecated Syncing New Profile Please sign the message to continue. Steady lads, chat is almost ready!
PUSH-UPGRADE-04 INFO Deprecated Decrypting Old Profile Trying to Upgrade Push Chat Keys to latest version. Please sign the message to continue.
PUSH-UPGRADE-05 SUCCESS Upgrade Completed, Welcome to Push Chat -
PUSH-DECRYPT-01 INFO Decrypting Profile Please sign the transaction to decrypt profile
PUSH-DECRYPT-02 SUCCESS Push Profile Unlocked Unlocking push profile
PUSH-AUTH-UPDATE-01 INFO Generating New Profile Signature Trying to Update Push Chat Keys to VERSION_NUMBER version. Please sign the message to continue.
PUSH-AUTH-UPDATE-02 INFO Generating New Encrypted Profile Encrypting Push Chat Keys with VERSION_NUMBER version. Please sign the message to continue.
PUSH-AUTH-UPDATE-03 INFO Syncing Updated Profile Please sign the message to continue. Steady lads, chat is almost ready!
PUSH-AUTH-UPDATE-04 SUCCESS Update Completed, Welcome to Push Chat -
PUSH-AUTH-UPDATE-05 INFO Generating New Profile Signature Trying to Update Push Profile creds. Please sign the message to continue.
PUSH-AUTH-UPDATE-06 INFO Generating New Profile Signature Encrypting Push Chat Keys with new creds. Please sign the message to continue.
PUSH-DECRYPT-AUTH-01 INFO Decrypting Profile Creds Please sign the transaction to decrypt profile creds.
PUSH-DECRYPT-AUTH-02 INFO Push Profile Creds Unlocked Unlocking push profile creds
PUSH-PROFILE-UPDATE-01 ERROR Syncing Updated Profile Steady lads, your profile is getting a new look!
PUSH-PROFILE-UPDATE-02 SUCCESS Profile Update Completed, Welcome to Push Chat -
PUSH-ERROR-00 ERROR Non Specific Error Dynamic error in the following format: [Push SDK] - API - Error - API [functionName()] -: [Dynamic Error Info]
PUSH-ERROR-01 WARN Upgrade Profile Failed Dynamic warning in the following format: [Push SDK] - API - Error - API decryptPgpKey() -: [Dynamic Error Info]
PUSH-ERROR-02 ERROR Transaction failed Dynamic warning in the following format: [Push SDK] - Contract - Error - [Name] -: [Dynamic Error Info]
{
  {
    account: "0xC785989454C958eF0fD343e3E6DcCDf9893a5b02",
    channel: Channel {
      signer: JsonRpcSigner,
      env: 'prod',
      guestMode: true,
      account: '0xC785989454C958eF0fD343e3E6DcCDf9893a5b02',
      info: ƒ,},
    chat: Chat {
      account: '0xC785989454C958eF0fD343e3E6DcCDf9893a5b02',
      decryptedPgpPvtKey: '-----BEGIN PGP PRIVATE KEY BLOCK-----\n\nxcLYBGQRtHI…nYedYb\n=o4+2\n-----END PGP PRIVATE KEY BLOCK-----\n',
      env: 'prod',
      signer: JsonRpcSigner,
      progressHook: undefined,},
    decryptedPgpPvtKey: "-----BEGIN PGP PRIVATE KEY BLOCK-----\n\n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\nJPYaDBOrwODHzX8INjnYedYb\n=o4+2\n-----END PGP PRIVATE KEY BLOCK-----\n",
    encryption: Encryption {
      account: '0xC785989454C958eF0fD343e3E6DcCDf9893a5b02',
      decryptedPgpPvtKey: '-----BEGIN PGP PRIVATE KEY BLOCK-----\n\nxcLYBGQRtHI…nYedYb\n=o4+2\n-----END PGP PRIVATE KEY BLOCK-----\n',
      pgpPublicKey: '-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nxsBNBGQRtHIB…HnWGw==\n=h2rm\n-----END PGP PUBLIC KEY BLOCK-----\n',
      env: 'prod',
      signer: JsonRpcSigner,},
    env: "prod",
    notification: Notification {
      signer: JsonRpcSigner,
      env: 'prod',
      guestMode: true,
      account: '0xC785989454C958eF0fD343e3E6DcCDf9893a5b02',
      list: ƒ,},
    pgpPublicKey: "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nxsBNBGQRtHIBCADWGXf/Ir844r6xG4FIoprXLv8LaekzuEDT1pYckE4TQSub\n6y1pCCF/eMWvUePvWBAgX8cNdBQ96gxnOB0Kxu2wQTWqLQ0PrL9ggF0dNQcQ\nPbPghOOTWwO2h/TKNa9KrhkCh9m9zjQU9o8w4HxOOJ74t8T9OXqYMOXBMSOr\nVw2bnGQfSodZV7PTJUqmA7ap5JwbGcNP9t1/XH87f6HFSgPwgN5u9rgKAwhJ\nFwujZxSJv2IPRNzpDAq/r/C+fgofkV9/kwU3odsKNMJ+REfNOhDVo+nBLHAu\nTloMkc2WSLJDSu9j8sNZPVrpUaa1c7bbxX5fVTXzW+n2/L2xBkWSfy11ABEB\nAAHNAMLAigQQAQgAPgWCZBG0cgQLCQcICZApG4QIthENGgMVCAoEFgACAQIZ\nAQKbAwIeARYhBGgybFDK2EulZ5avyikbhAi2EQ0aAAA/JQf7B6cVf1OHFncZ\nA/XprZxLLyLbRG3l8nHi8Ujd8IVWavecgYbn0zKuRbHvfkNKKXRKYQ3eMpP8\ns1XRofybhl3J6D5eSPMnw4sxysfteNBoPrBZKFCnY4JFzEDGX7XFIFnJ4ZTU\ncmCp3p0OO86ES3rSG2esmcF/uGUOSf71PspNPKWPfFT4EkpMzYsN8khJv6zA\nqmwYKfz7lCpcef/Wr20kRSN641Z2ZzpVhPQYsVpjcIboVZvb2b1lPUw6v6um\n+c6r4ONgC8HQD8vaC8aozYay9OOf5aDRT0CE8hivurA59TE1akvHDLly4F1H\nIBdShArEO0P7iM2UDZ8enNAloMOM687ATQRkEbRyAQgA3E9cwruXEXB7AwM1\nMzs9I8f2BI4xV+CddArdexeC1w/8zI3pJUYjZU3QlyAmZs9CYqjWil4CYBXy\nke+D4WVg7htEU2DykCrW1pqW+YFIXdN5p6MLOYfPKW7EU4lq1bRC3AnKHa0g\nz5XrmrU89Z8PmcLVtXeAwHM5M/cnCjHQD3a9W4WiglBgYJCqhMoxNK587WRw\n6kqzCp6OVBGozGrrmr+Cjy8fbpmHyjzss/8984RTS14TrCS33cTdTbd52R6p\nAFK3WEDyiJxBfjyZ5UTZlwcpNR84cAWheRUg9RNgnBuOwclsdZdMonfMXsUy\nYJaQKJ4vIbdme1kr31uxVdn/9QARAQABwsB2BBgBCAAqBYJkEbRyCZApG4QI\nthENGgKbDBYhBGgybFDK2EulZ5avyikbhAi2EQ0aAACoYAf/ZjF6FfGDdUZn\nshJPYVTIlhy7w+cImozxHDGZWZah2bjddnJ8a4jedSa6oSYBeBP5vnvw7Smf\n5+CvwCrIQdzBlM1VyRWRdlP9e3QixTCqDgfyUVKRavYYgH8l9MFAw57Bq8Y+\nsckgDkY7A04cYvd93SCclwGC4X9GshnBYgbjPbAqOSPBhq1i+i1R+zYGqy92\nPGxT83rgjJiXIjhiVxZCzZVy+X8KU58nQLIbWj2zR0xgO7oMnaZFOMYtHtoe\nmCIq58+IQt7ETENsqYKR5u+f6ep5+pF0vtvZBDp2DVVMvoabUW5AP31NsFdG\nwUJaHST2GgwTq8Dgx81/CDY52HnWGw==\n=h2rm\n-----END PGP PUBLIC KEY BLOCK-----\n",
    profile: Profile {
      account: '0xC785989454C958eF0fD343e3E6DcCDf9893a5b02',
      decryptedPgpPvtKey: '-----BEGIN PGP PRIVATE KEY BLOCK-----\n\nxcLYBGQRtHI…nYedYb\n=o4+2\n-----END PGP PRIVATE KEY BLOCK-----\n',
      env: 'prod',
      progressHook: undefined
    },
    progressHook: undefined,
    signer: JsonRpcSigner {
      _isSigner: true,
      provider: Web3Provider,
      _index: 0,
      _address: null
    },
    user: User {
      account: '0xC785989454C958eF0fD343e3E6DcCDf9893a5b02',
      env: 'prod'
    },
  }
}

Initialize user interface

/**
 * Initialization Parameters for PushAPI
 */

/**
 * Specifies the type of signer.
 * Choose between Ethers or Viem Signer.
 */
type Signer = SignerType;

interface PushAPIInitializeProps {
  /**
   * Sets the API environment.
   * Options: 'prod', 'staging', 'dev'
   * Default: 'staging'
   */
  env?: ENV;

  /**
   * A callback function to receive updates during the initialization process.
   */
  progressHook?: (progress: ProgressHookType) => void;

  /**
   * The account you want to link with the PushAPI.
   * If left empty, it'll use the account associated with your signer.
   */
  account?: string;

  /**
   * Specifies the encryption version for the PushAPI.
   * Default: 'ENC_TYPE_V3'
   */
  version?: string;

  /**
   * Provides additional data related to your chosen encryption version,
   * like a necessary password.
   */
  versionMeta?: {
    NFTPGP_V1?: {
      password: string;
    };
  };

  /**
   * When set to true, the system will automatically upgrade encryption keys
   * to the latest available encryption version.
   * Default: true
   */
  autoUpgrade?: boolean;

  /**
   * Defines the origin or source when setting up a Push Profile.
   */
  origin?: string;
}

/**
 * Initializes the PushAPI with given parameters.
 *
 * @param signer The type of signer (Ethers or Viem Signer).
 * @param options Optional configurations for initializing the PushAPI.
 */
function initializePushAPI(signer: Signer, options?: PushAPIInitializeProps) {
  // Initialization logic here
}

Reinitialize user API

// Reinitialize PushAPI for fresh start of NFT Account
// Reinitialize only succeeds if the signer account is the owner of the NFT
// PushAPI.reinitialize{options?});
await userAlice.reinitialize({
  versionMeta: { NFTPGP_V1: { password: 'NewPassword' } },
});

The function resets the Push NFT user profile including all connections and communication. It's important to note that this method is not applicable to standard wallet addresses.

This is particularly useful during instances of NFT transfers where the NFT user password is not shared as it completely resets all communications, acting as a fresh start.

Important - If the NFT user password is shared, then do not to use this method, instead you should look at User encryption update API for managing user migration.

Reinitialize user parameters

Param Type Sub-Type Default Remarks
options PushAPIReinitializeProps - - Optional configuration properties for reinitializing the PushAPI NFT account.
- options.versionMeta { NFTPGP_V1 : password: string } - Metadata related to the nft encryption version, including a password need for encrypting NFT account

Note: Parameters in this style are mandatory.