@atlasauth/chrome-extension 0.1.0 → 0.2.1

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/CHANGELOG.md ADDED
@@ -0,0 +1,25 @@
1
+ # @atlasauth/chrome-extension changelog
2
+
3
+ ## 0.2.1
4
+ - **`frontendApi` is validated at start-up.** A missing, empty or malformed value now throws an
5
+ `AtlasConfigError` (from `@atlasauth/js`; `code: 'FRONTEND_API_REQUIRED'` or `'FRONTEND_API_INVALID'`)
6
+ instead of silently sending requests to relative URLs on the app's own origin. Accepted: an absolute
7
+ `https:` URL (`http:` only for localhost / local development hosts). An extension origin cannot host the Frontend API, so `"same-origin"` is refused.
8
+
9
+ ## 0.2.0
10
+
11
+ ### Added
12
+ - Native-session support: `createNativeSessionManager()` returns a `NativeSessionManager` backed by `chrome.storage`, rehydrating a stored session and persisting each rotated refresh token. Options are typed as `NativeSessionOptions`.
13
+ - `clearNativeSession()` to remove the persisted native session on sign-out, and `DEFAULT_NATIVE_SESSION_KEY`.
14
+ - Re-exports `NativeSessionManager`, `NativeSession`, `exchangeForSession()` and `refreshNativeSession()` from `@atlasauth/js`. All are also available from `@atlasauth/chrome-extension/background`.
15
+
16
+ ## 0.1.0
17
+
18
+ First published release.
19
+
20
+ ### Added
21
+ - Manifest V3 support with a React-free root entry, safe to import from a background service worker or content script.
22
+ - `StorageCache` token store over `chrome.storage.local` (`TokenStore`, `ChromeStorageArea`, `DEFAULT_TOKEN_KEY`), plus `createMemoryStorageArea()` for tests.
23
+ - `createAtlasClient()` returning an `AtlasClient` whose requests carry the session token as a bearer, and `syncSessionToken()` for background token refresh; helpers `bearerFetch()`, `persistingBearerFetch()` and `decodeTokenClaims()`.
24
+ - `@atlasauth/chrome-extension/background` entry exposing the same helpers for service workers.
25
+ - `@atlasauth/chrome-extension/react` entry with an `AtlasProvider` wired to extension storage and a re-export of `@atlasauth/react`. React is an optional peer.
package/README.md CHANGED
@@ -88,3 +88,23 @@ Add the `storage` permission and the Atlas FAPI origin as a host permission:
88
88
  "host_permissions": ["https://fapi.your-instance.atlasauth.net/*"]
89
89
  }
90
90
  ```
91
+
92
+ ## Native session (first-party OAuth → session)
93
+
94
+ A first-party extension holding an Atlas OAuth access token can trade it for a
95
+ cookie-free session with `createNativeSessionManager`. It persists each rotated
96
+ refresh token in `chrome.storage` under its own key, so a woken service worker
97
+ rehydrates it and auto-refreshes the short-lived JWT:
98
+
99
+ ```ts
100
+ import { createNativeSessionManager, exchangeForSession } from '@atlasauth/chrome-extension';
101
+
102
+ const mgr = await createNativeSessionManager({
103
+ frontendApi: 'https://fapi.your-instance.atlasauth.net',
104
+ publishableKey: 'pk_...',
105
+ });
106
+ const session = await exchangeForSession({ baseUrl, clientId, accessToken });
107
+ if (session) mgr.setSession(session);
108
+
109
+ const headers = await mgr.authHeaders(); // { Authorization, 'x-publishable-key' }
110
+ ```
@@ -20,3 +20,4 @@
20
20
  */
21
21
  export * from './storage';
22
22
  export * from './client';
23
+ export * from './native-session';
@@ -36,4 +36,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  */
37
37
  __exportStar(require("./storage"), exports);
38
38
  __exportStar(require("./client"), exports);
39
+ __exportStar(require("./native-session"), exports);
39
40
  //# sourceMappingURL=background.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"background.js","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,4CAA0B;AAC1B,2CAAyB"}
1
+ {"version":3,"file":"background.js","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,4CAA0B;AAC1B,2CAAyB;AACzB,mDAAiC"}
package/dist/client.js CHANGED
@@ -83,11 +83,18 @@ function persistingBearerFetch(fetchImpl, store) {
83
83
  * the same in a service worker as on a page.
84
84
  */
85
85
  function createAtlasClient(options) {
86
+ // Throws an `AtlasConfigError` on a missing/invalid value. An extension's own
87
+ // origin (chrome-extension://…) is not where the Frontend API lives, so
88
+ // "same-origin" / a bare path is refused too.
89
+ const baseUrl = (0, js_1.resolveFrontendApi)(options.frontendApi, {
90
+ component: 'createAtlasClient()',
91
+ allowSameOrigin: false,
92
+ });
86
93
  const store = options.store ?? new storage_1.StorageCache();
87
94
  const fetchImpl = options.fetchImpl ?? fetch;
88
95
  const fapi = new js_1.FapiClient({
89
96
  publishableKey: options.publishableKey,
90
- baseUrl: options.frontendApi,
97
+ baseUrl,
91
98
  fetchImpl: bearerFetch(fetchImpl, store),
92
99
  });
93
100
  const client = {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -13,3 +13,4 @@
13
13
  */
14
14
  export * from './storage';
15
15
  export * from './client';
16
+ export * from './native-session';
package/dist/index.js CHANGED
@@ -29,4 +29,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  */
30
30
  __exportStar(require("./storage"), exports);
31
31
  __exportStar(require("./client"), exports);
32
+ __exportStar(require("./native-session"), exports);
32
33
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;GAYG;AACH,4CAA0B;AAC1B,2CAAyB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;GAYG;AACH,4CAA0B;AAC1B,2CAAyB;AACzB,mDAAiC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Native session for a Chrome / MV3 extension.
3
+ *
4
+ * A thin wiring of the framework-agnostic {@link NativeSessionManager} from
5
+ * `@atlasauth/js` to this package's {@link TokenStore} over `chrome.storage`.
6
+ * The core manager owns the exchange/refresh/rotation; this file persists each
7
+ * rotated session into `chrome.storage.local` (so the rotating refresh token
8
+ * survives the service worker being torn down AND is readable from every
9
+ * extension surface) and rehydrates the manager from it on each cold start.
10
+ *
11
+ * The whole session is stored as one JSON string under its OWN key, separate
12
+ * from {@link StorageCache}'s session-token slot, so the two coexist.
13
+ */
14
+ import { NativeSessionManager } from '@atlasauth/js';
15
+ import { type TokenStore } from './storage';
16
+ /** The `chrome.storage` key the serialized native session is kept under. */
17
+ export declare const DEFAULT_NATIVE_SESSION_KEY = "__atlas_native_session";
18
+ export interface NativeSessionOptions {
19
+ /** The instance's FAPI origin, e.g. `https://fapi.acme.atlasauth.net`. */
20
+ frontendApi: string;
21
+ /** The publishable key — sent on the refresh call and in `authHeaders()`. */
22
+ publishableKey: string;
23
+ /** The first-party OAuth client id (for a later in-manager exchange). */
24
+ clientId?: string;
25
+ /**
26
+ * Where the session is persisted. Defaults to a {@link StorageCache} over
27
+ * `chrome.storage.local` under {@link DEFAULT_NATIVE_SESSION_KEY}. Inject a
28
+ * memory-backed store (see `createMemoryStorageArea`) in tests.
29
+ */
30
+ store?: TokenStore;
31
+ /** Injectable for tests; defaults to the platform `fetch`. */
32
+ fetchImpl?: typeof fetch;
33
+ /** Injectable clock, epoch ms. Defaults to `Date.now`. */
34
+ now?: () => number;
35
+ }
36
+ /**
37
+ * Build a {@link NativeSessionManager} wired to `chrome.storage`.
38
+ *
39
+ * Async because `chrome.storage` is async: it reads whatever session the store
40
+ * holds and seeds the manager, so a freshly-woken service worker (or a reopened
41
+ * popup) is signed in before its first request. Thereafter every rotation is
42
+ * written straight back through the manager's `persist` hook, so the next
43
+ * surface — and the next cold start — picks up the rotated refresh token.
44
+ */
45
+ export declare function createNativeSessionManager(options: NativeSessionOptions): Promise<NativeSessionManager>;
46
+ /** Clear the persisted native session (sign-out). */
47
+ export declare function clearNativeSession(store: TokenStore): Promise<void>;
48
+ export { NativeSessionManager, type NativeSession } from '@atlasauth/js';
49
+ export { exchangeForSession, refreshNativeSession } from '@atlasauth/js';
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ /**
3
+ * Native session for a Chrome / MV3 extension.
4
+ *
5
+ * A thin wiring of the framework-agnostic {@link NativeSessionManager} from
6
+ * `@atlasauth/js` to this package's {@link TokenStore} over `chrome.storage`.
7
+ * The core manager owns the exchange/refresh/rotation; this file persists each
8
+ * rotated session into `chrome.storage.local` (so the rotating refresh token
9
+ * survives the service worker being torn down AND is readable from every
10
+ * extension surface) and rehydrates the manager from it on each cold start.
11
+ *
12
+ * The whole session is stored as one JSON string under its OWN key, separate
13
+ * from {@link StorageCache}'s session-token slot, so the two coexist.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.refreshNativeSession = exports.exchangeForSession = exports.NativeSessionManager = exports.DEFAULT_NATIVE_SESSION_KEY = void 0;
17
+ exports.createNativeSessionManager = createNativeSessionManager;
18
+ exports.clearNativeSession = clearNativeSession;
19
+ const js_1 = require("@atlasauth/js");
20
+ const storage_1 = require("./storage");
21
+ /** The `chrome.storage` key the serialized native session is kept under. */
22
+ exports.DEFAULT_NATIVE_SESSION_KEY = '__atlas_native_session';
23
+ /**
24
+ * Build a {@link NativeSessionManager} wired to `chrome.storage`.
25
+ *
26
+ * Async because `chrome.storage` is async: it reads whatever session the store
27
+ * holds and seeds the manager, so a freshly-woken service worker (or a reopened
28
+ * popup) is signed in before its first request. Thereafter every rotation is
29
+ * written straight back through the manager's `persist` hook, so the next
30
+ * surface — and the next cold start — picks up the rotated refresh token.
31
+ */
32
+ async function createNativeSessionManager(options) {
33
+ // An extension's own origin (chrome-extension://…) is not where the Frontend
34
+ // API lives, so "same-origin" / a bare path is refused along with a missing value.
35
+ const baseUrl = (0, js_1.resolveFrontendApi)(options.frontendApi, {
36
+ component: 'createNativeSessionManager()',
37
+ allowSameOrigin: false,
38
+ });
39
+ const store = options.store ?? new storage_1.StorageCache({ key: exports.DEFAULT_NATIVE_SESSION_KEY });
40
+ const initial = (0, js_1.parseNativeSession)(await store.getToken()) ?? undefined;
41
+ return new js_1.NativeSessionManager({
42
+ baseUrl,
43
+ publishableKey: options.publishableKey,
44
+ clientId: options.clientId,
45
+ initial,
46
+ fetchImpl: options.fetchImpl,
47
+ now: options.now,
48
+ // Fire-and-forget: `chrome.storage` writes are async and a failure must not
49
+ // break the live session held in memory.
50
+ persist: (session) => {
51
+ void store.setToken((0, js_1.serializeNativeSession)(session)).catch(() => undefined);
52
+ },
53
+ });
54
+ }
55
+ /** Clear the persisted native session (sign-out). */
56
+ async function clearNativeSession(store) {
57
+ await store.removeToken();
58
+ }
59
+ var js_2 = require("@atlasauth/js");
60
+ Object.defineProperty(exports, "NativeSessionManager", { enumerable: true, get: function () { return js_2.NativeSessionManager; } });
61
+ var js_3 = require("@atlasauth/js");
62
+ Object.defineProperty(exports, "exchangeForSession", { enumerable: true, get: function () { return js_3.exchangeForSession; } });
63
+ Object.defineProperty(exports, "refreshNativeSession", { enumerable: true, get: function () { return js_3.refreshNativeSession; } });
64
+ //# sourceMappingURL=native-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-session.js","sourceRoot":"","sources":["../src/native-session.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AA0CH,gEAyBC;AAGD,gDAEC;AAtED,sCAMuB;AACvB,uCAA0D;AAE1D,4EAA4E;AAC/D,QAAA,0BAA0B,GAAG,wBAAwB,CAAC;AAqBnE;;;;;;;;GAQG;AACI,KAAK,UAAU,0BAA0B,CAC9C,OAA6B;IAE7B,6EAA6E;IAC7E,mFAAmF;IACnF,MAAM,OAAO,GAAG,IAAA,uBAAkB,EAAC,OAAO,CAAC,WAAW,EAAE;QACtD,SAAS,EAAE,8BAA8B;QACzC,eAAe,EAAE,KAAK;KACvB,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,sBAAY,CAAC,EAAE,GAAG,EAAE,kCAA0B,EAAE,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,IAAA,uBAAkB,EAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,SAAS,CAAC;IAExE,OAAO,IAAI,yBAAoB,CAAC;QAC9B,OAAO;QACP,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO;QACP,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,4EAA4E;QAC5E,yCAAyC;QACzC,OAAO,EAAE,CAAC,OAAsB,EAAE,EAAE;YAClC,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAA,2BAAsB,EAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9E,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,qDAAqD;AAC9C,KAAK,UAAU,kBAAkB,CAAC,KAAiB;IACxD,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED,oCAAyE;AAAhE,0GAAA,oBAAoB,OAAA;AAC7B,oCAAyE;AAAhE,wGAAA,kBAAkB,OAAA;AAAE,0GAAA,oBAAoB,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlasauth/chrome-extension",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "exports": {
@@ -18,8 +18,8 @@
18
18
  }
19
19
  },
20
20
  "dependencies": {
21
- "@atlasauth/js": "0.1.4",
22
- "@atlasauth/react": "0.1.13"
21
+ "@atlasauth/js": "0.6.0",
22
+ "@atlasauth/react": "0.5.0"
23
23
  },
24
24
  "peerDependencies": {
25
25
  "react": ">=18"
@@ -40,7 +40,8 @@
40
40
  },
41
41
  "files": [
42
42
  "dist",
43
- "README.md"
43
+ "README.md",
44
+ "CHANGELOG.md"
44
45
  ],
45
46
  "scripts": {
46
47
  "build": "tsc -p tsconfig.build.json",