Synq Docs
Changelog

SDK changelog

What changed in each version of the @synqauth/* packages.

Every @synqauth/* package moves to the same version together. Each version's changes, as the packages' own changelogs record them.

@synqauth/js

0.2.0

Minor Changes

  • 6b4387a: authorizationUrl and signIn take acr: { values, essential }: the sign-in level the app needs, such as urn:synq:loa:2 for a passkey sign-in. Without essential it is a request (acr_values); with it, the claims parameter insists, a sign-in below it fails with unmet_authentication_requirements, and handleCallback checks the ID token's acr too.

  • 287bcc5: Sign people in on your app's own screens. client.startSignIn() starts a flow whose methods each take one step and resolve to what to show next: password.signIn and signUp, email.send, verify and resend, passkey.options and signIn, and verifyEmail.verify, resend and skip. Each resolves to signed-in, code-sent, verify-email, passkey, retry (with a problem from CHALLENGE_PROBLEMS), refused, or hosted, whose continue() goes on at the hosted page. toJSON() and client.resumeSignIn() keep a flow between app launches. A session signed in this way says via: 'app', and signOut() ends it by revoking its refresh token. On a server, createOwnUiSignIn from @synqauth/js/server does the same with the app's secret or key, sends the person's address as Synq-End-User-IP, and resolves to tokens. SynqError gains invalid_session, redirect_to_web and too_many_requests.

  • 17ee1a9: Sign people in on your app's own screens.

    • @synqauth/nextjs: the route mount answers POST <base>/sign-in/flow. The page posts each step as JSON; the server takes it to Synq as the app and answers only what to show next, never a token, a code or Synq's auth session. The flow stays sealed in a cookie, and a finished sign-in starts the session as the callback does. clientAddress(request) tells Synq where the person is (x-real-ip by default); without it, Synq's per-address limits are off for the app.
    • @synqauth/react: useSignIn() runs a sign-in through that route, and <SignInForm> is it worked through: a passkey where the browser takes the issuer's on the app's page (Chrome and Edge 128+, Safari 18+, Firefox 152+), offered in the address field too, then an emailed code or a password, a sign-up screen, and the new address's code; "Forgot your password?" goes to the hosted page, where resetting lives. Anything only the hosted page can do goes there. Its parts (PasskeyButton, PasswordForm, EmailCodeForm, VerifyEmailForm, OneTimeCodeInput) lay a page out the app's own way over one useSignIn(). Its words are new SynqMessages (signInProblems, signInRefusals, and the labels).
    • @synqauth/react-native: useSignIn() signs in from the device itself, with an emailed code or a password; passkeys, and anything else only the hosted page can do, go on in the system browser (continueInBrowser()).
    • @synqauth/plugin-passkey: signIn() asks for the passkey on the app's own page where it can, and otherwise answers the hosted page's passkey step to go to.
    • @synqauth/js: startSignIn and resumeSignIn take endUserIp, sent as Synq-End-User-IP, and startSignIn takes additionalResources.
  • d07554d: Users' API keys for the brand's own APIs. @synqauth/js: the account client's apiKeys (apis, list, create, revoke), and on @synqauth/js/server, createApiKeyVerifier, which checks a key at the brand's issuer as the API's own app and answers its claims (sub, scopes, keyId…), and isApiKey, which tells a key from an access token. @synqauth/react: useApiKeys, useKeyableApis and useAuth().apiKeys, and an "API keys" section in <AccountManager>, which shows where one of the brand's APIs takes keys: make a key (shown once, with a copy button), list and revoke them.

Patch Changes

  • 5d43ddd: The account API's and the management API's types include an identity's handle: the person's username at X, Discord, Telegram or Matrica, without the @, or null. AccountManager shows it as @handle under "Ways to sign in" in place of the provider's id for the person.
  • 2641ab8: The management API's types describe an app's warning passkey_origin_beyond_related_origins_limit: an app that signs people in on its own screens has an origin past the first 5 sites of the brand's passkey list, so passkeys from there go through the hosted page.
  • 26ec5d5: The management API's types include an app's own_ui_sign_in, which lets one of the brand's own web or native apps sign people in on its own screens.
  • ad1a7ef: The account API's and the management API's types say where each session was signed in, via: hosted for the brand's hosted page, app for an app's own screens.
  • 4a4dca6: The management API's types say a token gate dry run can answer 403 plan_feature_unavailable when the org's plan has no token gating.
  • f147c6d: The account API's types include users' API keys for their brand's APIs: GET /v1/apis, and GET, POST and DELETE /v1/api-keys. The management API's types include an API's allow_user_api_keys, a user's API keys, listed and revoked, the audit action and webhook event types user.api_key_created and user.api_key_revoked, and the error codes api_keys_not_allowed and api_key_limit_reached.

0.1.1

Patch Changes

  • e2da42d: The management API's audit action and webhook event types include brand.app_registrations_full: a brand's issuer is refusing apps that register themselves because it holds as many as it keeps.

0.1.0

Minor Changes

  • 3a6c109: A brand's logo and background are uploaded straight to Synq's storage: the management types carry POST /v1/orgs/{org}/brands/{brand}/files, its signed upload, …/files/{file}/finalize and GET …/files/{file}, and the error codes upload_incomplete, upload_expired, file_rejected and upload_limit_reached. PUT …/logo and PUT …/theme/background, which took the image as the body, are gone.

  • 5380ac4: A SynqError carries retryAfter: the seconds Synq's Retry-After asks to wait, set on rate_limited (429) answers from the management and account APIs.

  • 09ff36c: The management types follow the API's 1.57.0: POST /v1/orgs/{org}/token-gates/check tests a token gate or a draft rule against wallets or a user, answering the verdict tree (TokenGateDryRun), the reads it cost and the refusal page's words.

  • 09ff36c: The management types follow the API's 1.58.0: a token gate's collection condition carries collection_kind (core, token_metadata or token_group), and may name a Token-2022 group.

  • 09ff36c: The management types follow the API's 1.56.0: a token gate holds a rule (all and any groups of token, collection, nft and allowlist conditions, each on its chain) in place of mint, min_amount, chain and cluster, with an optional schedule, a refusal_message and a one-line summary; the gate list carries the chains the API reads.

  • 09ff36c: The management types follow the API's 1.59.0: a token gate's rule in an answer is TokenGateShownRule, whose chain, wallets and collection_kind are strings whose values may grow (x-extensible-enum), and a dry run of a draft answers 503 when its tokens and NFTs can't be read.

  • 74bc862: Add the account client: createAccountClient calls the brand's account API for the signed-in person (me(), user.update(), wallets, accounts with link(), sessions, passkeys, consents, activity() and deletion), answering every call as { data, error } without throwing, with an Idempotency-Key on every change. accountApiUrl(issuer) is the resource its tokens are for, and linkSignIn(request) turns a link request into the sign-in that finishes it.

  • 24f17fc: authorizationUrl({ additionalResources }): one sign-in can cover several of the brand's APIs; the code is exchanged for the client's own resource, and a refresh with another resource gets that API's token.

    signOut() tries revoking the refresh token twice and logs a failure: an offline grant outlives the brand's session, so an unrevoked refresh token stays usable until it expires.

  • dd1b1b0: Breaking, in the management API's types: OrgProviderApp.redirect_uri and the org-level PUT …/sign-in-providers/{provider}/app answer's redirect_uri are replaced by redirect_uris, one per live brand of the org, since an app a tenant brings now comes back to each brand's own issuer host (management API 1.38.0, a one-time breaking change on /v1). The org-level PUT's answer (OrgWideProviderApp) is never null. A brand's own app (ProviderApp) and each of its sign-in providers name the brand's own redirect_uri, and the answer that makes a brand (BrandCreated) carries warnings, which name the callback each of the org's own apps must add.

  • 7fcb1b5: The management API's types gain a brand's email settings, GET and PATCH /v1/orgs/{org}/brands/{brand}/email with its reply-to address and what the next email carries, sending the reply-to confirmation again, and the audit log's and webhooks' brand.reply_to_confirmed (management contract 1.51.0).

  • a967f46: The management API's types gain a brand's sender, sender on GET and PATCH /v1/orgs/{org}/brands/{brand}/email (one of the org's sending domains, the part before the @ and the name), POST …/email/test, a sending domain's used_by, and the email_domain_in_use problem (management contract 1.53.0).

  • 7e67619: The management API's types include change requests: an app's redirect URIs, asked for from an MCP host and approved in the dashboard.

  • 57e05dd: The management API's types name the plan feature branding.custom_domain, a brand's sign-in on a domain its tenant owns (coming), and the audit log's and webhooks' brand.custom_domain_added, _verified, _activated, _failed, _suspended, _restored and _removed (management contract 1.64.0).

  • 0aa9caf: The management API's types gain a brand's custom domain, GET, POST and DELETE /v1/orgs/{org}/brands/{brand}/custom-domain and POST …/custom-domain/verify, on plans with branding.custom_domain, a brand's custom_domain_issuer, and the problems custom_domain_exists, hostname_taken, invalid_hostname, apex_not_supported, reserved_hostname, hostname_denied and hostname_not_allowed_here (management contract 1.65.0).

  • d13ab04: The management client's types describe redirect URIs as the API now takes them: a web app or SPA may also register https on localhost, 127.0.0.1 or [::1], matched exactly with its port, for a dev server on a laptop. An app gains warnings, such as loopback_redirect_uris when a deployed app still has such URIs (management contract 1.32.0).

  • a8ad19c: The management API's types gain an org's disabled_at and disabled_reason, and the audit log's and webhooks' org.disabled and org.enabled (management contract 1.37.0).

  • 3976630: The management API's types gain a web app's refresh_token_reuse_window_seconds, and the audit log's and webhooks' app.refresh_token_replayed (management contract 1.33.0).

  • e9f5bb4: The management API's types gain the audit log's and webhooks' email_domain.verified and email_domain.failed, as Synq verifies and watches sending domains (management contract 1.54.0).

  • 5a1ad56: The management API's types gain an org's sending domains, /v1/orgs/{org}/email-domains, on plans with branding.custom_email_domain, with the org.emailDomains.view and .edit permissions, the email_domain_* problems and the audit log's email_domain.created and email_domain.deleted (management contract 1.52.0). A plan's features, a theme preview's needs and the caller's permissions are now open lists (x-extensible-enum), typed as strings, since each grows; a problem may carry reason.

  • 0173fa0: @synqauth/js/server: createAccessTokenVerifier checks the access tokens Synq issues for your API (issuer, audience, at+jwt, ES256, and, per route, scopes, the app that asked and how recent the sign-in is), with the issuer's keys fetched once and again when a new one signs; verifyWebhook checks Synq's Standard Webhooks signatures, with both secrets during a rotation; and createManagementClient calls the management API with an org API key, typed by its contract.

  • eb09a53: createSynqClient: sign people in with the authorization code flow (PKCE S256, state, nonce and the iss check), keep the session in memory or any store you give it (refresh tokens never in the browser's storage; a store shared by several clients gives them a lock), keep each sign-in's transaction where every tab sees it, so a magic link opened in a new tab finishes it, refresh with one request however many callers ask at once, recover a reloaded page with restoreSession(), hear every change with subscribe(), and sign out with RP-initiated logout. Every error is a SynqError with a stable code.

  • be077e0: The management API's brands carry show_last_used, whether the sign-in page marks the way a browser last signed in at the brand ("Last used").

  • ea9a6ae: The management API's sign-in providers include apple. A tenant's own Apple app is its Services ID as client_id, with team_id, key_id and the .p8 private_key in place of client_secret: Synq signs each client secret it sends Apple, and never returns the key. A provider's name in an answer is now typed as a string, since the list grows: handle one you don't know.

  • 3e4f730: The management and account API types name matrica among the sign-in providers and identities.

  • bbc521a: The management and account API types name telegram among the sign-in providers and identities.

  • 50fc801: The management API's sign-in providers include facebook and x, each with a client id and secret like Google's.

  • c1ea974: @synqauth/solana: sign in with a Solana wallet from the brand's own app's page, on the Wallet Standard alone. getSolanaWallets and watchSolanaWallets (and useSolanaWallets from @synqauth/solana/react) find the browser's wallets; signInWithWallet asks the issuer for the Sign In With Solana request, has the wallet sign it (solana:signIn, else solana:signMessage), and sends the signature in a pushed authorization request, so the browser passes through the issuer with no page. A declined signature is the error wallet_rejected. @synqauth/js: authorizationUrl({ pushed: true }) sends the request's parameters to the issuer as a pushed authorization request (RFC 9126), and answers a URL carrying only its reference.

  • ff21113: The management client's types describe token gates (management contract 1.34.0): an org's gates on its brands and apps, GET, POST, PATCH and DELETE under /v1/orgs/{org}/token-gates, each a mint, a minimum in whole tokens and whether it is on, with the cluster its mint is read on. Gates are checked at every sign-in and on every refresh. The error codes gain token_gates_unavailable, and the audit log's and webhooks' actions gain token_gate.created, token_gate.updated, token_gate.deleted and user.token_gate_checked.

  • ecb013c: Types for the management API and the account API, generated from their OpenAPI documents, and SynqErrorCode, every error code a Synq API answers with.

  • 65545d9: The management API's types gain the audit log's and webhooks' user.looked_up, when Synq's staff looked a brand's users up, with their reason (management contract 1.38.0).

Patch Changes

  • 091cd48: The management types carry an app's initiate_login_uri, where the brand's signed-out page sends someone to sign in again.
  • e7f3276: The management API's types describe link_by_email as it now works: Google vouches for Gmail and for a Workspace account's address on its own domain, Apple for its own mailboxes, and Microsoft only with its xms_edov claim.
  • 6fd1503: The management types follow the API's 1.66.1: a person's access token for the management API comes from Synq's own issuer, the synq brand, where the docs used to say a console brand.
  • dd9d81a: The management types carry a brand theme's glow_color and the source-sans font, which Synq serves from the brand's own issuer host.
  • 09ff36c: The management types follow the API's 1.58.1: writing a token gate reads what its rule names from the org's own reads (token_gate.org_reads), and answers 429 once they're spent.
  • cbc84b3: The package's repository link points at github.com/aerosol-build/synq, the GitHub organization's new name.
  • 5f4239e: The account API's types know each session's current, true for the session the calling token came from. Its POST and PATCH routes honour an Idempotency-Key.
  • d80dde9: The management client's types cover billing through Stripe: starting checkout, changing a paying org's plan, opening the billing portal, and listing invoices, with their new error codes.
  • 390783d: The management API's types now include a brand's hosted-page theme: reading and changing it, previewing it, and its background image.
  • 48d763c: The management API's types now include GET /v1/orgs/{org}/permissions, what the caller may do in an org.
  • e19e50e: The management API's types describe custom domains as they now hold their hostnames: only once their DNS proves them, with the problem code hostname_taken when another brand proved the name first (management contract 1.66.0).
  • c84a377: The management API's types describe a brand deleted in the last 30 days as still counting against the org's plan, in making a brand and in the billing usage.
  • 2e4b64b: The account API's types now include POST /v1/link-requests, which starts adding a way to sign in: it was served but missing from the account contract. The passkey and link request routes also document their 503 where an issuer hasn't set them up, and the answer's method is an extensible list.
  • 14d1ef9: The management API's types describe a native app's redirect URIs as taking a scheme of its own, a reverse domain name such as com.example.app:/callback (RFC 8252), as well as a claimed https link or http on a loopback address.
  • 10474b5: The management API's types now let a brand's primary_color and background_color, and its theme's surface_color, be set to null to unset them, as the API always allowed.
  • 676693b: The management API's types know the plan catalog (GET /v1/plans), each org's plan, and the plan_quota_exceeded and plan_feature_unavailable problems, which name the plan that allows what was refused.
  • f998a64: @synqauth/react-native: createSynqNative signs people in through the system browser (expo-web-browser, never an embedded web view) with PKCE and a callback on an https link the app claims, and keeps the session, refresh token included, in the device's secure storage (expo-secure-store, split across items when large). SynqNativeProvider with useSession, useUser and useAuth follows the device's session; useUser().account is the brand's account API when the session's token is for it. @synqauth/js gains the error code cancelled, for a sign-in the person closed.
  • 23aaf06: The management API's types say that a brand's reply-to on a sending domain the org verified is confirmed at once, and that it is a plain ASCII address (management contract 1.54.1).
  • 9cb7e83: Every public export now has a doc comment, which the docs' SDK reference is generated from.
  • 6d38d7e: The management API's types know GET /v1/orgs/{org}/billing/usage: an org's monthly active users against its plan's allowance, and its apps and brands against the plan's limits.
  • 0ce11bf: The management API types document that a webhook subscription receives only events recorded after it exists and while it is on (management API 1.31.0).

@synqauth/nextjs

0.2.0

Minor Changes

  • 17ee1a9: Sign people in on your app's own screens.

    • @synqauth/nextjs: the route mount answers POST <base>/sign-in/flow. The page posts each step as JSON; the server takes it to Synq as the app and answers only what to show next, never a token, a code or Synq's auth session. The flow stays sealed in a cookie, and a finished sign-in starts the session as the callback does. clientAddress(request) tells Synq where the person is (x-real-ip by default); without it, Synq's per-address limits are off for the app.
    • @synqauth/react: useSignIn() runs a sign-in through that route, and <SignInForm> is it worked through: a passkey where the browser takes the issuer's on the app's page (Chrome and Edge 128+, Safari 18+, Firefox 152+), offered in the address field too, then an emailed code or a password, a sign-up screen, and the new address's code; "Forgot your password?" goes to the hosted page, where resetting lives. Anything only the hosted page can do goes there. Its parts (PasskeyButton, PasswordForm, EmailCodeForm, VerifyEmailForm, OneTimeCodeInput) lay a page out the app's own way over one useSignIn(). Its words are new SynqMessages (signInProblems, signInRefusals, and the labels).
    • @synqauth/react-native: useSignIn() signs in from the device itself, with an emailed code or a password; passkeys, and anything else only the hosted page can do, go on in the system browser (continueInBrowser()).
    • @synqauth/plugin-passkey: signIn() asks for the passkey on the app's own page where it can, and otherwise answers the hosted page's passkey step to go to.
    • @synqauth/js: startSignIn and resumeSignIn take endUserIp, sent as Synq-End-User-IP, and startSignIn takes additionalResources.

Patch Changes

  • Updated dependencies [5d43ddd]
  • Updated dependencies [6b4387a]
  • Updated dependencies [2641ab8]
  • Updated dependencies [287bcc5]
  • Updated dependencies [26ec5d5]
  • Updated dependencies [ad1a7ef]
  • Updated dependencies [4a4dca6]
  • Updated dependencies [f147c6d]
  • Updated dependencies [17ee1a9]
  • Updated dependencies [d07554d]
    • @synqauth/js@0.2.0

0.1.1

Patch Changes

  • Updated dependencies [e2da42d]
    • @synqauth/js@0.1.1

0.1.0

Minor Changes

  • 1981489: The proxy no longer sends a page that came back with synq_error to sign in again, which could loop on a refusal or a failing callback: it shows why, with "Try again" and "Use another account", on a plain page of its own or the app's signInError page, and synqAuth().signInError() reads it for that page.

  • 9c84cb7: Adding a way to sign in from an app. @synqauth/nextjs's route mount takes POST <base>/link with { method, returnTo } from the app's own pages: it asks the brand's account API for a link request with the session's token, and answers { redirect }, a sign-in that carries the request's ticket, so Synq asks the person to sign in again and then adds the method. The account API's refusals (sign_in_method_unavailable, identity_limit_reached) come back as they are. GET <base>/sign-in?intent=link, which had no ticket to carry, is gone. @synqauth/react's useAuth().link(method, { returnTo }) calls it and follows the redirect.

    @synqauth/nextjs no longer signs someone out when they sign in again within their session at Synq, as adding a passkey or a way to sign in asks: Synq gives that sign-in the grant they already had, and revoking the replaced session's refresh token ended it, the new session's tokens with it. The replaced session's refresh token is still revoked when the two ID tokens name different people, or different sessions at Synq by their sid (which Synq sends to apps with a back-channel logout URI).

  • 24f17fc: synqAuth() and synqProxy(), sharing one defineSynqConfig(): Synq for a Next.js app as a backend-for-frontend, so the browser never holds a Synq token. One route mount (app/api/auth/[...synq]/route.ts) signs people in and out (RP-initiated logout), tells the browser who is signed in, and calls the brand's account API for it; the tokens stay on the app's server in a sealed __Host- HttpOnly cookie, or a store you give it (keyValueSessionStore for Redis or Valkey, which several server processes share), and each session refreshes one request at a time. synq.me() reads the signed-in person once per request, getAccessToken() gives the app's server a token for its API, @synqauth/nextjs/proxy refreshes a session before a page renders and sends anyone without one to sign in from Next 16's proxy.ts, on any runtime, and defineSynqPlugin / defineSynqClientPlugin let other packages add routes under the mount.

  • 2586fb9: @synqauth/plugin-siws: Sign In With Solana from the app's own UI. siwsPlugin() (the browser half) asks the issuer for the request, has the wallet sign it, and hands the signature to the route mount, which pushes it to Synq; the browser passes through the issuer with no page. siwsServerPlugin() from @synqauth/plugin-siws/server tells the page which issuer and app to ask. @synqauth/nextjs's route mount takes POST <base>/sign-in with { siws, returnTo } for it, from the app's own pages.

Patch Changes

  • d55bf3f: The proxy now sends people to sign in on your app's own origin (SYNQ_APP_URL), not on the address your server saw. A self-hosted Next.js server, behind a load balancer or an ingress, sees its own listener in request.url (http://0.0.0.0:3000). The proxy used to redirect browsers there.
  • 3009f33: The sign-in route answers a prefetch (Next.js's next/link, or a browser's speculative load) with 204 and starts no sign-in: no transaction cookie is set, so prefetches never push out the sign-in a click starts. A next/link to /api/auth/sign-in is safe; a plain <a> still saves the wasted request.
  • 2e4b64b: The route mount reads a link request's answer by the account contract's own LinkRequest type.
  • cbc84b3: The package's repository link points at github.com/aerosol-build/synq, the GitHub organization's new name.
  • 722b80e: A sign-in that replaces a session now tells a new grant from the old one by the ID tokens' sid for every app, since Synq includes it in every app's ID tokens: when they differ, the replaced session's refresh token is revoked rather than left to expire.
  • 9cb7e83: Every public export now has a doc comment, which the docs' SDK reference is generated from.
  • Updated dependencies [3a6c109]
  • Updated dependencies [091cd48]
  • Updated dependencies [e7f3276]
  • Updated dependencies [5380ac4]
  • Updated dependencies [6fd1503]
  • Updated dependencies [dd9d81a]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [cbc84b3]
  • Updated dependencies [74bc862]
  • Updated dependencies [5f4239e]
  • Updated dependencies [24f17fc]
  • Updated dependencies [d80dde9]
  • Updated dependencies [dd1b1b0]
  • Updated dependencies [7fcb1b5]
  • Updated dependencies [a967f46]
  • Updated dependencies [390783d]
  • Updated dependencies [48d763c]
  • Updated dependencies [7e67619]
  • Updated dependencies [57e05dd]
  • Updated dependencies [e19e50e]
  • Updated dependencies [0aa9caf]
  • Updated dependencies [c84a377]
  • Updated dependencies [d13ab04]
  • Updated dependencies [2e4b64b]
  • Updated dependencies [14d1ef9]
  • Updated dependencies [10474b5]
  • Updated dependencies [a8ad19c]
  • Updated dependencies [676693b]
  • Updated dependencies [f998a64]
  • Updated dependencies [3976630]
  • Updated dependencies [23aaf06]
  • Updated dependencies [e9f5bb4]
  • Updated dependencies [5a1ad56]
  • Updated dependencies [0173fa0]
  • Updated dependencies [eb09a53]
  • Updated dependencies [be077e0]
  • Updated dependencies [ea9a6ae]
  • Updated dependencies [3e4f730]
  • Updated dependencies [bbc521a]
  • Updated dependencies [50fc801]
  • Updated dependencies [c1ea974]
  • Updated dependencies [ff21113]
  • Updated dependencies [9cb7e83]
  • Updated dependencies [ecb013c]
  • Updated dependencies [6d38d7e]
  • Updated dependencies [65545d9]
  • Updated dependencies [0ce11bf]
    • @synqauth/js@0.1.0

@synqauth/react

0.2.0

Minor Changes

  • 17ee1a9: Sign people in on your app's own screens.

    • @synqauth/nextjs: the route mount answers POST <base>/sign-in/flow. The page posts each step as JSON; the server takes it to Synq as the app and answers only what to show next, never a token, a code or Synq's auth session. The flow stays sealed in a cookie, and a finished sign-in starts the session as the callback does. clientAddress(request) tells Synq where the person is (x-real-ip by default); without it, Synq's per-address limits are off for the app.
    • @synqauth/react: useSignIn() runs a sign-in through that route, and <SignInForm> is it worked through: a passkey where the browser takes the issuer's on the app's page (Chrome and Edge 128+, Safari 18+, Firefox 152+), offered in the address field too, then an emailed code or a password, a sign-up screen, and the new address's code; "Forgot your password?" goes to the hosted page, where resetting lives. Anything only the hosted page can do goes there. Its parts (PasskeyButton, PasswordForm, EmailCodeForm, VerifyEmailForm, OneTimeCodeInput) lay a page out the app's own way over one useSignIn(). Its words are new SynqMessages (signInProblems, signInRefusals, and the labels).
    • @synqauth/react-native: useSignIn() signs in from the device itself, with an emailed code or a password; passkeys, and anything else only the hosted page can do, go on in the system browser (continueInBrowser()).
    • @synqauth/plugin-passkey: signIn() asks for the passkey on the app's own page where it can, and otherwise answers the hosted page's passkey step to go to.
    • @synqauth/js: startSignIn and resumeSignIn take endUserIp, sent as Synq-End-User-IP, and startSignIn takes additionalResources.
  • d07554d: Users' API keys for the brand's own APIs. @synqauth/js: the account client's apiKeys (apis, list, create, revoke), and on @synqauth/js/server, createApiKeyVerifier, which checks a key at the brand's issuer as the API's own app and answers its claims (sub, scopes, keyId…), and isApiKey, which tells a key from an access token. @synqauth/react: useApiKeys, useKeyableApis and useAuth().apiKeys, and an "API keys" section in <AccountManager>, which shows where one of the brand's APIs takes keys: make a key (shown once, with a copy button), list and revoke them.

Patch Changes

  • 5d43ddd: The account API's and the management API's types include an identity's handle: the person's username at X, Discord, Telegram or Matrica, without the @, or null. AccountManager shows it as @handle under "Ways to sign in" in place of the provider's id for the person.
  • Updated dependencies [5d43ddd]
  • Updated dependencies [6b4387a]
  • Updated dependencies [2641ab8]
  • Updated dependencies [287bcc5]
  • Updated dependencies [26ec5d5]
  • Updated dependencies [ad1a7ef]
  • Updated dependencies [4a4dca6]
  • Updated dependencies [f147c6d]
  • Updated dependencies [17ee1a9]
  • Updated dependencies [d07554d]
    • @synqauth/js@0.2.0

0.1.1

Patch Changes

  • Updated dependencies [e2da42d]
    • @synqauth/js@0.1.1

0.1.0

Minor Changes

  • 9c84cb7: Adding a way to sign in from an app. @synqauth/nextjs's route mount takes POST <base>/link with { method, returnTo } from the app's own pages: it asks the brand's account API for a link request with the session's token, and answers { redirect }, a sign-in that carries the request's ticket, so Synq asks the person to sign in again and then adds the method. The account API's refusals (sign_in_method_unavailable, identity_limit_reached) come back as they are. GET <base>/sign-in?intent=link, which had no ticket to carry, is gone. @synqauth/react's useAuth().link(method, { returnTo }) calls it and follows the redirect.

    @synqauth/nextjs no longer signs someone out when they sign in again within their session at Synq, as adding a passkey or a way to sign in asks: Synq gives that sign-in the grant they already had, and revoking the replaced session's refresh token ended it, the new session's tokens with it. The replaced session's refresh token is still revoked when the two ID tokens name different people, or different sessions at Synq by their sid (which Synq sends to apps with a back-channel logout URI).

  • c954204: @synqauth/react: SynqProvider seeded from the server (initialSession), useSession(), useUser() (claims at once, then the profile and UserMetadata, which an app augments to type), and useAuth() with wallets, accounts and sessions over the brand's account API through the app's route mount, so the browser never holds a token. Every call answers { data, error }; each change carries an idempotency key its component mints, and a change asked again while under way (a double click) sends once. SignInMethod is a typed union a brand's own connections extend. <SignInButton>, <UserButton>, <SignedIn>, <SignedOut>, <AccountManager> and <WalletManager> render styled by CSS variables (@synqauth/react/styles.css) or unstyled, in the app's words through <SynqProvider messages>.

Patch Changes

  • cbc84b3: The package's repository link points at github.com/aerosol-build/synq, the GitHub organization's new name.
  • 5f4239e: <AccountManager> marks the session the page is signed in with as "This device" (messages.thisDevice), from the account API's current.
  • 9cb7e83: Every public export now has a doc comment, which the docs' SDK reference is generated from.
  • Updated dependencies [3a6c109]
  • Updated dependencies [091cd48]
  • Updated dependencies [e7f3276]
  • Updated dependencies [5380ac4]
  • Updated dependencies [6fd1503]
  • Updated dependencies [dd9d81a]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [cbc84b3]
  • Updated dependencies [74bc862]
  • Updated dependencies [5f4239e]
  • Updated dependencies [24f17fc]
  • Updated dependencies [d80dde9]
  • Updated dependencies [dd1b1b0]
  • Updated dependencies [7fcb1b5]
  • Updated dependencies [a967f46]
  • Updated dependencies [390783d]
  • Updated dependencies [48d763c]
  • Updated dependencies [7e67619]
  • Updated dependencies [57e05dd]
  • Updated dependencies [e19e50e]
  • Updated dependencies [0aa9caf]
  • Updated dependencies [c84a377]
  • Updated dependencies [d13ab04]
  • Updated dependencies [2e4b64b]
  • Updated dependencies [14d1ef9]
  • Updated dependencies [10474b5]
  • Updated dependencies [a8ad19c]
  • Updated dependencies [676693b]
  • Updated dependencies [f998a64]
  • Updated dependencies [3976630]
  • Updated dependencies [23aaf06]
  • Updated dependencies [e9f5bb4]
  • Updated dependencies [5a1ad56]
  • Updated dependencies [0173fa0]
  • Updated dependencies [eb09a53]
  • Updated dependencies [be077e0]
  • Updated dependencies [ea9a6ae]
  • Updated dependencies [3e4f730]
  • Updated dependencies [bbc521a]
  • Updated dependencies [50fc801]
  • Updated dependencies [c1ea974]
  • Updated dependencies [ff21113]
  • Updated dependencies [9cb7e83]
  • Updated dependencies [ecb013c]
  • Updated dependencies [6d38d7e]
  • Updated dependencies [65545d9]
  • Updated dependencies [0ce11bf]
    • @synqauth/js@0.1.0

@synqauth/react-native

0.2.0

Minor Changes

  • 17ee1a9: Sign people in on your app's own screens.

    • @synqauth/nextjs: the route mount answers POST <base>/sign-in/flow. The page posts each step as JSON; the server takes it to Synq as the app and answers only what to show next, never a token, a code or Synq's auth session. The flow stays sealed in a cookie, and a finished sign-in starts the session as the callback does. clientAddress(request) tells Synq where the person is (x-real-ip by default); without it, Synq's per-address limits are off for the app.
    • @synqauth/react: useSignIn() runs a sign-in through that route, and <SignInForm> is it worked through: a passkey where the browser takes the issuer's on the app's page (Chrome and Edge 128+, Safari 18+, Firefox 152+), offered in the address field too, then an emailed code or a password, a sign-up screen, and the new address's code; "Forgot your password?" goes to the hosted page, where resetting lives. Anything only the hosted page can do goes there. Its parts (PasskeyButton, PasswordForm, EmailCodeForm, VerifyEmailForm, OneTimeCodeInput) lay a page out the app's own way over one useSignIn(). Its words are new SynqMessages (signInProblems, signInRefusals, and the labels).
    • @synqauth/react-native: useSignIn() signs in from the device itself, with an emailed code or a password; passkeys, and anything else only the hosted page can do, go on in the system browser (continueInBrowser()).
    • @synqauth/plugin-passkey: signIn() asks for the passkey on the app's own page where it can, and otherwise answers the hosted page's passkey step to go to.
    • @synqauth/js: startSignIn and resumeSignIn take endUserIp, sent as Synq-End-User-IP, and startSignIn takes additionalResources.

Patch Changes

  • Updated dependencies [5d43ddd]
  • Updated dependencies [6b4387a]
  • Updated dependencies [2641ab8]
  • Updated dependencies [287bcc5]
  • Updated dependencies [26ec5d5]
  • Updated dependencies [ad1a7ef]
  • Updated dependencies [4a4dca6]
  • Updated dependencies [f147c6d]
  • Updated dependencies [17ee1a9]
  • Updated dependencies [d07554d]
    • @synqauth/js@0.2.0

0.1.1

Patch Changes

  • Updated dependencies [e2da42d]
    • @synqauth/js@0.1.1

0.1.0

Minor Changes

  • f998a64: @synqauth/react-native: createSynqNative signs people in through the system browser (expo-web-browser, never an embedded web view) with PKCE and a callback on an https link the app claims, and keeps the session, refresh token included, in the device's secure storage (expo-secure-store, split across items when large). SynqNativeProvider with useSession, useUser and useAuth follows the device's session; useUser().account is the brand's account API when the session's token is for it. @synqauth/js gains the error code cancelled, for a sign-in the person closed.

Patch Changes

  • cbc84b3: The package's repository link points at github.com/aerosol-build/synq, the GitHub organization's new name.
  • Updated dependencies [3a6c109]
  • Updated dependencies [091cd48]
  • Updated dependencies [e7f3276]
  • Updated dependencies [5380ac4]
  • Updated dependencies [6fd1503]
  • Updated dependencies [dd9d81a]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [cbc84b3]
  • Updated dependencies [74bc862]
  • Updated dependencies [5f4239e]
  • Updated dependencies [24f17fc]
  • Updated dependencies [d80dde9]
  • Updated dependencies [dd1b1b0]
  • Updated dependencies [7fcb1b5]
  • Updated dependencies [a967f46]
  • Updated dependencies [390783d]
  • Updated dependencies [48d763c]
  • Updated dependencies [7e67619]
  • Updated dependencies [57e05dd]
  • Updated dependencies [e19e50e]
  • Updated dependencies [0aa9caf]
  • Updated dependencies [c84a377]
  • Updated dependencies [d13ab04]
  • Updated dependencies [2e4b64b]
  • Updated dependencies [14d1ef9]
  • Updated dependencies [10474b5]
  • Updated dependencies [a8ad19c]
  • Updated dependencies [676693b]
  • Updated dependencies [f998a64]
  • Updated dependencies [3976630]
  • Updated dependencies [23aaf06]
  • Updated dependencies [e9f5bb4]
  • Updated dependencies [5a1ad56]
  • Updated dependencies [0173fa0]
  • Updated dependencies [eb09a53]
  • Updated dependencies [be077e0]
  • Updated dependencies [ea9a6ae]
  • Updated dependencies [3e4f730]
  • Updated dependencies [bbc521a]
  • Updated dependencies [50fc801]
  • Updated dependencies [c1ea974]
  • Updated dependencies [ff21113]
  • Updated dependencies [9cb7e83]
  • Updated dependencies [ecb013c]
  • Updated dependencies [6d38d7e]
  • Updated dependencies [65545d9]
  • Updated dependencies [0ce11bf]
    • @synqauth/js@0.1.0

@synqauth/solana

0.2.0

Patch Changes

  • Updated dependencies [5d43ddd]
  • Updated dependencies [6b4387a]
  • Updated dependencies [2641ab8]
  • Updated dependencies [287bcc5]
  • Updated dependencies [26ec5d5]
  • Updated dependencies [ad1a7ef]
  • Updated dependencies [4a4dca6]
  • Updated dependencies [f147c6d]
  • Updated dependencies [17ee1a9]
  • Updated dependencies [d07554d]
    • @synqauth/js@0.2.0

0.1.1

Patch Changes

  • Updated dependencies [e2da42d]
    • @synqauth/js@0.1.1

0.1.0

Minor Changes

  • c1ea974: @synqauth/solana: sign in with a Solana wallet from the brand's own app's page, on the Wallet Standard alone. getSolanaWallets and watchSolanaWallets (and useSolanaWallets from @synqauth/solana/react) find the browser's wallets; signInWithWallet asks the issuer for the Sign In With Solana request, has the wallet sign it (solana:signIn, else solana:signMessage), and sends the signature in a pushed authorization request, so the browser passes through the issuer with no page. A declined signature is the error wallet_rejected. @synqauth/js: authorizationUrl({ pushed: true }) sends the request's parameters to the issuer as a pushed authorization request (RFC 9126), and answers a URL carrying only its reference.

Patch Changes

  • cbc84b3: The package's repository link points at github.com/aerosol-build/synq, the GitHub organization's new name.
  • Updated dependencies [3a6c109]
  • Updated dependencies [091cd48]
  • Updated dependencies [e7f3276]
  • Updated dependencies [5380ac4]
  • Updated dependencies [6fd1503]
  • Updated dependencies [dd9d81a]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [cbc84b3]
  • Updated dependencies [74bc862]
  • Updated dependencies [5f4239e]
  • Updated dependencies [24f17fc]
  • Updated dependencies [d80dde9]
  • Updated dependencies [dd1b1b0]
  • Updated dependencies [7fcb1b5]
  • Updated dependencies [a967f46]
  • Updated dependencies [390783d]
  • Updated dependencies [48d763c]
  • Updated dependencies [7e67619]
  • Updated dependencies [57e05dd]
  • Updated dependencies [e19e50e]
  • Updated dependencies [0aa9caf]
  • Updated dependencies [c84a377]
  • Updated dependencies [d13ab04]
  • Updated dependencies [2e4b64b]
  • Updated dependencies [14d1ef9]
  • Updated dependencies [10474b5]
  • Updated dependencies [a8ad19c]
  • Updated dependencies [676693b]
  • Updated dependencies [f998a64]
  • Updated dependencies [3976630]
  • Updated dependencies [23aaf06]
  • Updated dependencies [e9f5bb4]
  • Updated dependencies [5a1ad56]
  • Updated dependencies [0173fa0]
  • Updated dependencies [eb09a53]
  • Updated dependencies [be077e0]
  • Updated dependencies [ea9a6ae]
  • Updated dependencies [3e4f730]
  • Updated dependencies [bbc521a]
  • Updated dependencies [50fc801]
  • Updated dependencies [c1ea974]
  • Updated dependencies [ff21113]
  • Updated dependencies [9cb7e83]
  • Updated dependencies [ecb013c]
  • Updated dependencies [6d38d7e]
  • Updated dependencies [65545d9]
  • Updated dependencies [0ce11bf]
    • @synqauth/js@0.1.0

@synqauth/solana-mobile

0.2.0

Patch Changes

  • Updated dependencies [5d43ddd]
  • Updated dependencies [6b4387a]
  • Updated dependencies [2641ab8]
  • Updated dependencies [287bcc5]
  • Updated dependencies [26ec5d5]
  • Updated dependencies [ad1a7ef]
  • Updated dependencies [4a4dca6]
  • Updated dependencies [f147c6d]
  • Updated dependencies [17ee1a9]
  • Updated dependencies [d07554d]
    • @synqauth/js@0.2.0
    • @synqauth/solana@0.2.0

0.1.1

Patch Changes

  • Updated dependencies [e2da42d]
    • @synqauth/js@0.1.1
    • @synqauth/solana@0.1.1

0.1.0

Minor Changes

  • 202a415: @synqauth/solana-mobile: Solana Mobile sign-in. mobileWalletSignInUrl (from /react-native) signs the issuer's request in the wallet app through Mobile Wallet Adapter's transact and pushes it to Synq; registerMobileWallet (from /web) registers Mobile Wallet Adapter as a Wallet Standard wallet in a mobile browser, for @synqauth/solana; siwsFromMwa (from /core) turns MWA's sign-in result into what Synq takes, checking the message the wallet signed is the issuer's.

Patch Changes

  • cbc84b3: The package's repository link points at github.com/aerosol-build/synq, the GitHub organization's new name.
  • 07a12c3: mobileWalletSignInUrl needs the app's https identity as appOrigin, the origin of a redirect URI it claims (an App Link or universal link), and refuses anything else with invalid_options before asking the issuer or the wallet. An app whose only redirect URI is a scheme of its own signs people in through the browser only.
  • Updated dependencies [3a6c109]
  • Updated dependencies [091cd48]
  • Updated dependencies [e7f3276]
  • Updated dependencies [5380ac4]
  • Updated dependencies [6fd1503]
  • Updated dependencies [dd9d81a]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [cbc84b3]
  • Updated dependencies [74bc862]
  • Updated dependencies [5f4239e]
  • Updated dependencies [24f17fc]
  • Updated dependencies [d80dde9]
  • Updated dependencies [dd1b1b0]
  • Updated dependencies [7fcb1b5]
  • Updated dependencies [a967f46]
  • Updated dependencies [390783d]
  • Updated dependencies [48d763c]
  • Updated dependencies [7e67619]
  • Updated dependencies [57e05dd]
  • Updated dependencies [e19e50e]
  • Updated dependencies [0aa9caf]
  • Updated dependencies [c84a377]
  • Updated dependencies [d13ab04]
  • Updated dependencies [2e4b64b]
  • Updated dependencies [14d1ef9]
  • Updated dependencies [10474b5]
  • Updated dependencies [a8ad19c]
  • Updated dependencies [676693b]
  • Updated dependencies [f998a64]
  • Updated dependencies [3976630]
  • Updated dependencies [23aaf06]
  • Updated dependencies [e9f5bb4]
  • Updated dependencies [5a1ad56]
  • Updated dependencies [0173fa0]
  • Updated dependencies [eb09a53]
  • Updated dependencies [be077e0]
  • Updated dependencies [ea9a6ae]
  • Updated dependencies [3e4f730]
  • Updated dependencies [bbc521a]
  • Updated dependencies [50fc801]
  • Updated dependencies [c1ea974]
  • Updated dependencies [ff21113]
  • Updated dependencies [9cb7e83]
  • Updated dependencies [ecb013c]
  • Updated dependencies [6d38d7e]
  • Updated dependencies [65545d9]
  • Updated dependencies [0ce11bf]
    • @synqauth/js@0.1.0
    • @synqauth/solana@0.1.0

@synqauth/plugin-siws

0.2.0

Patch Changes

  • Updated dependencies [5d43ddd]
  • Updated dependencies [6b4387a]
  • Updated dependencies [2641ab8]
  • Updated dependencies [287bcc5]
  • Updated dependencies [26ec5d5]
  • Updated dependencies [ad1a7ef]
  • Updated dependencies [4a4dca6]
  • Updated dependencies [f147c6d]
  • Updated dependencies [17ee1a9]
  • Updated dependencies [d07554d]
    • @synqauth/js@0.2.0
    • @synqauth/solana@0.2.0

0.1.1

Patch Changes

  • Updated dependencies [e2da42d]
    • @synqauth/js@0.1.1
    • @synqauth/solana@0.1.1

0.1.0

Minor Changes

  • 2586fb9: @synqauth/plugin-siws: Sign In With Solana from the app's own UI. siwsPlugin() (the browser half) asks the issuer for the request, has the wallet sign it, and hands the signature to the route mount, which pushes it to Synq; the browser passes through the issuer with no page. siwsServerPlugin() from @synqauth/plugin-siws/server tells the page which issuer and app to ask. @synqauth/nextjs's route mount takes POST <base>/sign-in with { siws, returnTo } for it, from the app's own pages.

Patch Changes

  • cbc84b3: The package's repository link points at github.com/aerosol-build/synq, the GitHub organization's new name.
  • Updated dependencies [3a6c109]
  • Updated dependencies [091cd48]
  • Updated dependencies [e7f3276]
  • Updated dependencies [5380ac4]
  • Updated dependencies [6fd1503]
  • Updated dependencies [dd9d81a]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [cbc84b3]
  • Updated dependencies [74bc862]
  • Updated dependencies [5f4239e]
  • Updated dependencies [24f17fc]
  • Updated dependencies [d80dde9]
  • Updated dependencies [dd1b1b0]
  • Updated dependencies [7fcb1b5]
  • Updated dependencies [a967f46]
  • Updated dependencies [390783d]
  • Updated dependencies [48d763c]
  • Updated dependencies [7e67619]
  • Updated dependencies [57e05dd]
  • Updated dependencies [e19e50e]
  • Updated dependencies [0aa9caf]
  • Updated dependencies [c84a377]
  • Updated dependencies [d13ab04]
  • Updated dependencies [2e4b64b]
  • Updated dependencies [14d1ef9]
  • Updated dependencies [10474b5]
  • Updated dependencies [a8ad19c]
  • Updated dependencies [676693b]
  • Updated dependencies [f998a64]
  • Updated dependencies [3976630]
  • Updated dependencies [23aaf06]
  • Updated dependencies [e9f5bb4]
  • Updated dependencies [5a1ad56]
  • Updated dependencies [0173fa0]
  • Updated dependencies [eb09a53]
  • Updated dependencies [be077e0]
  • Updated dependencies [ea9a6ae]
  • Updated dependencies [3e4f730]
  • Updated dependencies [bbc521a]
  • Updated dependencies [50fc801]
  • Updated dependencies [c1ea974]
  • Updated dependencies [ff21113]
  • Updated dependencies [9cb7e83]
  • Updated dependencies [ecb013c]
  • Updated dependencies [6d38d7e]
  • Updated dependencies [65545d9]
  • Updated dependencies [0ce11bf]
    • @synqauth/js@0.1.0
    • @synqauth/solana@0.1.0

@synqauth/plugin-passkey

0.2.0

Minor Changes

  • 17ee1a9: Sign people in on your app's own screens.

    • @synqauth/nextjs: the route mount answers POST <base>/sign-in/flow. The page posts each step as JSON; the server takes it to Synq as the app and answers only what to show next, never a token, a code or Synq's auth session. The flow stays sealed in a cookie, and a finished sign-in starts the session as the callback does. clientAddress(request) tells Synq where the person is (x-real-ip by default); without it, Synq's per-address limits are off for the app.
    • @synqauth/react: useSignIn() runs a sign-in through that route, and <SignInForm> is it worked through: a passkey where the browser takes the issuer's on the app's page (Chrome and Edge 128+, Safari 18+, Firefox 152+), offered in the address field too, then an emailed code or a password, a sign-up screen, and the new address's code; "Forgot your password?" goes to the hosted page, where resetting lives. Anything only the hosted page can do goes there. Its parts (PasskeyButton, PasswordForm, EmailCodeForm, VerifyEmailForm, OneTimeCodeInput) lay a page out the app's own way over one useSignIn(). Its words are new SynqMessages (signInProblems, signInRefusals, and the labels).
    • @synqauth/react-native: useSignIn() signs in from the device itself, with an emailed code or a password; passkeys, and anything else only the hosted page can do, go on in the system browser (continueInBrowser()).
    • @synqauth/plugin-passkey: signIn() asks for the passkey on the app's own page where it can, and otherwise answers the hosted page's passkey step to go to.
    • @synqauth/js: startSignIn and resumeSignIn take endUserIp, sent as Synq-End-User-IP, and startSignIn takes additionalResources.

Patch Changes

  • Updated dependencies [5d43ddd]
  • Updated dependencies [6b4387a]
  • Updated dependencies [2641ab8]
  • Updated dependencies [287bcc5]
  • Updated dependencies [26ec5d5]
  • Updated dependencies [ad1a7ef]
  • Updated dependencies [4a4dca6]
  • Updated dependencies [f147c6d]
  • Updated dependencies [17ee1a9]
  • Updated dependencies [d07554d]
    • @synqauth/js@0.2.0

0.1.1

Patch Changes

  • Updated dependencies [e2da42d]
    • @synqauth/js@0.1.1

0.1.0

Minor Changes

  • a5dff33: @synqauth/plugin-passkey and @synqauth/plugin-magic-link: browser plugins for @synqauth/react and @synqauth/nextjs/client. passkeyPlugin() sends the person to the brand's passkey step to sign in (signInUrl) or to add a passkey after a fresh sign-in (addUrl), and lists and removes their passkeys through the route mount (list, remove). magicLinkPlugin() sends them to the brand's email step with their address filled in (signInUrl). The issuer runs and verifies every step; nothing is verified on your server.

Patch Changes

  • cbc84b3: The package's repository link points at github.com/aerosol-build/synq, the GitHub organization's new name.
  • Updated dependencies [3a6c109]
  • Updated dependencies [091cd48]
  • Updated dependencies [e7f3276]
  • Updated dependencies [5380ac4]
  • Updated dependencies [6fd1503]
  • Updated dependencies [dd9d81a]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [09ff36c]
  • Updated dependencies [cbc84b3]
  • Updated dependencies [74bc862]
  • Updated dependencies [5f4239e]
  • Updated dependencies [24f17fc]
  • Updated dependencies [d80dde9]
  • Updated dependencies [dd1b1b0]
  • Updated dependencies [7fcb1b5]
  • Updated dependencies [a967f46]
  • Updated dependencies [390783d]
  • Updated dependencies [48d763c]
  • Updated dependencies [7e67619]
  • Updated dependencies [57e05dd]
  • Updated dependencies [e19e50e]
  • Updated dependencies [0aa9caf]
  • Updated dependencies [c84a377]
  • Updated dependencies [d13ab04]
  • Updated dependencies [2e4b64b]
  • Updated dependencies [14d1ef9]
  • Updated dependencies [10474b5]
  • Updated dependencies [a8ad19c]
  • Updated dependencies [676693b]
  • Updated dependencies [f998a64]
  • Updated dependencies [3976630]
  • Updated dependencies [23aaf06]
  • Updated dependencies [e9f5bb4]
  • Updated dependencies [5a1ad56]
  • Updated dependencies [0173fa0]
  • Updated dependencies [eb09a53]
  • Updated dependencies [be077e0]
  • Updated dependencies [ea9a6ae]
  • Updated dependencies [3e4f730]
  • Updated dependencies [bbc521a]
  • Updated dependencies [50fc801]
  • Updated dependencies [c1ea974]
  • Updated dependencies [ff21113]
  • Updated dependencies [9cb7e83]
  • Updated dependencies [ecb013c]
  • Updated dependencies [6d38d7e]
  • Updated dependencies [65545d9]
  • Updated dependencies [0ce11bf]
    • @synqauth/js@0.1.0

0.2.0

Patch Changes

  • 1b79b36: Says what it does: it sends people from your own UI to the hosted page's emailed code or magic link. To take the code on your own page, use own-UI sign-in (useSignIn().emailCode in @synqauth/react).

0.1.1

No changes in this release.

0.1.0

Minor Changes

  • a5dff33: @synqauth/plugin-passkey and @synqauth/plugin-magic-link: browser plugins for @synqauth/react and @synqauth/nextjs/client. passkeyPlugin() sends the person to the brand's passkey step to sign in (signInUrl) or to add a passkey after a fresh sign-in (addUrl), and lists and removes their passkeys through the route mount (list, remove). magicLinkPlugin() sends them to the brand's email step with their address filled in (signInUrl). The issuer runs and verifies every step; nothing is verified on your server.

Patch Changes

  • cbc84b3: The package's repository link points at github.com/aerosol-build/synq, the GitHub organization's new name.

On this page