@logto/browser 1.0.0-beta.4 → 1.0.0-beta.6

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.
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import BaseClient, { LogtoConfig } from "@logto/client";
2
- export type { IdTokenClaims, LogtoErrorCode, LogtoConfig, LogtoClientErrorCode, } from '@logto/client';
2
+ export type { IdTokenClaims, LogtoErrorCode, LogtoConfig, LogtoClientErrorCode, UserInfoResponse, } from '@logto/client';
3
3
  export { LogtoError, OidcError, Prompt, LogtoRequestError, LogtoClientError } from '@logto/client';
4
4
  export default class LogtoClient extends BaseClient {
5
5
  constructor(config: LogtoConfig);
@@ -1 +1 @@
1
- {"mappings":";AEKA,YAAY,EACV,aAAa,EACb,cAAc,EACd,WAAW,EACX,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMnG,gCAAiC,SAAQ,UAAU;gBACrC,MAAM,EAAE,WAAW;CAWhC","sources":["packages/browser/src/src/storage.ts","packages/browser/src/src/utils/generators.ts","packages/browser/src/src/index.ts","packages/browser/src/index.ts"],"sourcesContent":[null,null,null,"import BaseClient, { createRequester, LogtoConfig } from '@logto/client';\n\nimport { BrowserStorage } from './storage';\nimport { generateCodeChallenge, generateCodeVerifier, generateState } from './utils/generators';\n\nexport type {\n IdTokenClaims,\n LogtoErrorCode,\n LogtoConfig,\n LogtoClientErrorCode,\n} from '@logto/client';\nexport { LogtoError, OidcError, Prompt, LogtoRequestError, LogtoClientError } from '@logto/client';\n\nconst navigate = (url: string) => {\n window.location.assign(url);\n};\n\nexport default class LogtoClient extends BaseClient {\n constructor(config: LogtoConfig) {\n const requester = createRequester(fetch);\n super(config, {\n requester,\n navigate,\n storage: new BrowserStorage(config.appId),\n generateCodeChallenge,\n generateCodeVerifier,\n generateState,\n });\n }\n}\n"],"names":[],"version":3,"file":"index.d.ts.map"}
1
+ {"mappings":";AEKA,YAAY,EACV,aAAa,EACb,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMnG,gCAAiC,SAAQ,UAAU;gBACrC,MAAM,EAAE,WAAW;CAWhC","sources":["packages/browser/src/src/storage.ts","packages/browser/src/src/utils/generators.ts","packages/browser/src/src/index.ts","packages/browser/src/index.ts"],"sourcesContent":[null,null,null,"import BaseClient, { createRequester, LogtoConfig } from '@logto/client';\n\nimport { BrowserStorage } from './storage';\nimport { generateCodeChallenge, generateCodeVerifier, generateState } from './utils/generators';\n\nexport type {\n IdTokenClaims,\n LogtoErrorCode,\n LogtoConfig,\n LogtoClientErrorCode,\n UserInfoResponse,\n} from '@logto/client';\nexport { LogtoError, OidcError, Prompt, LogtoRequestError, LogtoClientError } from '@logto/client';\n\nconst navigate = (url: string) => {\n window.location.assign(url);\n};\n\nexport default class LogtoClient extends BaseClient {\n constructor(config: LogtoConfig) {\n const requester = createRequester(fetch);\n super(config, {\n requester,\n navigate,\n storage: new BrowserStorage(config.appId),\n generateCodeChallenge,\n generateCodeVerifier,\n generateState,\n });\n }\n}\n"],"names":[],"version":3,"file":"index.d.ts.map"}
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;ACGO,MAAM,yCAAyB,GAAG,CAAC,KAAK,CAAC,AAAC;AAE1C,MAAM,yCAAc;IAGzB,YAAY,KAAa,CAAE;QACzB,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,yCAAyB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;KAC3D;IAED,MAAM,OAAO,CAAC,GAAe,EAA6B;QACxD,IAAI,GAAG,KAAK,eAAe,EACzB,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAGjD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KAC1D;IAED,MAAM,OAAO,CAAC,GAAe,EAAE,KAAa,EAAiB;QAC3D,IAAI,GAAG,KAAK,eAAe,EAAE;YAC3B,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAE/C,OAAO;SACR;QACD,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;KAC1D;IAED,MAAM,UAAU,CAAC,GAAe,EAAiB;QAC/C,IAAI,GAAG,KAAK,eAAe,EAAE;YAC3B,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAE3C,OAAO;SACR;QACD,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KACtD;CACF;;;ACnCD;;AAGA;;GAEG,CACH,MAAM,0CAAoB,GAAG,CAAC,MAAM,GAAG,EAAE,GACvC,CAAA,GAAA,8BAAc,CAAA,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,AAAC;AAKhE,MAAM,yCAAa,GAAG,IAAM,0CAAoB,EAAE,AAAC;AAOnD,MAAM,yCAAoB,GAAG,IAAM,0CAAoB,EAAE,AAAC;AAQ1D,MAAM,yCAAqB,GAAG,OAAO,YAAoB,GAAsB;IACpF,uEAAuE;IACvE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAC7B;;;;OAIG,CACH,MAAM,IAAI,CAAA,GAAA,6BAAU,CAAA,CAAC,2BAA2B,CAAC,CAAC;IAGpD,MAAM,mBAAmB,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,AAAC;IACnE,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,AAAC;IAEjG,OAAO,CAAA,GAAA,8BAAc,CAAA,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;CAC5C,AAAC;;;;AF/BF,MAAM,8BAAQ,GAAG,CAAC,GAAW,GAAK;IAChC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CAC7B,AAAC;AAEa,uDAA0B,CAAA,GAAA,4CAAU,CAAA;IACjD,YAAY,MAAmB,CAAE;QAC/B,MAAM,SAAS,GAAG,CAAA,GAAA,kCAAe,CAAA,CAAC,KAAK,CAAC,AAAC;QACzC,KAAK,CAAC,MAAM,EAAE;uBACZ,SAAS;sBACT,8BAAQ;YACR,OAAO,EAAE,IAAI,CAAA,GAAA,yCAAc,CAAA,CAAC,MAAM,CAAC,KAAK,CAAC;mCACzC,yCAAqB;kCACrB,yCAAoB;2BACpB,yCAAa;SACd,CAAC,CAAC;KACJ;CACF","sources":["packages/browser/src/index.ts","packages/browser/src/storage.ts","packages/browser/src/utils/generators.ts"],"sourcesContent":["import BaseClient, { createRequester, LogtoConfig } from '@logto/client';\n\nimport { BrowserStorage } from './storage';\nimport { generateCodeChallenge, generateCodeVerifier, generateState } from './utils/generators';\n\nexport type {\n IdTokenClaims,\n LogtoErrorCode,\n LogtoConfig,\n LogtoClientErrorCode,\n} from '@logto/client';\nexport { LogtoError, OidcError, Prompt, LogtoRequestError, LogtoClientError } from '@logto/client';\n\nconst navigate = (url: string) => {\n window.location.assign(url);\n};\n\nexport default class LogtoClient extends BaseClient {\n constructor(config: LogtoConfig) {\n const requester = createRequester(fetch);\n super(config, {\n requester,\n navigate,\n storage: new BrowserStorage(config.appId),\n generateCodeChallenge,\n generateCodeVerifier,\n generateState,\n });\n }\n}\n","import { Storage, StorageKey } from '@logto/client';\nimport { Nullable } from '@silverhand/essentials';\n\nexport const logtoStorageItemKeyPrefix = `logto`;\n\nexport class BrowserStorage implements Storage {\n private readonly storageKey: string;\n\n constructor(appId: string) {\n this.storageKey = `${logtoStorageItemKeyPrefix}:${appId}`;\n }\n\n async getItem(key: StorageKey): Promise<Nullable<string>> {\n if (key === 'signInSession') {\n return sessionStorage.getItem(this.storageKey);\n }\n\n return localStorage.getItem(`${this.storageKey}:${key}`);\n }\n\n async setItem(key: StorageKey, value: string): Promise<void> {\n if (key === 'signInSession') {\n sessionStorage.setItem(this.storageKey, value);\n\n return;\n }\n localStorage.setItem(`${this.storageKey}:${key}`, value);\n }\n\n async removeItem(key: StorageKey): Promise<void> {\n if (key === 'signInSession') {\n sessionStorage.removeItem(this.storageKey);\n\n return;\n }\n localStorage.removeItem(`${this.storageKey}:${key}`);\n }\n}\n","/** @link [Proof Key for Code Exchange by OAuth Public Clients](https://datatracker.ietf.org/doc/html/rfc7636) */\n\nimport { LogtoError } from '@logto/client';\nimport { fromUint8Array } from 'js-base64';\n\n/**\n * @param length The length of the raw random data.\n */\nconst generateRandomString = (length = 64) =>\n fromUint8Array(crypto.getRandomValues(new Uint8Array(length)), true);\n\n/**\n * Generates random string for state and encodes them in url safe base64\n */\nexport const generateState = () => generateRandomString();\n\n/**\n * Generates code verifier\n *\n * @link [Client Creates a Code Verifier](https://datatracker.ietf.org/doc/html/rfc7636#section-4.1)\n */\nexport const generateCodeVerifier = () => generateRandomString();\n\n/**\n * Calculates the S256 PKCE code challenge for an arbitrary code verifier and encodes it in url safe base64\n *\n * @param {String} codeVerifier Code verifier to calculate the S256 code challenge for\n * @link [Client Creates the Code Challenge](https://datatracker.ietf.org/doc/html/rfc7636#section-4.2)\n */\nexport const generateCodeChallenge = async (codeVerifier: string): Promise<string> => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (crypto.subtle === undefined) {\n /**\n * `crypto.subtle` is available only in secure contexts (HTTPS) in some or all supporting browsers,\n * https://developer.mozilla.org/en-US/docs/Web/API/Crypto/subtle\n * https://www.chromium.org/blink/webcrypto/#accessing-it\n */\n throw new LogtoError('crypto_subtle_unavailable');\n }\n\n const encodedCodeVerifier = new TextEncoder().encode(codeVerifier);\n const codeChallenge = new Uint8Array(await crypto.subtle.digest('SHA-256', encodedCodeVerifier));\n\n return fromUint8Array(codeChallenge, true);\n};\n"],"names":[],"version":3,"file":"index.js.map"}
1
+ {"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;ACGO,MAAM,yCAAyB,GAAG,CAAC,KAAK,CAAC,AAAC;AAE1C,MAAM,yCAAc;IAGzB,YAAY,KAAa,CAAE;QACzB,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,yCAAyB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;KAC3D;IAED,MAAM,OAAO,CAAC,GAAe,EAA6B;QACxD,IAAI,GAAG,KAAK,eAAe,EACzB,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAGjD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KAC1D;IAED,MAAM,OAAO,CAAC,GAAe,EAAE,KAAa,EAAiB;QAC3D,IAAI,GAAG,KAAK,eAAe,EAAE;YAC3B,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAE/C,OAAO;SACR;QACD,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;KAC1D;IAED,MAAM,UAAU,CAAC,GAAe,EAAiB;QAC/C,IAAI,GAAG,KAAK,eAAe,EAAE;YAC3B,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAE3C,OAAO;SACR;QACD,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KACtD;CACF;;;ACnCD;;AAGA;;GAEG,CACH,MAAM,0CAAoB,GAAG,CAAC,MAAM,GAAG,EAAE,GACvC,CAAA,GAAA,8BAAc,CAAA,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,AAAC;AAKhE,MAAM,yCAAa,GAAG,IAAM,0CAAoB,EAAE,AAAC;AAOnD,MAAM,yCAAoB,GAAG,IAAM,0CAAoB,EAAE,AAAC;AAQ1D,MAAM,yCAAqB,GAAG,OAAO,YAAoB,GAAsB;IACpF,uEAAuE;IACvE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAC7B;;;;OAIG,CACH,MAAM,IAAI,CAAA,GAAA,6BAAU,CAAA,CAAC,2BAA2B,CAAC,CAAC;IAGpD,MAAM,mBAAmB,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,AAAC;IACnE,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,AAAC;IAEjG,OAAO,CAAA,GAAA,8BAAc,CAAA,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;CAC5C,AAAC;;;;AF9BF,MAAM,8BAAQ,GAAG,CAAC,GAAW,GAAK;IAChC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CAC7B,AAAC;AAEa,uDAA0B,CAAA,GAAA,4CAAU,CAAA;IACjD,YAAY,MAAmB,CAAE;QAC/B,MAAM,SAAS,GAAG,CAAA,GAAA,kCAAe,CAAA,CAAC,KAAK,CAAC,AAAC;QACzC,KAAK,CAAC,MAAM,EAAE;uBACZ,SAAS;sBACT,8BAAQ;YACR,OAAO,EAAE,IAAI,CAAA,GAAA,yCAAc,CAAA,CAAC,MAAM,CAAC,KAAK,CAAC;mCACzC,yCAAqB;kCACrB,yCAAoB;2BACpB,yCAAa;SACd,CAAC,CAAC;KACJ;CACF","sources":["packages/browser/src/index.ts","packages/browser/src/storage.ts","packages/browser/src/utils/generators.ts"],"sourcesContent":["import BaseClient, { createRequester, LogtoConfig } from '@logto/client';\n\nimport { BrowserStorage } from './storage';\nimport { generateCodeChallenge, generateCodeVerifier, generateState } from './utils/generators';\n\nexport type {\n IdTokenClaims,\n LogtoErrorCode,\n LogtoConfig,\n LogtoClientErrorCode,\n UserInfoResponse,\n} from '@logto/client';\nexport { LogtoError, OidcError, Prompt, LogtoRequestError, LogtoClientError } from '@logto/client';\n\nconst navigate = (url: string) => {\n window.location.assign(url);\n};\n\nexport default class LogtoClient extends BaseClient {\n constructor(config: LogtoConfig) {\n const requester = createRequester(fetch);\n super(config, {\n requester,\n navigate,\n storage: new BrowserStorage(config.appId),\n generateCodeChallenge,\n generateCodeVerifier,\n generateState,\n });\n }\n}\n","import { Storage, StorageKey } from '@logto/client';\nimport { Nullable } from '@silverhand/essentials';\n\nexport const logtoStorageItemKeyPrefix = `logto`;\n\nexport class BrowserStorage implements Storage {\n private readonly storageKey: string;\n\n constructor(appId: string) {\n this.storageKey = `${logtoStorageItemKeyPrefix}:${appId}`;\n }\n\n async getItem(key: StorageKey): Promise<Nullable<string>> {\n if (key === 'signInSession') {\n return sessionStorage.getItem(this.storageKey);\n }\n\n return localStorage.getItem(`${this.storageKey}:${key}`);\n }\n\n async setItem(key: StorageKey, value: string): Promise<void> {\n if (key === 'signInSession') {\n sessionStorage.setItem(this.storageKey, value);\n\n return;\n }\n localStorage.setItem(`${this.storageKey}:${key}`, value);\n }\n\n async removeItem(key: StorageKey): Promise<void> {\n if (key === 'signInSession') {\n sessionStorage.removeItem(this.storageKey);\n\n return;\n }\n localStorage.removeItem(`${this.storageKey}:${key}`);\n }\n}\n","/** @link [Proof Key for Code Exchange by OAuth Public Clients](https://datatracker.ietf.org/doc/html/rfc7636) */\n\nimport { LogtoError } from '@logto/client';\nimport { fromUint8Array } from 'js-base64';\n\n/**\n * @param length The length of the raw random data.\n */\nconst generateRandomString = (length = 64) =>\n fromUint8Array(crypto.getRandomValues(new Uint8Array(length)), true);\n\n/**\n * Generates random string for state and encodes them in url safe base64\n */\nexport const generateState = () => generateRandomString();\n\n/**\n * Generates code verifier\n *\n * @link [Client Creates a Code Verifier](https://datatracker.ietf.org/doc/html/rfc7636#section-4.1)\n */\nexport const generateCodeVerifier = () => generateRandomString();\n\n/**\n * Calculates the S256 PKCE code challenge for an arbitrary code verifier and encodes it in url safe base64\n *\n * @param {String} codeVerifier Code verifier to calculate the S256 code challenge for\n * @link [Client Creates the Code Challenge](https://datatracker.ietf.org/doc/html/rfc7636#section-4.2)\n */\nexport const generateCodeChallenge = async (codeVerifier: string): Promise<string> => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (crypto.subtle === undefined) {\n /**\n * `crypto.subtle` is available only in secure contexts (HTTPS) in some or all supporting browsers,\n * https://developer.mozilla.org/en-US/docs/Web/API/Crypto/subtle\n * https://www.chromium.org/blink/webcrypto/#accessing-it\n */\n throw new LogtoError('crypto_subtle_unavailable');\n }\n\n const encodedCodeVerifier = new TextEncoder().encode(codeVerifier);\n const codeChallenge = new Uint8Array(await crypto.subtle.digest('SHA-256', encodedCodeVerifier));\n\n return fromUint8Array(codeChallenge, true);\n};\n"],"names":[],"version":3,"file":"index.js.map"}
package/lib/module.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":";;;AAAA;ACGO,MAAM,yCAAyB,GAAG,CAAC,KAAK,CAAC,AAAC;AAE1C,MAAM,yCAAc;IAGzB,YAAY,KAAa,CAAE;QACzB,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,yCAAyB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;KAC3D;IAED,MAAM,OAAO,CAAC,GAAe,EAA6B;QACxD,IAAI,GAAG,KAAK,eAAe,EACzB,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAGjD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KAC1D;IAED,MAAM,OAAO,CAAC,GAAe,EAAE,KAAa,EAAiB;QAC3D,IAAI,GAAG,KAAK,eAAe,EAAE;YAC3B,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAE/C,OAAO;SACR;QACD,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;KAC1D;IAED,MAAM,UAAU,CAAC,GAAe,EAAiB;QAC/C,IAAI,GAAG,KAAK,eAAe,EAAE;YAC3B,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAE3C,OAAO;SACR;QACD,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KACtD;CACF;;;ACnCD;;AAGA;;GAEG,CACH,MAAM,0CAAoB,GAAG,CAAC,MAAM,GAAG,EAAE,GACvC,CAAA,GAAA,qBAAc,CAAA,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,AAAC;AAKhE,MAAM,yCAAa,GAAG,IAAM,0CAAoB,EAAE,AAAC;AAOnD,MAAM,yCAAoB,GAAG,IAAM,0CAAoB,EAAE,AAAC;AAQ1D,MAAM,yCAAqB,GAAG,OAAO,YAAoB,GAAsB;IACpF,uEAAuE;IACvE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAC7B;;;;OAIG,CACH,MAAM,IAAI,CAAA,GAAA,sCAAU,CAAA,CAAC,2BAA2B,CAAC,CAAC;IAGpD,MAAM,mBAAmB,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,AAAC;IACnE,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,AAAC;IAEjG,OAAO,CAAA,GAAA,qBAAc,CAAA,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;CAC5C,AAAC;;;;AF/BF,MAAM,8BAAQ,GAAG,CAAC,GAAW,GAAK;IAChC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CAC7B,AAAC;AAEa,uDAA0B,CAAA,GAAA,kBAAU,CAAA;IACjD,YAAY,MAAmB,CAAE;QAC/B,MAAM,SAAS,GAAG,CAAA,GAAA,sBAAe,CAAA,CAAC,KAAK,CAAC,AAAC;QACzC,KAAK,CAAC,MAAM,EAAE;uBACZ,SAAS;sBACT,8BAAQ;YACR,OAAO,EAAE,IAAI,CAAA,GAAA,yCAAc,CAAA,CAAC,MAAM,CAAC,KAAK,CAAC;mCACzC,yCAAqB;kCACrB,yCAAoB;2BACpB,yCAAa;SACd,CAAC,CAAC;KACJ;CACF","sources":["packages/browser/src/index.ts","packages/browser/src/storage.ts","packages/browser/src/utils/generators.ts"],"sourcesContent":["import BaseClient, { createRequester, LogtoConfig } from '@logto/client';\n\nimport { BrowserStorage } from './storage';\nimport { generateCodeChallenge, generateCodeVerifier, generateState } from './utils/generators';\n\nexport type {\n IdTokenClaims,\n LogtoErrorCode,\n LogtoConfig,\n LogtoClientErrorCode,\n} from '@logto/client';\nexport { LogtoError, OidcError, Prompt, LogtoRequestError, LogtoClientError } from '@logto/client';\n\nconst navigate = (url: string) => {\n window.location.assign(url);\n};\n\nexport default class LogtoClient extends BaseClient {\n constructor(config: LogtoConfig) {\n const requester = createRequester(fetch);\n super(config, {\n requester,\n navigate,\n storage: new BrowserStorage(config.appId),\n generateCodeChallenge,\n generateCodeVerifier,\n generateState,\n });\n }\n}\n","import { Storage, StorageKey } from '@logto/client';\nimport { Nullable } from '@silverhand/essentials';\n\nexport const logtoStorageItemKeyPrefix = `logto`;\n\nexport class BrowserStorage implements Storage {\n private readonly storageKey: string;\n\n constructor(appId: string) {\n this.storageKey = `${logtoStorageItemKeyPrefix}:${appId}`;\n }\n\n async getItem(key: StorageKey): Promise<Nullable<string>> {\n if (key === 'signInSession') {\n return sessionStorage.getItem(this.storageKey);\n }\n\n return localStorage.getItem(`${this.storageKey}:${key}`);\n }\n\n async setItem(key: StorageKey, value: string): Promise<void> {\n if (key === 'signInSession') {\n sessionStorage.setItem(this.storageKey, value);\n\n return;\n }\n localStorage.setItem(`${this.storageKey}:${key}`, value);\n }\n\n async removeItem(key: StorageKey): Promise<void> {\n if (key === 'signInSession') {\n sessionStorage.removeItem(this.storageKey);\n\n return;\n }\n localStorage.removeItem(`${this.storageKey}:${key}`);\n }\n}\n","/** @link [Proof Key for Code Exchange by OAuth Public Clients](https://datatracker.ietf.org/doc/html/rfc7636) */\n\nimport { LogtoError } from '@logto/client';\nimport { fromUint8Array } from 'js-base64';\n\n/**\n * @param length The length of the raw random data.\n */\nconst generateRandomString = (length = 64) =>\n fromUint8Array(crypto.getRandomValues(new Uint8Array(length)), true);\n\n/**\n * Generates random string for state and encodes them in url safe base64\n */\nexport const generateState = () => generateRandomString();\n\n/**\n * Generates code verifier\n *\n * @link [Client Creates a Code Verifier](https://datatracker.ietf.org/doc/html/rfc7636#section-4.1)\n */\nexport const generateCodeVerifier = () => generateRandomString();\n\n/**\n * Calculates the S256 PKCE code challenge for an arbitrary code verifier and encodes it in url safe base64\n *\n * @param {String} codeVerifier Code verifier to calculate the S256 code challenge for\n * @link [Client Creates the Code Challenge](https://datatracker.ietf.org/doc/html/rfc7636#section-4.2)\n */\nexport const generateCodeChallenge = async (codeVerifier: string): Promise<string> => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (crypto.subtle === undefined) {\n /**\n * `crypto.subtle` is available only in secure contexts (HTTPS) in some or all supporting browsers,\n * https://developer.mozilla.org/en-US/docs/Web/API/Crypto/subtle\n * https://www.chromium.org/blink/webcrypto/#accessing-it\n */\n throw new LogtoError('crypto_subtle_unavailable');\n }\n\n const encodedCodeVerifier = new TextEncoder().encode(codeVerifier);\n const codeChallenge = new Uint8Array(await crypto.subtle.digest('SHA-256', encodedCodeVerifier));\n\n return fromUint8Array(codeChallenge, true);\n};\n"],"names":[],"version":3,"file":"module.js.map"}
1
+ {"mappings":";;;AAAA;ACGO,MAAM,yCAAyB,GAAG,CAAC,KAAK,CAAC,AAAC;AAE1C,MAAM,yCAAc;IAGzB,YAAY,KAAa,CAAE;QACzB,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,yCAAyB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;KAC3D;IAED,MAAM,OAAO,CAAC,GAAe,EAA6B;QACxD,IAAI,GAAG,KAAK,eAAe,EACzB,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAGjD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KAC1D;IAED,MAAM,OAAO,CAAC,GAAe,EAAE,KAAa,EAAiB;QAC3D,IAAI,GAAG,KAAK,eAAe,EAAE;YAC3B,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAE/C,OAAO;SACR;QACD,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;KAC1D;IAED,MAAM,UAAU,CAAC,GAAe,EAAiB;QAC/C,IAAI,GAAG,KAAK,eAAe,EAAE;YAC3B,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAE3C,OAAO;SACR;QACD,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KACtD;CACF;;;ACnCD;;AAGA;;GAEG,CACH,MAAM,0CAAoB,GAAG,CAAC,MAAM,GAAG,EAAE,GACvC,CAAA,GAAA,qBAAc,CAAA,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,AAAC;AAKhE,MAAM,yCAAa,GAAG,IAAM,0CAAoB,EAAE,AAAC;AAOnD,MAAM,yCAAoB,GAAG,IAAM,0CAAoB,EAAE,AAAC;AAQ1D,MAAM,yCAAqB,GAAG,OAAO,YAAoB,GAAsB;IACpF,uEAAuE;IACvE,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAC7B;;;;OAIG,CACH,MAAM,IAAI,CAAA,GAAA,sCAAU,CAAA,CAAC,2BAA2B,CAAC,CAAC;IAGpD,MAAM,mBAAmB,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,AAAC;IACnE,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,AAAC;IAEjG,OAAO,CAAA,GAAA,qBAAc,CAAA,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;CAC5C,AAAC;;;;AF9BF,MAAM,8BAAQ,GAAG,CAAC,GAAW,GAAK;IAChC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CAC7B,AAAC;AAEa,uDAA0B,CAAA,GAAA,kBAAU,CAAA;IACjD,YAAY,MAAmB,CAAE;QAC/B,MAAM,SAAS,GAAG,CAAA,GAAA,sBAAe,CAAA,CAAC,KAAK,CAAC,AAAC;QACzC,KAAK,CAAC,MAAM,EAAE;uBACZ,SAAS;sBACT,8BAAQ;YACR,OAAO,EAAE,IAAI,CAAA,GAAA,yCAAc,CAAA,CAAC,MAAM,CAAC,KAAK,CAAC;mCACzC,yCAAqB;kCACrB,yCAAoB;2BACpB,yCAAa;SACd,CAAC,CAAC;KACJ;CACF","sources":["packages/browser/src/index.ts","packages/browser/src/storage.ts","packages/browser/src/utils/generators.ts"],"sourcesContent":["import BaseClient, { createRequester, LogtoConfig } from '@logto/client';\n\nimport { BrowserStorage } from './storage';\nimport { generateCodeChallenge, generateCodeVerifier, generateState } from './utils/generators';\n\nexport type {\n IdTokenClaims,\n LogtoErrorCode,\n LogtoConfig,\n LogtoClientErrorCode,\n UserInfoResponse,\n} from '@logto/client';\nexport { LogtoError, OidcError, Prompt, LogtoRequestError, LogtoClientError } from '@logto/client';\n\nconst navigate = (url: string) => {\n window.location.assign(url);\n};\n\nexport default class LogtoClient extends BaseClient {\n constructor(config: LogtoConfig) {\n const requester = createRequester(fetch);\n super(config, {\n requester,\n navigate,\n storage: new BrowserStorage(config.appId),\n generateCodeChallenge,\n generateCodeVerifier,\n generateState,\n });\n }\n}\n","import { Storage, StorageKey } from '@logto/client';\nimport { Nullable } from '@silverhand/essentials';\n\nexport const logtoStorageItemKeyPrefix = `logto`;\n\nexport class BrowserStorage implements Storage {\n private readonly storageKey: string;\n\n constructor(appId: string) {\n this.storageKey = `${logtoStorageItemKeyPrefix}:${appId}`;\n }\n\n async getItem(key: StorageKey): Promise<Nullable<string>> {\n if (key === 'signInSession') {\n return sessionStorage.getItem(this.storageKey);\n }\n\n return localStorage.getItem(`${this.storageKey}:${key}`);\n }\n\n async setItem(key: StorageKey, value: string): Promise<void> {\n if (key === 'signInSession') {\n sessionStorage.setItem(this.storageKey, value);\n\n return;\n }\n localStorage.setItem(`${this.storageKey}:${key}`, value);\n }\n\n async removeItem(key: StorageKey): Promise<void> {\n if (key === 'signInSession') {\n sessionStorage.removeItem(this.storageKey);\n\n return;\n }\n localStorage.removeItem(`${this.storageKey}:${key}`);\n }\n}\n","/** @link [Proof Key for Code Exchange by OAuth Public Clients](https://datatracker.ietf.org/doc/html/rfc7636) */\n\nimport { LogtoError } from '@logto/client';\nimport { fromUint8Array } from 'js-base64';\n\n/**\n * @param length The length of the raw random data.\n */\nconst generateRandomString = (length = 64) =>\n fromUint8Array(crypto.getRandomValues(new Uint8Array(length)), true);\n\n/**\n * Generates random string for state and encodes them in url safe base64\n */\nexport const generateState = () => generateRandomString();\n\n/**\n * Generates code verifier\n *\n * @link [Client Creates a Code Verifier](https://datatracker.ietf.org/doc/html/rfc7636#section-4.1)\n */\nexport const generateCodeVerifier = () => generateRandomString();\n\n/**\n * Calculates the S256 PKCE code challenge for an arbitrary code verifier and encodes it in url safe base64\n *\n * @param {String} codeVerifier Code verifier to calculate the S256 code challenge for\n * @link [Client Creates the Code Challenge](https://datatracker.ietf.org/doc/html/rfc7636#section-4.2)\n */\nexport const generateCodeChallenge = async (codeVerifier: string): Promise<string> => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (crypto.subtle === undefined) {\n /**\n * `crypto.subtle` is available only in secure contexts (HTTPS) in some or all supporting browsers,\n * https://developer.mozilla.org/en-US/docs/Web/API/Crypto/subtle\n * https://www.chromium.org/blink/webcrypto/#accessing-it\n */\n throw new LogtoError('crypto_subtle_unavailable');\n }\n\n const encodedCodeVerifier = new TextEncoder().encode(codeVerifier);\n const codeChallenge = new Uint8Array(await crypto.subtle.digest('SHA-256', encodedCodeVerifier));\n\n return fromUint8Array(codeChallenge, true);\n};\n"],"names":[],"version":3,"file":"module.js.map"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logto/browser",
3
- "version": "1.0.0-beta.4",
3
+ "version": "1.0.0-beta.6",
4
4
  "source": "./src/index.ts",
5
5
  "main": "./lib/index.js",
6
6
  "exports": {
@@ -29,8 +29,8 @@
29
29
  "prepack": "pnpm test"
30
30
  },
31
31
  "dependencies": {
32
- "@logto/client": "^1.0.0-beta.4",
33
- "@silverhand/essentials": "^1.2.0",
32
+ "@logto/client": "^1.0.0-beta.6",
33
+ "@silverhand/essentials": "^1.2.1",
34
34
  "js-base64": "^3.7.2"
35
35
  },
36
36
  "devDependencies": {
@@ -60,5 +60,5 @@
60
60
  "publishConfig": {
61
61
  "access": "public"
62
62
  },
63
- "gitHead": "8b0f8947ac211fd8d4b6e2e00ce6acfc9dd344db"
63
+ "gitHead": "952fed1f1c61d30d539b2256501c8eb7d865c022"
64
64
  }