@fireweaveai/web-sdk 2.3.0-staging.2 → 3.0.0-staging.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/README.md +100 -4
- package/dist/application/client.d.ts +12 -27
- package/dist/application/client.d.ts.map +1 -1
- package/dist/application/client.js +21 -38
- package/dist/application/client.js.map +1 -1
- package/dist/application/ports.d.ts +4 -4
- package/dist/application/ports.d.ts.map +1 -1
- package/dist/application/runtime.d.ts +2 -2
- package/dist/application/runtime.d.ts.map +1 -1
- package/dist/application/runtime.js +22 -19
- package/dist/application/runtime.js.map +1 -1
- package/dist/build/node/define.d.ts +14 -0
- package/dist/build/node/define.js +35 -0
- package/dist/build/node/define.js.map +1 -0
- package/dist/build/node/shared.d.ts +19 -0
- package/dist/build/node/shared.js +44 -0
- package/dist/build/node/shared.js.map +1 -0
- package/dist/build/node/vite.d.ts +53 -0
- package/dist/build/node/vite.js +103 -0
- package/dist/build/node/vite.js.map +1 -0
- package/dist/build/src/start/build-info.d.ts +2 -0
- package/dist/build/src/start/build-info.js +7 -0
- package/dist/build/src/start/build-info.js.map +1 -0
- package/dist/build/src/start/names.d.ts +44 -0
- package/dist/build/src/start/names.js +45 -0
- package/dist/build/src/start/names.js.map +1 -0
- package/dist/build/src/start/policy.d.ts +70 -0
- package/dist/build/src/start/policy.js +124 -0
- package/dist/build/src/start/policy.js.map +1 -0
- package/dist/domain/errors.d.ts +1 -1
- package/dist/domain/errors.d.ts.map +1 -1
- package/dist/domain/errors.js +1 -1
- package/dist/domain/errors.js.map +1 -1
- package/dist/domain/types.d.ts +3 -3
- package/dist/domain/types.d.ts.map +1 -1
- package/dist/domain/validation.d.ts +4 -4
- package/dist/domain/validation.js +7 -7
- package/dist/domain/validation.js.map +1 -1
- package/dist/infrastructure/adapters/inmemory.js +1 -1
- package/dist/infrastructure/adapters/inmemory.js.map +1 -1
- package/dist/infrastructure/adapters/remote.js +11 -11
- package/dist/infrastructure/adapters/remote.js.map +1 -1
- package/dist/start/build-info.d.ts +3 -0
- package/dist/start/build-info.d.ts.map +1 -0
- package/dist/start/build-info.js +7 -0
- package/dist/start/build-info.js.map +1 -0
- package/dist/start/control-points.d.ts +25 -0
- package/dist/start/control-points.d.ts.map +1 -0
- package/dist/start/control-points.js +57 -0
- package/dist/start/control-points.js.map +1 -0
- package/dist/start/fw.d.ts +43 -0
- package/dist/start/fw.d.ts.map +1 -0
- package/dist/start/fw.js +135 -0
- package/dist/start/fw.js.map +1 -0
- package/dist/start/identity.d.ts +20 -0
- package/dist/start/identity.d.ts.map +1 -0
- package/dist/start/identity.js +85 -0
- package/dist/start/identity.js.map +1 -0
- package/dist/start/index.d.ts +35 -0
- package/dist/start/index.d.ts.map +1 -0
- package/dist/start/index.js +30 -0
- package/dist/start/index.js.map +1 -0
- package/dist/start/names.d.ts +45 -0
- package/dist/start/names.d.ts.map +1 -0
- package/dist/start/names.js +45 -0
- package/dist/start/names.js.map +1 -0
- package/dist/start/policy.d.ts +71 -0
- package/dist/start/policy.d.ts.map +1 -0
- package/dist/start/policy.js +124 -0
- package/dist/start/policy.js.map +1 -0
- package/dist/start/state.d.ts +104 -0
- package/dist/start/state.d.ts.map +1 -0
- package/dist/start/state.js +361 -0
- package/dist/start/state.js.map +1 -0
- package/package.json +23 -3
package/README.md
CHANGED
|
@@ -4,9 +4,9 @@ Fireweave control points for the browser ([ADR-0009](../../docs/adr/0009-browser
|
|
|
4
4
|
**control points** and **target registration**, the two v1 capabilities
|
|
5
5
|
([spec/control-points.md](../../spec/control-points.md) "Scope of v1"; spec v0.1.0).
|
|
6
6
|
|
|
7
|
-
- **
|
|
7
|
+
- **Secret-free by construction.** No vendor SDK dependency, no environment reads, and vendor/secret key shapes are rejected at the door.
|
|
8
8
|
- **Reads are synchronous** — `controlPoints.getBooleanValue(...)` returns a value directly, no `await`, safe inside a render path. `initFireweave` prefetches a decision cache once per context; reads afterward are a pure in-memory lookup.
|
|
9
|
-
- **Bun is the toolchain.**
|
|
9
|
+
- **Bun is the toolchain.** The browser code is tested on Bun with happy-dom. It reads no environment and imports no runtime built-ins, so Node/Deno are not target runtimes for it. The two build-time entries, `/vite` and `/define`, run in Node while your bundler loads its config, and never ship to the browser.
|
|
10
10
|
|
|
11
11
|
## Install
|
|
12
12
|
|
|
@@ -14,6 +14,102 @@ Fireweave control points for the browser ([ADR-0009](../../docs/adr/0009-browser
|
|
|
14
14
|
bun add @fireweaveai/web-sdk # or: npm install @fireweaveai/web-sdk
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
+
## Quick start (one line: the start profile)
|
|
18
|
+
|
|
19
|
+
The start profile ([ADR-0012](../../docs/adr/0012-start-profile.md)) replaces the generated
|
|
20
|
+
`fw-harness.ts` / `fw-providers.ts` files with one plugin, one start file and one control-points file.
|
|
21
|
+
The core API below (`initFireweave`) is unchanged.
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
// vite.config.ts (Nuxt / Astro: the same call under the framework config's `vite.plugins`)
|
|
25
|
+
import { fireweave } from '@fireweaveai/web-sdk/vite';
|
|
26
|
+
export default defineConfig({ plugins: [react(), fireweave()] });
|
|
27
|
+
|
|
28
|
+
// src/fireweave/control-points.ts: every control point the app reads, with its local value
|
|
29
|
+
import { defineControlPoints } from '@fireweaveai/web-sdk/start';
|
|
30
|
+
export const controlPoints = defineControlPoints({
|
|
31
|
+
'new-checkout': { local: true, description: 'New checkout flow' },
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// src/fireweave/start.ts: imported first by your entry module
|
|
35
|
+
import { start } from '@fireweaveai/web-sdk/start';
|
|
36
|
+
import { controlPoints } from './control-points';
|
|
37
|
+
export const ready = start({ controlPoints });
|
|
38
|
+
|
|
39
|
+
// src/main.tsx: render once the first prefetch settles, so first render has decisions
|
|
40
|
+
import { ready } from './fireweave/start';
|
|
41
|
+
ready.then(() => createRoot(document.getElementById('root')!).render(<App />));
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import { fw } from '@fireweaveai/web-sdk/start';
|
|
46
|
+
|
|
47
|
+
// @fireweave-controlpoint new-checkout
|
|
48
|
+
if (fw.controlPoints.getBooleanValue('new-checkout', false)) { /* synchronous, never throws */ }
|
|
49
|
+
|
|
50
|
+
await fw.identify(user.id, { plan: user.plan }); // sign-in / session restore
|
|
51
|
+
await fw.reset(); // sign-out: back to this browser's device id
|
|
52
|
+
fw.deviceId(); // the anonymous key, for analytics joins
|
|
53
|
+
fw.setPersistence('memory'); // consent withdrawn; fw.forget() also mints a new id
|
|
54
|
+
fw.status(); // mode, channel, host, key source, problem; never the key
|
|
55
|
+
fw.subscribe((state) => rerender()); // fires on settle and after identify / reset
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Set the browser key in the **build** environment (CI or the deploy's build step), not in a
|
|
59
|
+
developer `.env`, so `vite dev` stays local:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
FIREWEAVE_BROWSER_KEY=fw_public_...
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Options and overrides
|
|
66
|
+
|
|
67
|
+
Each value resolves as: the `start()` option, then what the build helper injected, then the default.
|
|
68
|
+
The build helpers read the process environment and, for Vite, the app's `.env` files.
|
|
69
|
+
|
|
70
|
+
| `start()` option | Build variable | Default | Notes |
|
|
71
|
+
| --- | --- | --- | --- |
|
|
72
|
+
| `controlPoints` | — | `{}` | `defineControlPoints({...})` from `src/fireweave/control-points.ts`. Served in local mode only; a read of a key missing from it warns once. |
|
|
73
|
+
| `mode` | — | inferred | `'remote'` or `'local'`. Without it: a key means remote; no key and a development environment name means local; anything else fails closed. |
|
|
74
|
+
| `environment` | `FIREWEAVE_ENV`, then `APP_ENV` (the dev server and Vitest also use Vite's mode) | — | Only feeds the mode rule. A build never infers local from `--mode development`. |
|
|
75
|
+
| `url` | `FIREWEAVE_URL` | this SDK build's channel | `-staging.N` builds call `https://staging-app-server.fireweave.ai`, others `https://app-server.fireweave.ai`. Also accepts a same-origin proxy path such as `/fw`. https only, except localhost. |
|
|
76
|
+
| `key` | `FIREWEAVE_BROWSER_KEY` | — | A browser key (`fw_public_…`) only. Server keys (`project-api-key_…`), analytics vendor keys and org/CLI tokens are refused; messages name the source, never the value. |
|
|
77
|
+
| `persistence` | — | `'localStorage'` | `'memory'` stores nothing until `fw.setPersistence('localStorage')`. |
|
|
78
|
+
| `deviceId` | — | stored `dev_<uuid>` | An app-supplied anonymous id (for example the analytics id), used verbatim and not stored. |
|
|
79
|
+
|
|
80
|
+
`start()` never throws or rejects, so it cannot blank a page. A configuration fault logs one
|
|
81
|
+
`console.error`, sets `fw.status().state` to `FAILED` with a `problem`, and every read serves its
|
|
82
|
+
default. The build is where a fault fails loudly:
|
|
83
|
+
|
|
84
|
+
- **`fireweave()`** fails `vite build` (and the dev server) for a missing key outside development,
|
|
85
|
+
a server key, a wrong key family, an http URL off localhost, or an `envPrefix` that would expose
|
|
86
|
+
`FIREWEAVE_KEY`. After a client build it fails if any output file holds a server key.
|
|
87
|
+
- **Other bundlers** (Next.js, webpack, esbuild, Rollup) use `/define`, which has no `vite` import:
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
// next.config.mjs
|
|
91
|
+
import { fireweaveDefine } from '@fireweaveai/web-sdk/define';
|
|
92
|
+
const define = fireweaveDefine(); // throws on the same faults; reads FIREWEAVE_ENV, APP_ENV, then NODE_ENV
|
|
93
|
+
export default {
|
|
94
|
+
webpack(config, { webpack }) {
|
|
95
|
+
config.plugins.push(new webpack.DefinePlugin(define));
|
|
96
|
+
return config;
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Without a build helper, pass `key` and `environment` to `start()` yourself.
|
|
102
|
+
|
|
103
|
+
Runtime faults keep their cause in `fw.status().problem`: `key-rejected` (fw-server answered 401/403)
|
|
104
|
+
and `unreachable` (offline, an ad or tracker blocker, a firewall, or a Content-Security-Policy
|
|
105
|
+
`connect-src` rule). Both leave the state `STALE` and reads on their defaults. Point `FIREWEAVE_URL`
|
|
106
|
+
at a same-origin proxy (`/fw`) that forwards `/v1/control-points/evaluate`, `/v1/capture` and
|
|
107
|
+
`/v1/targets/register` to avoid most of them.
|
|
108
|
+
|
|
109
|
+
On the server side of an SSR app, remote mode does nothing (a server-side singleton would share one
|
|
110
|
+
visitor's identity across requests) and reads return defaults; local mode serves the control-points object
|
|
111
|
+
everywhere, so server and client renders agree.
|
|
112
|
+
|
|
17
113
|
## Quick start (production path)
|
|
18
114
|
|
|
19
115
|
```ts
|
|
@@ -68,7 +164,7 @@ with reason `STALE` rather than blocking.
|
|
|
68
164
|
| `application/runtime.ts` | `FireweaveWebRuntime` — prefetch-once-per-context cache, lifecycle state, sync reads. |
|
|
69
165
|
| `application/client.ts` | `FireweaveWebClient` — `controlPoints`, `registerTarget`, `identify`. |
|
|
70
166
|
| `application/mode.ts` | `initFireweave` — the single entry point; the only module allowed to import concrete adapters. |
|
|
71
|
-
| `infrastructure/adapters/remote.ts` | `FireweaveRemoteWebAdapter` — the production backend (`/v1/
|
|
167
|
+
| `infrastructure/adapters/remote.ts` | `FireweaveRemoteWebAdapter` — the production backend (`/v1/control-points/evaluate`, `/v1/targets/register`). |
|
|
72
168
|
| `infrastructure/adapters/inmemory.ts` | Deterministic fixture-driven adapter for tests and conformance. |
|
|
73
169
|
| `infrastructure/adapters/local.ts` | `FireweaveLocalWebAdapter` — the DEV substrate `initFireweave({ mode: 'local' })` builds. |
|
|
74
170
|
| `application/ports.ts` | The `WebBackendAdapter` boundary. |
|
|
@@ -84,7 +180,7 @@ The SDK reads no environment variables — every option is an explicit argument
|
|
|
84
180
|
| --- | --- | --- |
|
|
85
181
|
| `apiUrl` | `remote` | fw-server base URL (required) |
|
|
86
182
|
| `apiKey` | `remote` | Fireweave **project** key — public by construction, never a secret (required) |
|
|
87
|
-
| `allowedHosts` | `remote` | SSRF allowlist override
|
|
183
|
+
| `allowedHosts` | `remote` | SSRF allowlist override |
|
|
88
184
|
| `context` | both | initial evaluation context (e.g. an anonymous `targetingKey`) to prefetch under |
|
|
89
185
|
| `local.controlPoints` | `local` | seeded boolean overrides; a present key resolves `STATIC`, an absent key misses to the caller's default with reason `DEFAULT` |
|
|
90
186
|
|
|
@@ -7,14 +7,12 @@
|
|
|
7
7
|
* capabilities — control points and target registration. Releases,
|
|
8
8
|
* exposures, signals, capabilities discovery and guardrails are out of v1;
|
|
9
9
|
* this client MUST NOT expose them (conformance/surface/control-points.surface.json
|
|
10
|
-
* "mustNotExpose"). The dynamic `invokeCapability` dispatcher
|
|
11
|
-
*
|
|
10
|
+
* "mustNotExpose"). The dynamic `invokeCapability` dispatcher survives
|
|
11
|
+
* unchanged; the `flags` alias is gone (ADR-0013).
|
|
12
12
|
*
|
|
13
13
|
* One divergence from the server SDK, and it is intentional: `controlPoints.*`
|
|
14
14
|
* is SYNCHRONOUS here and promise-returning on the server. That follows from
|
|
15
|
-
* the OpenFeature web contract — browser reads happen in render paths
|
|
16
|
-
* is recorded in docs/compatibility.md as a surface difference rather than a
|
|
17
|
-
* gap.
|
|
15
|
+
* the OpenFeature web contract — browser reads happen in render paths.
|
|
18
16
|
*/
|
|
19
17
|
import { FireweaveError } from '../domain/errors.js';
|
|
20
18
|
import type { ContextInput } from '../domain/context.js';
|
|
@@ -52,11 +50,11 @@ export interface EvaluateOptions {
|
|
|
52
50
|
export declare class WebControlPointsApi {
|
|
53
51
|
private readonly runtime;
|
|
54
52
|
constructor(runtime: FireweaveWebRuntime);
|
|
55
|
-
evaluate(
|
|
56
|
-
getBooleanValue(
|
|
57
|
-
getStringValue(
|
|
58
|
-
getNumberValue(
|
|
59
|
-
getObjectValue(
|
|
53
|
+
evaluate(controlPointKey: string, expectedType: ExpectedFlagType, defaultValue: JsonValue, context?: ContextInput, _options?: EvaluateOptions): Decision;
|
|
54
|
+
getBooleanValue(controlPointKey: string, defaultValue: boolean, context?: ContextInput): boolean;
|
|
55
|
+
getStringValue(controlPointKey: string, defaultValue: string, context?: ContextInput): string;
|
|
56
|
+
getNumberValue(controlPointKey: string, defaultValue: number, context?: ContextInput): number;
|
|
57
|
+
getObjectValue(controlPointKey: string, defaultValue: JsonValue, context?: ContextInput): JsonValue;
|
|
60
58
|
/**
|
|
61
59
|
* Detailed reads — the whole {@link Decision} rather than just its value.
|
|
62
60
|
*
|
|
@@ -64,29 +62,16 @@ export declare class WebControlPointsApi {
|
|
|
64
62
|
* to the other without restructuring the call (spec/control-points.md "The
|
|
65
63
|
* nine methods"). SYNCHRONOUS like every other read here (ADR-0009).
|
|
66
64
|
*/
|
|
67
|
-
getBooleanDetails(
|
|
68
|
-
getStringDetails(
|
|
69
|
-
getNumberDetails(
|
|
70
|
-
getObjectDetails(
|
|
65
|
+
getBooleanDetails(controlPointKey: string, defaultValue: boolean, context?: ContextInput): Decision;
|
|
66
|
+
getStringDetails(controlPointKey: string, defaultValue: string, context?: ContextInput): Decision;
|
|
67
|
+
getNumberDetails(controlPointKey: string, defaultValue: number, context?: ContextInput): Decision;
|
|
68
|
+
getObjectDetails(controlPointKey: string, defaultValue: JsonValue, context?: ContextInput): Decision;
|
|
71
69
|
}
|
|
72
70
|
export interface FireweaveWebClientOptions {
|
|
73
71
|
}
|
|
74
72
|
export declare class FireweaveWebClient {
|
|
75
73
|
readonly runtime: FireweaveWebRuntime;
|
|
76
74
|
readonly controlPoints: WebControlPointsApi;
|
|
77
|
-
/**
|
|
78
|
-
* Control-point evaluation under its former name.
|
|
79
|
-
*
|
|
80
|
-
* @deprecated Renamed to {@link FireweaveWebClient.controlPoints}
|
|
81
|
-
* (ADR-0007). Identical and fully supported —
|
|
82
|
-
* `client.flags === client.controlPoints` — so no migration is required and
|
|
83
|
-
* none is planned. Silent at runtime: the alias is permanent, not scheduled
|
|
84
|
-
* for removal, so there is nothing to warn a caller toward — deprecation is
|
|
85
|
-
* conveyed by this doc comment only (no log, and no env gate to control
|
|
86
|
-
* one, since the SDK reads no environment variables regardless — ADR-0009
|
|
87
|
-
* security rule 3).
|
|
88
|
-
*/
|
|
89
|
-
get flags(): WebControlPointsApi;
|
|
90
75
|
constructor(runtime: FireweaveWebRuntime, _options?: FireweaveWebClientOptions);
|
|
91
76
|
/**
|
|
92
77
|
* Dynamic capability dispatch. Unknown capabilities — currently all of
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/application/client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/application/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,14 +7,12 @@
|
|
|
7
7
|
* capabilities — control points and target registration. Releases,
|
|
8
8
|
* exposures, signals, capabilities discovery and guardrails are out of v1;
|
|
9
9
|
* this client MUST NOT expose them (conformance/surface/control-points.surface.json
|
|
10
|
-
* "mustNotExpose"). The dynamic `invokeCapability` dispatcher
|
|
11
|
-
*
|
|
10
|
+
* "mustNotExpose"). The dynamic `invokeCapability` dispatcher survives
|
|
11
|
+
* unchanged; the `flags` alias is gone (ADR-0013).
|
|
12
12
|
*
|
|
13
13
|
* One divergence from the server SDK, and it is intentional: `controlPoints.*`
|
|
14
14
|
* is SYNCHRONOUS here and promise-returning on the server. That follows from
|
|
15
|
-
* the OpenFeature web contract — browser reads happen in render paths
|
|
16
|
-
* is recorded in docs/compatibility.md as a surface difference rather than a
|
|
17
|
-
* gap.
|
|
15
|
+
* the OpenFeature web contract — browser reads happen in render paths.
|
|
18
16
|
*/
|
|
19
17
|
import { FireweaveError } from '../domain/errors.js';
|
|
20
18
|
function failure(error, degraded = false) {
|
|
@@ -45,20 +43,20 @@ export class WebControlPointsApi {
|
|
|
45
43
|
constructor(runtime) {
|
|
46
44
|
this.runtime = runtime;
|
|
47
45
|
}
|
|
48
|
-
evaluate(
|
|
49
|
-
return this.runtime.evaluateSync(
|
|
46
|
+
evaluate(controlPointKey, expectedType, defaultValue, context, _options) {
|
|
47
|
+
return this.runtime.evaluateSync(controlPointKey, expectedType, defaultValue, context);
|
|
50
48
|
}
|
|
51
|
-
getBooleanValue(
|
|
52
|
-
return this.evaluate(
|
|
49
|
+
getBooleanValue(controlPointKey, defaultValue, context) {
|
|
50
|
+
return this.evaluate(controlPointKey, 'boolean', defaultValue, context).value;
|
|
53
51
|
}
|
|
54
|
-
getStringValue(
|
|
55
|
-
return this.evaluate(
|
|
52
|
+
getStringValue(controlPointKey, defaultValue, context) {
|
|
53
|
+
return this.evaluate(controlPointKey, 'string', defaultValue, context).value;
|
|
56
54
|
}
|
|
57
|
-
getNumberValue(
|
|
58
|
-
return this.evaluate(
|
|
55
|
+
getNumberValue(controlPointKey, defaultValue, context) {
|
|
56
|
+
return this.evaluate(controlPointKey, 'number', defaultValue, context).value;
|
|
59
57
|
}
|
|
60
|
-
getObjectValue(
|
|
61
|
-
return this.evaluate(
|
|
58
|
+
getObjectValue(controlPointKey, defaultValue, context) {
|
|
59
|
+
return this.evaluate(controlPointKey, 'object', defaultValue, context).value;
|
|
62
60
|
}
|
|
63
61
|
/**
|
|
64
62
|
* Detailed reads — the whole {@link Decision} rather than just its value.
|
|
@@ -67,17 +65,17 @@ export class WebControlPointsApi {
|
|
|
67
65
|
* to the other without restructuring the call (spec/control-points.md "The
|
|
68
66
|
* nine methods"). SYNCHRONOUS like every other read here (ADR-0009).
|
|
69
67
|
*/
|
|
70
|
-
getBooleanDetails(
|
|
71
|
-
return this.evaluate(
|
|
68
|
+
getBooleanDetails(controlPointKey, defaultValue, context) {
|
|
69
|
+
return this.evaluate(controlPointKey, 'boolean', defaultValue, context);
|
|
72
70
|
}
|
|
73
|
-
getStringDetails(
|
|
74
|
-
return this.evaluate(
|
|
71
|
+
getStringDetails(controlPointKey, defaultValue, context) {
|
|
72
|
+
return this.evaluate(controlPointKey, 'string', defaultValue, context);
|
|
75
73
|
}
|
|
76
|
-
getNumberDetails(
|
|
77
|
-
return this.evaluate(
|
|
74
|
+
getNumberDetails(controlPointKey, defaultValue, context) {
|
|
75
|
+
return this.evaluate(controlPointKey, 'number', defaultValue, context);
|
|
78
76
|
}
|
|
79
|
-
getObjectDetails(
|
|
80
|
-
return this.evaluate(
|
|
77
|
+
getObjectDetails(controlPointKey, defaultValue, context) {
|
|
78
|
+
return this.evaluate(controlPointKey, 'object', defaultValue, context);
|
|
81
79
|
}
|
|
82
80
|
}
|
|
83
81
|
/**
|
|
@@ -91,21 +89,6 @@ const SUPPORTED_CAPABILITIES = Object.freeze([]);
|
|
|
91
89
|
export class FireweaveWebClient {
|
|
92
90
|
runtime;
|
|
93
91
|
controlPoints;
|
|
94
|
-
/**
|
|
95
|
-
* Control-point evaluation under its former name.
|
|
96
|
-
*
|
|
97
|
-
* @deprecated Renamed to {@link FireweaveWebClient.controlPoints}
|
|
98
|
-
* (ADR-0007). Identical and fully supported —
|
|
99
|
-
* `client.flags === client.controlPoints` — so no migration is required and
|
|
100
|
-
* none is planned. Silent at runtime: the alias is permanent, not scheduled
|
|
101
|
-
* for removal, so there is nothing to warn a caller toward — deprecation is
|
|
102
|
-
* conveyed by this doc comment only (no log, and no env gate to control
|
|
103
|
-
* one, since the SDK reads no environment variables regardless — ADR-0009
|
|
104
|
-
* security rule 3).
|
|
105
|
-
*/
|
|
106
|
-
get flags() {
|
|
107
|
-
return this.controlPoints;
|
|
108
|
-
}
|
|
109
92
|
constructor(runtime, _options = {}) {
|
|
110
93
|
this.runtime = runtime;
|
|
111
94
|
this.controlPoints = new WebControlPointsApi(runtime);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/application/client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/application/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAYrD,SAAS,OAAO,CAAC,KAAqB,EAAE,QAAQ,GAAG,KAAK;IACtD,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAChF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,OAA4B;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC;IACrE,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,cAAc;QAAE,OAAO,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACjG,OAAO,SAAS,CAAC;AACnB,CAAC;AAoBD;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IACb,OAAO,CAAsB;IAE9C,YAAY,OAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,QAAQ,CACN,eAAuB,EACvB,YAA8B,EAC9B,YAAuB,EACvB,OAAsB,EACtB,QAA0B;QAE1B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACzF,CAAC;IAED,eAAe,CAAC,eAAuB,EAAE,YAAqB,EAAE,OAAsB;QACpF,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,KAAgB,CAAC;IAC3F,CAAC;IAED,cAAc,CAAC,eAAuB,EAAE,YAAoB,EAAE,OAAsB;QAClF,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,KAAe,CAAC;IACzF,CAAC;IAED,cAAc,CAAC,eAAuB,EAAE,YAAoB,EAAE,OAAsB;QAClF,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,KAAe,CAAC;IACzF,CAAC;IAED,cAAc,CAAC,eAAuB,EAAE,YAAuB,EAAE,OAAsB;QACrF,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC;IAC/E,CAAC;IAED;;;;;;OAMG;IACH,iBAAiB,CAAC,eAAuB,EAAE,YAAqB,EAAE,OAAsB;QACtF,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAED,gBAAgB,CAAC,eAAuB,EAAE,YAAoB,EAAE,OAAsB;QACpF,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,gBAAgB,CAAC,eAAuB,EAAE,YAAoB,EAAE,OAAsB;QACpF,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,gBAAgB,CAAC,eAAuB,EAAE,YAAuB,EAAE,OAAsB;QACvF,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,sBAAsB,GAAsB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAIpE,MAAM,OAAO,kBAAkB;IACpB,OAAO,CAAsB;IAC7B,aAAa,CAAsB;IAE5C,YAAY,OAA4B,EAAE,WAAsC,EAAE;QAChF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,UAAkB,EAAE,KAAiC;QACpE,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACjD,OAAO,OAAO,CAAC,IAAI,cAAc,CAAC,uBAAuB,CAAC,EAAE,IAAI,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAED,UAAU,CAAC,OAAsB;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;OAOG;IACH,cAAc,CACZ,YAAoB,EACpB,UAAiC,EAAE;QAEnC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,QAAQ,CACZ,YAAoB,EACpB,UAAiC,EAAE;QAEnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACxE,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* One shape differs from the server port, and it is the difference that makes
|
|
5
5
|
* a synchronous OpenFeature provider possible: the server port has
|
|
6
|
-
* `resolve(
|
|
6
|
+
* `resolve(controlPointKey)` — one call per control point — while this port has
|
|
7
7
|
* `prefetch(context)`, which returns EVERY decision for a context in one round
|
|
8
8
|
* trip. Evaluation then becomes a synchronous map lookup in the runtime.
|
|
9
9
|
*
|
|
@@ -33,7 +33,7 @@ export interface AdapterResolution {
|
|
|
33
33
|
export type PrefetchResult = ReadonlyMap<string, AdapterResolution>;
|
|
34
34
|
export interface PrefetchOptions {
|
|
35
35
|
/** Restrict the batch to these keys; omit to let the backend return all it knows. */
|
|
36
|
-
readonly
|
|
36
|
+
readonly controlPointKeys?: readonly string[];
|
|
37
37
|
readonly signal?: AbortSignal;
|
|
38
38
|
}
|
|
39
39
|
export interface RegisterTargetOptions {
|
|
@@ -67,14 +67,14 @@ export interface WebBackendAdapter {
|
|
|
67
67
|
* Miss-reason override for a control point ABSENT from the prefetch result
|
|
68
68
|
* (spec/modes.md "Behaviour per mode": local mode's unknown-key row is
|
|
69
69
|
* `default`/reason `DEFAULT`, not an error — unlike remote's
|
|
70
|
-
* `default`/`ERROR`/`
|
|
70
|
+
* `default`/`ERROR`/`ControlPointNotFound`).
|
|
71
71
|
*
|
|
72
72
|
* Node's per-call `resolve()` lets a miss carry its own `reason: 'DEFAULT'`
|
|
73
73
|
* on the resolution object itself. Web's adapter returns EVERY decision for
|
|
74
74
|
* a context in one batch (`prefetch`), so there is no per-key resolution
|
|
75
75
|
* object for a key that was never in the batch at all — the seam instead
|
|
76
76
|
* lives on the adapter. `FireweaveLocalWebAdapter` sets this to `'DEFAULT'`;
|
|
77
|
-
* every other adapter leaves it undefined and keeps the
|
|
77
|
+
* every other adapter leaves it undefined and keeps the ControlPointNotFound/ERROR
|
|
78
78
|
* path (`FireweaveWebRuntime.evaluateSync` checks it with strict `===`).
|
|
79
79
|
*/
|
|
80
80
|
readonly missReason?: 'DEFAULT';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/application/ports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACvH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,qFAAqF;IACrF,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/application/ports.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export interface FireweaveWebRuntimeConfig {
|
|
|
13
13
|
readonly reservedAttributeKeys?: readonly string[];
|
|
14
14
|
readonly flagsReadyTimeoutMs?: number;
|
|
15
15
|
/** Restrict prefetch to a known set of control points. */
|
|
16
|
-
readonly
|
|
16
|
+
readonly controlPointKeys?: readonly string[];
|
|
17
17
|
/** Emit a Fireweave exposure on each successful evaluation. Default false. */
|
|
18
18
|
readonly sendExposure?: boolean;
|
|
19
19
|
}
|
|
@@ -53,7 +53,7 @@ export declare class FireweaveWebRuntime {
|
|
|
53
53
|
* any I/O" names — key, default-vs-type, context, lifecycle — stopping at
|
|
54
54
|
* the first failure. Only once all four pass does this consult the cache.
|
|
55
55
|
*/
|
|
56
|
-
evaluateSync(
|
|
56
|
+
evaluateSync(controlPointKey: string, expectedType: ExpectedFlagType, defaultValue: JsonValue, invocationContext?: ContextInput): Decision;
|
|
57
57
|
private reasonFor;
|
|
58
58
|
private metadataFor;
|
|
59
59
|
private recordExposureFor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/application/runtime.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAiB,MAAM,sBAAsB,CAAC;AAQvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAGV,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,QAAQ,EAER,QAAQ,EACR,SAAS,EACT,cAAc,EACd,cAAc,EACd,MAAM,EACP,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,2EAA2E;AAC3E,eAAO,MAAM,8BAA8B,OAAQ,CAAC;AAEpD,MAAM,WAAW,yBAAyB;IACxC,sEAAsE;IACtE,QAAQ,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACzC,kFAAkF;IAClF,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,0DAA0D;IAC1D,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/application/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -119,7 +119,7 @@ export class FireweaveWebRuntime {
|
|
|
119
119
|
const timeoutMs = this.config.flagsReadyTimeoutMs ?? DEFAULT_FLAGS_READY_TIMEOUT_MS;
|
|
120
120
|
let timer;
|
|
121
121
|
const TIMED_OUT = Symbol('timeout');
|
|
122
|
-
const prefetch = this.adapter.prefetch(canonical, this.config.
|
|
122
|
+
const prefetch = this.adapter.prefetch(canonical, this.config.controlPointKeys !== undefined ? { controlPointKeys: this.config.controlPointKeys } : undefined);
|
|
123
123
|
try {
|
|
124
124
|
const result = await Promise.race([
|
|
125
125
|
prefetch,
|
|
@@ -155,14 +155,14 @@ export class FireweaveWebRuntime {
|
|
|
155
155
|
* any I/O" names — key, default-vs-type, context, lifecycle — stopping at
|
|
156
156
|
* the first failure. Only once all four pass does this consult the cache.
|
|
157
157
|
*/
|
|
158
|
-
evaluateSync(
|
|
159
|
-
const keyResult = validateControlPointKey(
|
|
158
|
+
evaluateSync(controlPointKey, expectedType, defaultValue, invocationContext) {
|
|
159
|
+
const keyResult = validateControlPointKey(controlPointKey);
|
|
160
160
|
if (!keyResult.ok) {
|
|
161
|
-
return this.errorDecision(
|
|
161
|
+
return this.errorDecision(controlPointKey, defaultValue, keyResult.error);
|
|
162
162
|
}
|
|
163
163
|
const defaultResult = validateDefaultValue(expectedType, defaultValue);
|
|
164
164
|
if (!defaultResult.ok) {
|
|
165
|
-
return this.errorDecision(
|
|
165
|
+
return this.errorDecision(controlPointKey, defaultValue, defaultResult.error);
|
|
166
166
|
}
|
|
167
167
|
// The validated context here is not what SELECTS the cached decision —
|
|
168
168
|
// that was fixed by the last prefetch (ADR-0009: evaluation is a pure
|
|
@@ -173,42 +173,42 @@ export class FireweaveWebRuntime {
|
|
|
173
173
|
const merged = mergeContexts(this.globalContext, invocationContext);
|
|
174
174
|
const contextResult = validateContext(merged, this.contextPolicy);
|
|
175
175
|
if (!contextResult.ok) {
|
|
176
|
-
return this.errorDecision(
|
|
176
|
+
return this.errorDecision(controlPointKey, defaultValue, contextResult.error);
|
|
177
177
|
}
|
|
178
178
|
const lifecycleError = this.lifecycleError();
|
|
179
179
|
if (lifecycleError !== undefined) {
|
|
180
|
-
return this.errorDecision(
|
|
180
|
+
return this.errorDecision(controlPointKey, defaultValue, lifecycleError);
|
|
181
181
|
}
|
|
182
|
-
const resolution = this.cache.get(
|
|
182
|
+
const resolution = this.cache.get(controlPointKey);
|
|
183
183
|
if (resolution === undefined || resolution.found === false) {
|
|
184
184
|
// spec/modes.md "Behaviour per mode": local's unknown-key row is
|
|
185
185
|
// `default`/reason `DEFAULT` — deliberately not an error. The local
|
|
186
186
|
// adapter signals this via `missReason: 'DEFAULT'` (adapter.ts); every
|
|
187
187
|
// other adapter leaves it undefined and keeps the path below.
|
|
188
188
|
if (this.adapter.missReason === 'DEFAULT') {
|
|
189
|
-
return {
|
|
189
|
+
return { controlPointKey, value: defaultValue, reason: 'DEFAULT', metadata: {} };
|
|
190
190
|
}
|
|
191
191
|
// A cache miss while STALE is not a missing control point — it is an
|
|
192
192
|
// unanswered question. Reporting FLAG_NOT_FOUND there would send a
|
|
193
193
|
// caller hunting for a flag that may well exist.
|
|
194
194
|
if (this.state === 'STALE') {
|
|
195
195
|
return {
|
|
196
|
-
|
|
196
|
+
controlPointKey,
|
|
197
197
|
value: defaultValue,
|
|
198
198
|
reason: 'STALE',
|
|
199
199
|
variant: 'default',
|
|
200
200
|
metadata: { 'fireweave.stale': true },
|
|
201
201
|
};
|
|
202
202
|
}
|
|
203
|
-
return this.errorDecision(
|
|
203
|
+
return this.errorDecision(controlPointKey, defaultValue, new FireweaveError('ControlPointNotFound'));
|
|
204
204
|
}
|
|
205
205
|
const value = resolution.value ?? null;
|
|
206
206
|
if (!matchesExpectedType(value, expectedType)) {
|
|
207
|
-
return this.errorDecision(
|
|
207
|
+
return this.errorDecision(controlPointKey, defaultValue, new FireweaveError('TypeMismatch'));
|
|
208
208
|
}
|
|
209
209
|
const metadata = this.metadataFor(resolution);
|
|
210
210
|
const decision = {
|
|
211
|
-
|
|
211
|
+
controlPointKey,
|
|
212
212
|
value,
|
|
213
213
|
reason: this.reasonFor(resolution),
|
|
214
214
|
...(resolution.variant !== undefined ? { variant: resolution.variant } : {}),
|
|
@@ -220,18 +220,21 @@ export class FireweaveWebRuntime {
|
|
|
220
220
|
return decision;
|
|
221
221
|
}
|
|
222
222
|
reasonFor(resolution) {
|
|
223
|
+
// A STALE runtime is serving the last good decisions after a failed or
|
|
224
|
+
// timed-out re-fetch (spec/control-points.md): say so, whatever reason the
|
|
225
|
+
// backend gave when the decision was fresh.
|
|
226
|
+
if (this.state === 'STALE')
|
|
227
|
+
return 'STALE';
|
|
223
228
|
if (resolution.enabled === false)
|
|
224
229
|
return 'DISABLED';
|
|
225
230
|
if (resolution.reason !== undefined)
|
|
226
231
|
return resolution.reason;
|
|
227
|
-
if (this.state === 'STALE')
|
|
228
|
-
return 'STALE';
|
|
229
232
|
return 'TARGETING_MATCH';
|
|
230
233
|
}
|
|
231
234
|
metadataFor(resolution) {
|
|
232
235
|
const metadata = {};
|
|
233
236
|
if (resolution.version !== undefined)
|
|
234
|
-
metadata['fireweave.
|
|
237
|
+
metadata['fireweave.controlPointVersion'] = resolution.version;
|
|
235
238
|
if (resolution.reasonCode !== undefined)
|
|
236
239
|
metadata['fireweave.reasonCode'] = resolution.reasonCode;
|
|
237
240
|
if (resolution.quotaLimited === true)
|
|
@@ -247,7 +250,7 @@ export class FireweaveWebRuntime {
|
|
|
247
250
|
return;
|
|
248
251
|
const rc = this.releaseContext;
|
|
249
252
|
const exposure = {
|
|
250
|
-
|
|
253
|
+
controlPointKey: decision.controlPointKey,
|
|
251
254
|
targetingKey,
|
|
252
255
|
value: decision.value,
|
|
253
256
|
...(decision.variant !== undefined ? { variant: decision.variant } : {}),
|
|
@@ -327,9 +330,9 @@ export class FireweaveWebRuntime {
|
|
|
327
330
|
return undefined;
|
|
328
331
|
}
|
|
329
332
|
}
|
|
330
|
-
errorDecision(
|
|
333
|
+
errorDecision(controlPointKey, defaultValue, err) {
|
|
331
334
|
return {
|
|
332
|
-
|
|
335
|
+
controlPointKey,
|
|
333
336
|
value: defaultValue,
|
|
334
337
|
reason: 'ERROR',
|
|
335
338
|
errorCode: err.openFeatureErrorCode,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/application/runtime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/application/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PolicyConfig } from '../src/start/policy.js';
|
|
2
|
+
import { type BuildOptions } from './shared.js';
|
|
3
|
+
export interface FireweaveDefineOptions extends BuildOptions {
|
|
4
|
+
/** The variable holding the browser key. Default FIREWEAVE_BROWSER_KEY. */
|
|
5
|
+
readonly keyVariable?: string;
|
|
6
|
+
/** Read these values instead of process.env (tests). */
|
|
7
|
+
readonly env?: Readonly<Record<string, string | undefined>>;
|
|
8
|
+
/** Where the summary line goes. Default console.info. */
|
|
9
|
+
readonly log?: (line: string) => void;
|
|
10
|
+
}
|
|
11
|
+
/** Fail the build (throw) when the start profile would not start; returns the resolved config. */
|
|
12
|
+
export declare function assertFireweaveBuild(options?: FireweaveDefineOptions): PolicyConfig;
|
|
13
|
+
/** assertFireweaveBuild, plus the define map that hands the result to start(). */
|
|
14
|
+
export declare function fireweaveDefine(options?: FireweaveDefineOptions): Record<string, string>;
|