@supabase/gotrue-js 2.79.1-canary.1 → 2.80.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +35 -17
  2. package/dist/main/AuthAdminApi.js +2 -4
  3. package/dist/main/AuthAdminApi.js.map +1 -1
  4. package/dist/main/AuthClient.js +2 -4
  5. package/dist/main/AuthClient.js.map +1 -1
  6. package/dist/main/GoTrueAdminApi.d.ts +48 -1
  7. package/dist/main/GoTrueAdminApi.d.ts.map +1 -1
  8. package/dist/main/GoTrueAdminApi.js +162 -12
  9. package/dist/main/GoTrueAdminApi.js.map +1 -1
  10. package/dist/main/GoTrueClient.d.ts +38 -1
  11. package/dist/main/GoTrueClient.d.ts.map +1 -1
  12. package/dist/main/GoTrueClient.js +293 -152
  13. package/dist/main/GoTrueClient.js.map +1 -1
  14. package/dist/main/index.js +7 -23
  15. package/dist/main/index.js.map +1 -1
  16. package/dist/main/lib/error-codes.d.ts +1 -1
  17. package/dist/main/lib/fetch.js +2 -12
  18. package/dist/main/lib/fetch.js.map +1 -1
  19. package/dist/main/lib/helpers.d.ts +11 -0
  20. package/dist/main/lib/helpers.d.ts.map +1 -1
  21. package/dist/main/lib/helpers.js +39 -42
  22. package/dist/main/lib/helpers.js.map +1 -1
  23. package/dist/main/lib/types.d.ts +276 -2
  24. package/dist/main/lib/types.d.ts.map +1 -1
  25. package/dist/main/lib/types.js.map +1 -1
  26. package/dist/main/lib/version.d.ts +1 -1
  27. package/dist/main/lib/version.d.ts.map +1 -1
  28. package/dist/main/lib/version.js +1 -1
  29. package/dist/main/lib/version.js.map +1 -1
  30. package/dist/main/lib/webauthn.js +3 -13
  31. package/dist/main/lib/webauthn.js.map +1 -1
  32. package/dist/module/GoTrueAdminApi.d.ts +48 -1
  33. package/dist/module/GoTrueAdminApi.d.ts.map +1 -1
  34. package/dist/module/GoTrueAdminApi.js +161 -11
  35. package/dist/module/GoTrueAdminApi.js.map +1 -1
  36. package/dist/module/GoTrueClient.d.ts +38 -1
  37. package/dist/module/GoTrueClient.d.ts.map +1 -1
  38. package/dist/module/GoTrueClient.js +292 -149
  39. package/dist/module/GoTrueClient.js.map +1 -1
  40. package/dist/module/lib/error-codes.d.ts +1 -1
  41. package/dist/module/lib/fetch.js +1 -11
  42. package/dist/module/lib/fetch.js.map +1 -1
  43. package/dist/module/lib/helpers.d.ts +11 -0
  44. package/dist/module/lib/helpers.d.ts.map +1 -1
  45. package/dist/module/lib/helpers.js +38 -9
  46. package/dist/module/lib/helpers.js.map +1 -1
  47. package/dist/module/lib/types.d.ts +276 -2
  48. package/dist/module/lib/types.d.ts.map +1 -1
  49. package/dist/module/lib/types.js.map +1 -1
  50. package/dist/module/lib/version.d.ts +1 -1
  51. package/dist/module/lib/version.d.ts.map +1 -1
  52. package/dist/module/lib/version.js +1 -1
  53. package/dist/module/lib/version.js.map +1 -1
  54. package/dist/module/lib/webauthn.js +1 -11
  55. package/dist/module/lib/webauthn.js.map +1 -1
  56. package/dist/tsconfig.module.tsbuildinfo +1 -0
  57. package/dist/tsconfig.tsbuildinfo +1 -0
  58. package/package.json +9 -10
  59. package/src/GoTrueAdminApi.ts +186 -0
  60. package/src/GoTrueClient.ts +356 -150
  61. package/src/lib/error-codes.ts +1 -1
  62. package/src/lib/helpers.ts +46 -8
  63. package/src/lib/types.ts +300 -1
  64. package/src/lib/version.ts +1 -1
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Known error codes. Note that the server may also return other error codes
3
- * not included in this list (if the client library is older than the version
3
+ * not included in this list (if the SDK is older than the version
4
4
  * on the server).
5
5
  */
6
6
  export type ErrorCode =
@@ -94,16 +94,10 @@ export function parseParametersFromURL(href: string) {
94
94
  type Fetch = typeof fetch
95
95
 
96
96
  export const resolveFetch = (customFetch?: Fetch): Fetch => {
97
- let _fetch: Fetch
98
97
  if (customFetch) {
99
- _fetch = customFetch
100
- } else if (typeof fetch === 'undefined') {
101
- _fetch = (...args) =>
102
- import('@supabase/node-fetch' as any).then(({ default: fetch }) => fetch(...args))
103
- } else {
104
- _fetch = fetch
98
+ return (...args) => customFetch(...args)
105
99
  }
106
- return (...args) => _fetch(...args)
100
+ return (...args) => fetch(...args)
107
101
  }
108
102
 
109
103
  export const looksLikeFetchResponse = (maybeResponse: unknown): maybeResponse is Response => {
@@ -407,6 +401,50 @@ export function userNotAvailableProxy(): User {
407
401
  })
408
402
  }
409
403
 
404
+ /**
405
+ * Creates a proxy around a user object that warns when properties are accessed on the server.
406
+ * This is used to alert developers that using user data from getSession() on the server is insecure.
407
+ *
408
+ * @param user The actual user object to wrap
409
+ * @param suppressWarningRef An object with a 'value' property that controls warning suppression
410
+ * @returns A proxied user object that warns on property access
411
+ */
412
+ export function insecureUserWarningProxy(user: User, suppressWarningRef: { value: boolean }): User {
413
+ return new Proxy(user, {
414
+ get: (target: any, prop: string | symbol, receiver: any) => {
415
+ // Allow internal checks without warning
416
+ if (prop === '__isInsecureUserWarningProxy') {
417
+ return true
418
+ }
419
+
420
+ // Preventative check for common problematic symbols during cloning/inspection
421
+ // These symbols might be accessed by structuredClone or other internal mechanisms
422
+ if (typeof prop === 'symbol') {
423
+ const sProp = prop.toString()
424
+ if (
425
+ sProp === 'Symbol(Symbol.toPrimitive)' ||
426
+ sProp === 'Symbol(Symbol.toStringTag)' ||
427
+ sProp === 'Symbol(util.inspect.custom)' ||
428
+ sProp === 'Symbol(nodejs.util.inspect.custom)'
429
+ ) {
430
+ // Return the actual value for these symbols to allow proper inspection
431
+ return Reflect.get(target, prop, receiver)
432
+ }
433
+ }
434
+
435
+ // Emit warning on first property access
436
+ if (!suppressWarningRef.value && typeof prop === 'string') {
437
+ console.warn(
438
+ 'Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server.'
439
+ )
440
+ suppressWarningRef.value = true
441
+ }
442
+
443
+ return Reflect.get(target, prop, receiver)
444
+ },
445
+ })
446
+ }
447
+
410
448
  /**
411
449
  * Deep clones a JSON-serializable object using JSON.parse(JSON.stringify(obj)).
412
450
  * Note: Only works for JSON-safe data.
package/src/lib/types.ts CHANGED
@@ -107,6 +107,11 @@ export type GoTrueClientOptions = {
107
107
  * @experimental
108
108
  */
109
109
  hasCustomAuthorizationHeader?: boolean
110
+ /**
111
+ * If there is an error with the query, throwOnError will reject the promise by
112
+ * throwing the error instead of returning it as part of a successful response.
113
+ */
114
+ throwOnError?: boolean
110
115
  }
111
116
 
112
117
  const WeakPasswordReasons = ['length', 'characters', 'pwned'] as const
@@ -1434,7 +1439,31 @@ export type RequiredClaims = {
1434
1439
  session_id: string
1435
1440
  }
1436
1441
 
1437
- export type JwtPayload = RequiredClaims & {
1442
+ /**
1443
+ * JWT Payload containing claims for Supabase authentication tokens.
1444
+ *
1445
+ * Required claims (iss, aud, exp, iat, sub, role, aal, session_id) are inherited from RequiredClaims.
1446
+ * All other claims are optional as they can be customized via Custom Access Token Hooks.
1447
+ *
1448
+ * @see https://supabase.com/docs/guides/auth/jwt-fields
1449
+ */
1450
+ export interface JwtPayload extends RequiredClaims {
1451
+ // Standard optional claims (can be customized via custom access token hooks)
1452
+ email?: string
1453
+ phone?: string
1454
+ is_anonymous?: boolean
1455
+
1456
+ // Optional claims
1457
+ jti?: string
1458
+ nbf?: number
1459
+ app_metadata?: UserAppMetadata
1460
+ user_metadata?: UserMetadata
1461
+ amr?: AMREntry[]
1462
+
1463
+ // Special claims (only in anon/service role tokens)
1464
+ ref?: string
1465
+
1466
+ // Allow custom claims via custom access token hooks
1438
1467
  [key: string]: any
1439
1468
  }
1440
1469
 
@@ -1448,3 +1477,273 @@ export interface JWK {
1448
1477
 
1449
1478
  export const SIGN_OUT_SCOPES = ['global', 'local', 'others'] as const
1450
1479
  export type SignOutScope = (typeof SIGN_OUT_SCOPES)[number]
1480
+
1481
+ /**
1482
+ * OAuth client grant types supported by the OAuth 2.1 server.
1483
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1484
+ */
1485
+ export type OAuthClientGrantType = 'authorization_code' | 'refresh_token'
1486
+
1487
+ /**
1488
+ * OAuth client response types supported by the OAuth 2.1 server.
1489
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1490
+ */
1491
+ export type OAuthClientResponseType = 'code'
1492
+
1493
+ /**
1494
+ * OAuth client type indicating whether the client can keep credentials confidential.
1495
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1496
+ */
1497
+ export type OAuthClientType = 'public' | 'confidential'
1498
+
1499
+ /**
1500
+ * OAuth client registration type.
1501
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1502
+ */
1503
+ export type OAuthClientRegistrationType = 'dynamic' | 'manual'
1504
+
1505
+ /**
1506
+ * OAuth client object returned from the OAuth 2.1 server.
1507
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1508
+ */
1509
+ export type OAuthClient = {
1510
+ /** Unique identifier for the OAuth client */
1511
+ client_id: string
1512
+ /** Human-readable name of the OAuth client */
1513
+ client_name: string
1514
+ /** Client secret (only returned on registration and regeneration) */
1515
+ client_secret?: string
1516
+ /** Type of OAuth client */
1517
+ client_type: OAuthClientType
1518
+ /** Token endpoint authentication method */
1519
+ token_endpoint_auth_method: string
1520
+ /** Registration type of the client */
1521
+ registration_type: OAuthClientRegistrationType
1522
+ /** URI of the OAuth client */
1523
+ client_uri?: string
1524
+ /** URI of the OAuth client's logo */
1525
+ logo_uri?: string
1526
+ /** Array of allowed redirect URIs */
1527
+ redirect_uris: string[]
1528
+ /** Array of allowed grant types */
1529
+ grant_types: OAuthClientGrantType[]
1530
+ /** Array of allowed response types */
1531
+ response_types: OAuthClientResponseType[]
1532
+ /** Scope of the OAuth client */
1533
+ scope?: string
1534
+ /** Timestamp when the client was created */
1535
+ created_at: string
1536
+ /** Timestamp when the client was last updated */
1537
+ updated_at: string
1538
+ }
1539
+
1540
+ /**
1541
+ * Parameters for creating a new OAuth client.
1542
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1543
+ */
1544
+ export type CreateOAuthClientParams = {
1545
+ /** Human-readable name of the OAuth client */
1546
+ client_name: string
1547
+ /** URI of the OAuth client */
1548
+ client_uri?: string
1549
+ /** Array of allowed redirect URIs */
1550
+ redirect_uris: string[]
1551
+ /** Array of allowed grant types (optional, defaults to authorization_code and refresh_token) */
1552
+ grant_types?: OAuthClientGrantType[]
1553
+ /** Array of allowed response types (optional, defaults to code) */
1554
+ response_types?: OAuthClientResponseType[]
1555
+ /** Scope of the OAuth client */
1556
+ scope?: string
1557
+ }
1558
+
1559
+ /**
1560
+ * Parameters for updating an existing OAuth client.
1561
+ * All fields are optional. Only provided fields will be updated.
1562
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1563
+ */
1564
+ export type UpdateOAuthClientParams = {
1565
+ /** Human-readable name of the OAuth client */
1566
+ client_name?: string
1567
+ /** URI of the OAuth client */
1568
+ client_uri?: string
1569
+ /** URI of the OAuth client's logo */
1570
+ logo_uri?: string
1571
+ /** Array of allowed redirect URIs */
1572
+ redirect_uris?: string[]
1573
+ /** Array of allowed grant types */
1574
+ grant_types?: OAuthClientGrantType[]
1575
+ }
1576
+
1577
+ /**
1578
+ * Response type for OAuth client operations.
1579
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1580
+ */
1581
+ export type OAuthClientResponse = RequestResult<OAuthClient>
1582
+
1583
+ /**
1584
+ * Response type for listing OAuth clients.
1585
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1586
+ */
1587
+ export type OAuthClientListResponse =
1588
+ | {
1589
+ data: { clients: OAuthClient[]; aud: string } & Pagination
1590
+ error: null
1591
+ }
1592
+ | {
1593
+ data: { clients: [] }
1594
+ error: AuthError
1595
+ }
1596
+
1597
+ /**
1598
+ * Contains all OAuth client administration methods.
1599
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1600
+ */
1601
+ export interface GoTrueAdminOAuthApi {
1602
+ /**
1603
+ * Lists all OAuth clients with optional pagination.
1604
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1605
+ *
1606
+ * This function should only be called on a server. Never expose your `service_role` key in the browser.
1607
+ */
1608
+ listClients(params?: PageParams): Promise<OAuthClientListResponse>
1609
+
1610
+ /**
1611
+ * Creates a new OAuth client.
1612
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1613
+ *
1614
+ * This function should only be called on a server. Never expose your `service_role` key in the browser.
1615
+ */
1616
+ createClient(params: CreateOAuthClientParams): Promise<OAuthClientResponse>
1617
+
1618
+ /**
1619
+ * Gets details of a specific OAuth client.
1620
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1621
+ *
1622
+ * This function should only be called on a server. Never expose your `service_role` key in the browser.
1623
+ */
1624
+ getClient(clientId: string): Promise<OAuthClientResponse>
1625
+
1626
+ /**
1627
+ * Updates an existing OAuth client.
1628
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1629
+ *
1630
+ * This function should only be called on a server. Never expose your `service_role` key in the browser.
1631
+ */
1632
+ updateClient(clientId: string, params: UpdateOAuthClientParams): Promise<OAuthClientResponse>
1633
+
1634
+ /**
1635
+ * Deletes an OAuth client.
1636
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1637
+ *
1638
+ * This function should only be called on a server. Never expose your `service_role` key in the browser.
1639
+ */
1640
+ deleteClient(clientId: string): Promise<{ data: null; error: AuthError | null }>
1641
+
1642
+ /**
1643
+ * Regenerates the secret for an OAuth client.
1644
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1645
+ *
1646
+ * This function should only be called on a server. Never expose your `service_role` key in the browser.
1647
+ */
1648
+ regenerateClientSecret(clientId: string): Promise<OAuthClientResponse>
1649
+ }
1650
+
1651
+ /**
1652
+ * OAuth client details in an authorization request.
1653
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1654
+ */
1655
+ export type OAuthAuthorizationClient = {
1656
+ /** Unique identifier for the OAuth client (UUID) */
1657
+ client_id: string
1658
+ /** Human-readable name of the OAuth client */
1659
+ client_name: string
1660
+ /** URI of the OAuth client's website */
1661
+ client_uri: string
1662
+ /** URI of the OAuth client's logo */
1663
+ logo_uri: string
1664
+ }
1665
+
1666
+ /**
1667
+ * OAuth authorization details for the consent flow.
1668
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1669
+ */
1670
+ export type OAuthAuthorizationDetails = {
1671
+ /** The authorization ID */
1672
+ authorization_id: string
1673
+ /** Redirect URI - present if user already consented (can be used to trigger immediate redirect) */
1674
+ redirect_uri?: string
1675
+ /** OAuth client requesting authorization */
1676
+ client: OAuthAuthorizationClient
1677
+ /** User object associated with the authorization */
1678
+ user: {
1679
+ /** User ID (UUID) */
1680
+ id: string
1681
+ /** User email */
1682
+ email: string
1683
+ }
1684
+ /** Space-separated list of requested scopes */
1685
+ scope: string
1686
+ }
1687
+
1688
+ /**
1689
+ * Response type for getting OAuth authorization details.
1690
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1691
+ */
1692
+ export type AuthOAuthAuthorizationDetailsResponse = RequestResult<OAuthAuthorizationDetails>
1693
+
1694
+ /**
1695
+ * Response type for OAuth consent decision (approve/deny).
1696
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1697
+ */
1698
+ export type AuthOAuthConsentResponse = RequestResult<{
1699
+ /** URL to redirect the user back to the OAuth client */
1700
+ redirect_url: string
1701
+ }>
1702
+
1703
+ /**
1704
+ * Contains all OAuth 2.1 authorization server user-facing methods.
1705
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1706
+ *
1707
+ * These methods are used to implement the consent page.
1708
+ */
1709
+ export interface AuthOAuthServerApi {
1710
+ /**
1711
+ * Retrieves details about an OAuth authorization request.
1712
+ * Used to display consent information to the user.
1713
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1714
+ *
1715
+ * This method returns authorization details including client info, scopes, and user information.
1716
+ * If the response includes a redirect_uri, it means consent was already given - the caller
1717
+ * should handle the redirect manually if needed.
1718
+ *
1719
+ * @param authorizationId - The authorization ID from the authorization request
1720
+ * @returns Authorization details including client info and requested scopes
1721
+ */
1722
+ getAuthorizationDetails(authorizationId: string): Promise<AuthOAuthAuthorizationDetailsResponse>
1723
+
1724
+ /**
1725
+ * Approves an OAuth authorization request.
1726
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1727
+ *
1728
+ * @param authorizationId - The authorization ID to approve
1729
+ * @param options - Optional parameters including skipBrowserRedirect
1730
+ * @returns Redirect URL to send the user back to the OAuth client
1731
+ */
1732
+ approveAuthorization(
1733
+ authorizationId: string,
1734
+ options?: { skipBrowserRedirect?: boolean }
1735
+ ): Promise<AuthOAuthConsentResponse>
1736
+
1737
+ /**
1738
+ * Denies an OAuth authorization request.
1739
+ * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.
1740
+ *
1741
+ * @param authorizationId - The authorization ID to deny
1742
+ * @param options - Optional parameters including skipBrowserRedirect
1743
+ * @returns Redirect URL to send the user back to the OAuth client
1744
+ */
1745
+ denyAuthorization(
1746
+ authorizationId: string,
1747
+ options?: { skipBrowserRedirect?: boolean }
1748
+ ): Promise<AuthOAuthConsentResponse>
1749
+ }
@@ -4,4 +4,4 @@
4
4
  // - Debugging and support (identifying which version is running)
5
5
  // - Telemetry and logging (version reporting in errors/analytics)
6
6
  // - Ensuring build artifacts match the published package version
7
- export const version = '2.79.1-canary.1'
7
+ export const version = '2.80.0'