Architecture Deep Dive
Back to App
The short version Your browser talks directly to Salesforce and directly to Google Drive. Our server is involved in exactly two places: exchanging an OAuth authorization code for a token, once per login, for each provider. It never sees a file, never sees a query result, and never stores a token. Your license key is checked the same way - entirely inside your browser, never phoned home to any server we run. There is no database anywhere in this product, and no user accounts - just your browser, Salesforce, and Google Drive.

1. The overall flow

Files & queries, direct browser to provider File bytes never touch our servers OAuth login only (2x - once per provider) Salesforce Files & queries Your Browser Tokens live here only Google Drive Upload destination A private tag on every file uploaded -> instant skip/resume on the next run Satrang Server Code-for-token swap only

Steps 3 through 6 repeat for every file in your migration. Our server is not in this loop at all - it did its only job in the OAuth handshakes above, and is not contacted again for the rest of the run.

2. The two OAuth handshakes

Both Salesforce and Google use the same shape of OAuth 2.0 Authorization Code flow with PKCE. For each one:

  1. Your browser redirects to the provider's own login page (Salesforce) or opens the provider's own consent popup (Google). We never see your password for either.
  2. After you approve access, the provider sends a one-time authorization code back to a small server-side script - one for each provider.
  3. That script exchanges the code for an access token, using a client secret that never leaves the server, then hands the token straight to your browser and forwards nothing else. It does not write the token to a database, a file, or a log.
  4. From that point on, the token lives only in your browser tab's JavaScript memory. Closing the tab destroys it.

When a token expires, a matching small refresh script repeats just the token-renewal half of this exchange - still no storage, still nothing but a token in, a token out.

3. Why a server is involved at all

Browsers cannot keep an OAuth client secret confidential - anything shipped to the browser is visible to the user. Both Salesforce's and Google's Connected App / OAuth Client configurations require that secret for the code-for-token exchange, so that one step has to happen server-side. Everything else - listing files, downloading file content, uploading to Drive, tagging files - uses only the access token, which the browser already holds, and talks to Salesforce's and Google's APIs directly.

4. How resume and duplicate detection work, without a database

MigrateStream needs to know, on a second run, which files it already migrated, without ever storing that information on a server. It solves this entirely inside Google Drive itself:

  • Every file MigrateStream uploads gets tagged with a small piece of private metadata Google Drive stores per file, identifying exactly which Salesforce file this is and which version of it was migrated.
  • At the start of a run, MigrateStream asks Google Drive directly for every file in the destination folder already tagged this way - that list, read fresh from your own Drive every time, is the entire "already migrated" record. Nothing about it is cached anywhere we control.
  • A small local cache in your browser speeds up re-opening an interrupted run, but it is never authoritative - if it is missing, stale, or you switch machines, MigrateStream simply re-asks Drive and gets the same correct answer, just slightly slower.

One deliberate consequence of this design: if a file's content changes in Salesforce after it was already migrated, re-running the migration does not detect or re-pull that change. Matching is based on the file's identity, not a comparison of content - MigrateStream moves files once, correctly; it does not keep two systems continuously in sync.

5. How the license key is verified, without a server round trip

A MigrateStream license key is a small, signed piece of data - not a login, and not an account. It is issued offline by Satrang, with no live connection involved at the time of issuance, and contains your customer name, which Salesforce org(s)/Google account(s) it covers, a data cap, and an expiry date.

  • The key carries a cryptographic signature your browser can verify but never forge - only Satrang holds the means to create a valid one.
  • Checking a license key is entirely a client-side computation - no network request happens to verify it, because there is nothing to phone home to.
  • Once verified, the key is kept in your browser's own local storage so you do not have to re-enter it on every visit, but it is fully re-verified on every single load, not just trusted from a flag.
  • If your license covers specific Salesforce orgs and/or Google accounts, that check happens the same way, client-side, right after each connects.

Usage against your license's data cap follows the same zero-server-state principle as resume/duplicate detection above: it is measured from the migration records already sitting in your own Google Drive and your own browser, never from anything on our side, because there is nothing on our side to read it from - Satrang keeps no account for you and no ledger about you. What that measurement COVERS depends on the licence: those issued from August 2026 onward are scoped to their own sale and count only the files migrated under them, while earlier ones count everything ever migrated into that Google account, under any key. See the Set Up MigrateStream guide's license section for what that means in practice for your day-to-day usage display.

6. What we do and do not store

ItemStored on our servers?
Your Salesforce or Google passwordNever seen at all
Your Salesforce or Google access/refresh tokenNo
File content (during download or upload)No - passes through your browser's memory only
File names, sizes, or metadataNo
Your migration report (CSV)No - built and downloaded entirely in your browser
Your license key or usage against its data capNo - key lives in your browser's local storage only; usage is read from your own Google Drive, never reported to us
User accounts, usage analytics, trackingNone exist

Our server runs a handful of small PHP scripts (the OAuth handshakes above, plus a config script). None of them write to a database, because there is no database. Standard web server access logs (IP address, timestamp, HTTP status) may exist as they do for any web server, but contain no token, query, or file data.

7. Single Salesforce org, single Google account, per session

MigrateStream connects one Salesforce org and one Google account at a time. There is no multi-org tab system and nothing to isolate between sessions, since each browser tab already only ever holds one of each token, in memory, for its own lifetime.