@dr-sentry/react 1.0.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.
- package/README.md +258 -0
- package/dist/cjs/client.d.ts +121 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +483 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/context.d.ts +10 -0
- package/dist/cjs/context.d.ts.map +1 -0
- package/dist/cjs/context.js +14 -0
- package/dist/cjs/context.js.map +1 -0
- package/dist/cjs/hooks.d.ts +86 -0
- package/dist/cjs/hooks.d.ts.map +1 -0
- package/dist/cjs/hooks.js +186 -0
- package/dist/cjs/hooks.js.map +1 -0
- package/dist/cjs/index.d.ts +7 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +23 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/local-evaluator.d.ts +12 -0
- package/dist/cjs/local-evaluator.d.ts.map +1 -0
- package/dist/cjs/local-evaluator.js +44 -0
- package/dist/cjs/local-evaluator.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/provider.d.ts +24 -0
- package/dist/cjs/provider.d.ts.map +1 -0
- package/dist/cjs/provider.js +97 -0
- package/dist/cjs/provider.js.map +1 -0
- package/dist/cjs/types.d.ts +163 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +9 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/client.d.ts +121 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +479 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/context.d.ts +10 -0
- package/dist/esm/context.d.ts.map +1 -0
- package/dist/esm/context.js +11 -0
- package/dist/esm/context.js.map +1 -0
- package/dist/esm/hooks.d.ts +86 -0
- package/dist/esm/hooks.d.ts.map +1 -0
- package/dist/esm/hooks.js +178 -0
- package/dist/esm/hooks.js.map +1 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/local-evaluator.d.ts +12 -0
- package/dist/esm/local-evaluator.d.ts.map +1 -0
- package/dist/esm/local-evaluator.js +41 -0
- package/dist/esm/local-evaluator.js.map +1 -0
- package/dist/esm/provider.d.ts +24 -0
- package/dist/esm/provider.d.ts.map +1 -0
- package/dist/esm/provider.js +94 -0
- package/dist/esm/provider.js.map +1 -0
- package/dist/esm/types.d.ts +163 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +8 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import type { EvaluationContext, Flag, FlagConfig, FlagDetail, FlagMetadata, UserContext } from './types';
|
|
2
|
+
/** Listener callback invoked whenever the flag store is updated. */
|
|
3
|
+
export type FlagChangeListener = () => void;
|
|
4
|
+
/**
|
|
5
|
+
* Lightweight HTTP + SSE client that manages the local flag store.
|
|
6
|
+
*
|
|
7
|
+
* This client is designed for browser environments. It uses the native
|
|
8
|
+
* `fetch` and `EventSource` APIs, so no polyfills are required in modern
|
|
9
|
+
* browsers.
|
|
10
|
+
*/
|
|
11
|
+
export declare class DeploySentryClient {
|
|
12
|
+
private readonly apiKey;
|
|
13
|
+
private readonly baseURL;
|
|
14
|
+
private readonly environment;
|
|
15
|
+
private readonly project;
|
|
16
|
+
private readonly application;
|
|
17
|
+
private readonly sessionId;
|
|
18
|
+
private readonly mode;
|
|
19
|
+
private flagConfig;
|
|
20
|
+
private user;
|
|
21
|
+
/** In-memory flag store keyed by flag key. */
|
|
22
|
+
private readonly flags;
|
|
23
|
+
/** Registry of operation handlers for the register/dispatch pattern. */
|
|
24
|
+
private registry;
|
|
25
|
+
/** Subscribed listeners notified on any flag change. */
|
|
26
|
+
private readonly listeners;
|
|
27
|
+
/** Active SSE connection, if any. */
|
|
28
|
+
private eventSource;
|
|
29
|
+
/** Whether the initial fetch has completed at least once. */
|
|
30
|
+
private initialised;
|
|
31
|
+
/** Whether the client has been destroyed. */
|
|
32
|
+
private destroyed;
|
|
33
|
+
/** Retry state for SSE reconnection. */
|
|
34
|
+
private sseRetryTimer;
|
|
35
|
+
private sseRetryCount;
|
|
36
|
+
private static readonly SSE_MAX_RETRY_DELAY_MS;
|
|
37
|
+
constructor(options: {
|
|
38
|
+
apiKey: string;
|
|
39
|
+
baseURL: string;
|
|
40
|
+
environment: string;
|
|
41
|
+
project: string;
|
|
42
|
+
application: string;
|
|
43
|
+
user?: UserContext;
|
|
44
|
+
sessionId?: string;
|
|
45
|
+
mode?: 'server' | 'file' | 'server-with-fallback';
|
|
46
|
+
flagConfig?: FlagConfig;
|
|
47
|
+
});
|
|
48
|
+
/** Fetch all flags from the API and start listening for SSE updates. */
|
|
49
|
+
init(): Promise<void>;
|
|
50
|
+
/** Stop the SSE connection and release resources. */
|
|
51
|
+
destroy(): void;
|
|
52
|
+
/** Clear the local flag store and re-fetch all flags from the API. */
|
|
53
|
+
refreshSession(): Promise<void>;
|
|
54
|
+
/** Update the user context and re-fetch flags. */
|
|
55
|
+
identify(user: UserContext | undefined): Promise<void>;
|
|
56
|
+
/** Subscribe to flag changes. Returns an unsubscribe function. */
|
|
57
|
+
subscribe(listener: FlagChangeListener): () => void;
|
|
58
|
+
/** True once the first successful fetch has completed. */
|
|
59
|
+
get isInitialised(): boolean;
|
|
60
|
+
/** Return the stored {@link Flag} for the given key, or `undefined`. */
|
|
61
|
+
getFlag(key: string): Flag | undefined;
|
|
62
|
+
/** Return all stored flags. */
|
|
63
|
+
getAllFlags(): Flag[];
|
|
64
|
+
/** Build a {@link FlagMetadata} object for a stored flag. */
|
|
65
|
+
getFlagMetadata(key: string): FlagMetadata | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Register a handler for the given operation name.
|
|
68
|
+
*
|
|
69
|
+
* When `flagKey` is provided the handler is used only when that flag is
|
|
70
|
+
* enabled. Omit `flagKey` to register the default (fallback) handler.
|
|
71
|
+
*/
|
|
72
|
+
register<T extends (...args: any[]) => any>(operation: string, handler: T, flagKey?: string): void;
|
|
73
|
+
/**
|
|
74
|
+
* Dispatch the appropriate handler for the given operation.
|
|
75
|
+
*
|
|
76
|
+
* Returns the first registered handler whose flag is enabled. Falls back
|
|
77
|
+
* to the default (no-flagKey) handler if no flagged handler matches.
|
|
78
|
+
*
|
|
79
|
+
* @throws If no handlers are registered for the operation.
|
|
80
|
+
* @throws If no flagged handler matches and no default is registered.
|
|
81
|
+
*/
|
|
82
|
+
dispatch<T extends (...args: any[]) => any>(operation: string, _context?: EvaluationContext): T;
|
|
83
|
+
/**
|
|
84
|
+
* Evaluate a boolean flag from the in-memory store.
|
|
85
|
+
*
|
|
86
|
+
* No API call is made -- the value comes from the flags already fetched
|
|
87
|
+
* via {@link init} and kept up-to-date by SSE.
|
|
88
|
+
*/
|
|
89
|
+
boolValue(key: string, defaultValue: boolean): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Evaluate a string flag from the in-memory store.
|
|
92
|
+
*/
|
|
93
|
+
stringValue(key: string, defaultValue: string): string;
|
|
94
|
+
/**
|
|
95
|
+
* Evaluate a number flag from the in-memory store.
|
|
96
|
+
*
|
|
97
|
+
* TypeScript has no separate `int` type -- this returns `number` and is
|
|
98
|
+
* the idiomatic equivalent of `intValue` / `floatValue` in other SDKs.
|
|
99
|
+
*/
|
|
100
|
+
numberValue(key: string, defaultValue: number): number;
|
|
101
|
+
/**
|
|
102
|
+
* Evaluate a JSON (object) flag from the in-memory store.
|
|
103
|
+
*/
|
|
104
|
+
jsonValue<T extends object = object>(key: string, defaultValue: T): T;
|
|
105
|
+
/**
|
|
106
|
+
* Return the full evaluation detail for a flag from the in-memory store.
|
|
107
|
+
*
|
|
108
|
+
* Returns `{ value, enabled, metadata, loading }` matching the
|
|
109
|
+
* {@link FlagDetail} interface used by the `useFlagDetail` hook.
|
|
110
|
+
*/
|
|
111
|
+
detail(key: string): FlagDetail;
|
|
112
|
+
private get headers();
|
|
113
|
+
private buildQueryParams;
|
|
114
|
+
private fetchFlags;
|
|
115
|
+
private connectSSE;
|
|
116
|
+
private handleSSEMessage;
|
|
117
|
+
private disconnectSSE;
|
|
118
|
+
private scheduleReconnect;
|
|
119
|
+
private emit;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
import { evaluateLocal } from './local-evaluator';
|
|
2
|
+
/**
|
|
3
|
+
* Normalise a raw API response into the public {@link Flag} shape.
|
|
4
|
+
*/
|
|
5
|
+
function toFlag(raw) {
|
|
6
|
+
const meta = raw.metadata ?? {};
|
|
7
|
+
return {
|
|
8
|
+
key: raw.key,
|
|
9
|
+
name: raw.name ?? raw.key,
|
|
10
|
+
category: meta.category ?? 'feature',
|
|
11
|
+
purpose: meta.purpose ?? '',
|
|
12
|
+
owners: meta.owners ?? [],
|
|
13
|
+
isPermanent: meta.isPermanent ?? false,
|
|
14
|
+
expiresAt: meta.expiresAt,
|
|
15
|
+
enabled: raw.enabled,
|
|
16
|
+
value: raw.value,
|
|
17
|
+
tags: meta.tags ?? [],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Lightweight HTTP + SSE client that manages the local flag store.
|
|
22
|
+
*
|
|
23
|
+
* This client is designed for browser environments. It uses the native
|
|
24
|
+
* `fetch` and `EventSource` APIs, so no polyfills are required in modern
|
|
25
|
+
* browsers.
|
|
26
|
+
*/
|
|
27
|
+
export class DeploySentryClient {
|
|
28
|
+
constructor(options) {
|
|
29
|
+
this.flagConfig = null;
|
|
30
|
+
/** In-memory flag store keyed by flag key. */
|
|
31
|
+
this.flags = new Map();
|
|
32
|
+
/** Registry of operation handlers for the register/dispatch pattern. */
|
|
33
|
+
this.registry = new Map();
|
|
34
|
+
/** Subscribed listeners notified on any flag change. */
|
|
35
|
+
this.listeners = new Set();
|
|
36
|
+
/** Active SSE connection, if any. */
|
|
37
|
+
this.eventSource = null;
|
|
38
|
+
/** Whether the initial fetch has completed at least once. */
|
|
39
|
+
this.initialised = false;
|
|
40
|
+
/** Whether the client has been destroyed. */
|
|
41
|
+
this.destroyed = false;
|
|
42
|
+
/** Retry state for SSE reconnection. */
|
|
43
|
+
this.sseRetryTimer = null;
|
|
44
|
+
this.sseRetryCount = 0;
|
|
45
|
+
this.apiKey = options.apiKey;
|
|
46
|
+
this.baseURL = options.baseURL.replace(/\/+$/, '');
|
|
47
|
+
this.environment = options.environment;
|
|
48
|
+
this.project = options.project;
|
|
49
|
+
this.application = options.application;
|
|
50
|
+
this.sessionId = options.sessionId;
|
|
51
|
+
this.mode = options.mode ?? 'server';
|
|
52
|
+
this.flagConfig = options.flagConfig ?? null;
|
|
53
|
+
this.user = options.user;
|
|
54
|
+
}
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Public API
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
/** Fetch all flags from the API and start listening for SSE updates. */
|
|
59
|
+
async init() {
|
|
60
|
+
if (this.flagConfig) {
|
|
61
|
+
// Populate the in-memory store from the pre-loaded config.
|
|
62
|
+
const envName = this.environment;
|
|
63
|
+
for (const fc of this.flagConfig.flags) {
|
|
64
|
+
const envState = fc.environments[envName];
|
|
65
|
+
this.flags.set(fc.key, {
|
|
66
|
+
key: fc.key,
|
|
67
|
+
name: fc.name,
|
|
68
|
+
category: fc.category,
|
|
69
|
+
purpose: '',
|
|
70
|
+
owners: [],
|
|
71
|
+
isPermanent: fc.is_permanent,
|
|
72
|
+
expiresAt: fc.expires_at,
|
|
73
|
+
enabled: envState?.enabled ?? false,
|
|
74
|
+
value: envState?.value ?? fc.default_value,
|
|
75
|
+
tags: [],
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
this.initialised = true;
|
|
79
|
+
this.emit();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
await this.fetchFlags();
|
|
83
|
+
this.connectSSE();
|
|
84
|
+
}
|
|
85
|
+
/** Stop the SSE connection and release resources. */
|
|
86
|
+
destroy() {
|
|
87
|
+
this.destroyed = true;
|
|
88
|
+
this.disconnectSSE();
|
|
89
|
+
this.listeners.clear();
|
|
90
|
+
}
|
|
91
|
+
/** Clear the local flag store and re-fetch all flags from the API. */
|
|
92
|
+
async refreshSession() {
|
|
93
|
+
this.flags.clear();
|
|
94
|
+
await this.fetchFlags();
|
|
95
|
+
}
|
|
96
|
+
/** Update the user context and re-fetch flags. */
|
|
97
|
+
async identify(user) {
|
|
98
|
+
this.user = user;
|
|
99
|
+
await this.fetchFlags();
|
|
100
|
+
}
|
|
101
|
+
/** Subscribe to flag changes. Returns an unsubscribe function. */
|
|
102
|
+
subscribe(listener) {
|
|
103
|
+
this.listeners.add(listener);
|
|
104
|
+
return () => {
|
|
105
|
+
this.listeners.delete(listener);
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/** True once the first successful fetch has completed. */
|
|
109
|
+
get isInitialised() {
|
|
110
|
+
return this.initialised;
|
|
111
|
+
}
|
|
112
|
+
/** Return the stored {@link Flag} for the given key, or `undefined`. */
|
|
113
|
+
getFlag(key) {
|
|
114
|
+
return this.flags.get(key);
|
|
115
|
+
}
|
|
116
|
+
/** Return all stored flags. */
|
|
117
|
+
getAllFlags() {
|
|
118
|
+
return Array.from(this.flags.values());
|
|
119
|
+
}
|
|
120
|
+
/** Build a {@link FlagMetadata} object for a stored flag. */
|
|
121
|
+
getFlagMetadata(key) {
|
|
122
|
+
const flag = this.flags.get(key);
|
|
123
|
+
if (!flag)
|
|
124
|
+
return undefined;
|
|
125
|
+
return {
|
|
126
|
+
category: flag.category,
|
|
127
|
+
purpose: flag.purpose,
|
|
128
|
+
owners: flag.owners,
|
|
129
|
+
isPermanent: flag.isPermanent,
|
|
130
|
+
expiresAt: flag.expiresAt,
|
|
131
|
+
tags: flag.tags,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
// Register / dispatch
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
/**
|
|
138
|
+
* Register a handler for the given operation name.
|
|
139
|
+
*
|
|
140
|
+
* When `flagKey` is provided the handler is used only when that flag is
|
|
141
|
+
* enabled. Omit `flagKey` to register the default (fallback) handler.
|
|
142
|
+
*/
|
|
143
|
+
register(operation, handler, flagKey) {
|
|
144
|
+
let list = this.registry.get(operation);
|
|
145
|
+
if (!list) {
|
|
146
|
+
list = [];
|
|
147
|
+
this.registry.set(operation, list);
|
|
148
|
+
}
|
|
149
|
+
if (flagKey === undefined) {
|
|
150
|
+
const idx = list.findIndex((r) => r.flagKey === undefined);
|
|
151
|
+
if (idx !== -1)
|
|
152
|
+
list[idx] = { handler };
|
|
153
|
+
else
|
|
154
|
+
list.push({ handler });
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
list.push({ handler, flagKey });
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Dispatch the appropriate handler for the given operation.
|
|
162
|
+
*
|
|
163
|
+
* Returns the first registered handler whose flag is enabled. Falls back
|
|
164
|
+
* to the default (no-flagKey) handler if no flagged handler matches.
|
|
165
|
+
*
|
|
166
|
+
* @throws If no handlers are registered for the operation.
|
|
167
|
+
* @throws If no flagged handler matches and no default is registered.
|
|
168
|
+
*/
|
|
169
|
+
dispatch(operation, _context) {
|
|
170
|
+
const list = this.registry.get(operation);
|
|
171
|
+
if (!list || list.length === 0) {
|
|
172
|
+
throw new Error(`No handlers registered for operation '${operation}'. Call register() before dispatch().`);
|
|
173
|
+
}
|
|
174
|
+
for (const reg of list) {
|
|
175
|
+
if (reg.flagKey !== undefined) {
|
|
176
|
+
const flag = this.flags.get(reg.flagKey);
|
|
177
|
+
if (flag && flag.enabled)
|
|
178
|
+
return reg.handler;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
const defaultReg = list.find((r) => r.flagKey === undefined);
|
|
182
|
+
if (!defaultReg) {
|
|
183
|
+
throw new Error(`No matching handler for operation '${operation}' and no default registered. Register a default handler (no flagKey) as the last registration.`);
|
|
184
|
+
}
|
|
185
|
+
return defaultReg.handler;
|
|
186
|
+
}
|
|
187
|
+
// ---------------------------------------------------------------------------
|
|
188
|
+
// Typed evaluation methods
|
|
189
|
+
// ---------------------------------------------------------------------------
|
|
190
|
+
/**
|
|
191
|
+
* Evaluate a boolean flag from the in-memory store.
|
|
192
|
+
*
|
|
193
|
+
* No API call is made -- the value comes from the flags already fetched
|
|
194
|
+
* via {@link init} and kept up-to-date by SSE.
|
|
195
|
+
*/
|
|
196
|
+
boolValue(key, defaultValue) {
|
|
197
|
+
if (this.flagConfig) {
|
|
198
|
+
const ctx = this.user ? { attributes: this.user.attributes } : undefined;
|
|
199
|
+
const result = evaluateLocal(this.flagConfig, this.environment, key, ctx);
|
|
200
|
+
if (result.reason === 'flag_not_found')
|
|
201
|
+
return defaultValue;
|
|
202
|
+
if (result.value === 'true')
|
|
203
|
+
return true;
|
|
204
|
+
if (result.value === 'false')
|
|
205
|
+
return false;
|
|
206
|
+
return defaultValue;
|
|
207
|
+
}
|
|
208
|
+
const flag = this.flags.get(key);
|
|
209
|
+
if (!flag || !flag.enabled)
|
|
210
|
+
return defaultValue;
|
|
211
|
+
if (typeof flag.value === 'boolean')
|
|
212
|
+
return flag.value;
|
|
213
|
+
if (flag.value === 'true')
|
|
214
|
+
return true;
|
|
215
|
+
if (flag.value === 'false')
|
|
216
|
+
return false;
|
|
217
|
+
return defaultValue;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Evaluate a string flag from the in-memory store.
|
|
221
|
+
*/
|
|
222
|
+
stringValue(key, defaultValue) {
|
|
223
|
+
if (this.flagConfig) {
|
|
224
|
+
const ctx = this.user ? { attributes: this.user.attributes } : undefined;
|
|
225
|
+
const result = evaluateLocal(this.flagConfig, this.environment, key, ctx);
|
|
226
|
+
if (result.reason === 'flag_not_found')
|
|
227
|
+
return defaultValue;
|
|
228
|
+
return result.value;
|
|
229
|
+
}
|
|
230
|
+
const flag = this.flags.get(key);
|
|
231
|
+
if (!flag || !flag.enabled)
|
|
232
|
+
return defaultValue;
|
|
233
|
+
if (typeof flag.value === 'string')
|
|
234
|
+
return flag.value;
|
|
235
|
+
if (flag.value != null)
|
|
236
|
+
return String(flag.value);
|
|
237
|
+
return defaultValue;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Evaluate a number flag from the in-memory store.
|
|
241
|
+
*
|
|
242
|
+
* TypeScript has no separate `int` type -- this returns `number` and is
|
|
243
|
+
* the idiomatic equivalent of `intValue` / `floatValue` in other SDKs.
|
|
244
|
+
*/
|
|
245
|
+
numberValue(key, defaultValue) {
|
|
246
|
+
if (this.flagConfig) {
|
|
247
|
+
const ctx = this.user ? { attributes: this.user.attributes } : undefined;
|
|
248
|
+
const result = evaluateLocal(this.flagConfig, this.environment, key, ctx);
|
|
249
|
+
if (result.reason === 'flag_not_found')
|
|
250
|
+
return defaultValue;
|
|
251
|
+
const parsed = Number(result.value);
|
|
252
|
+
if (!Number.isNaN(parsed))
|
|
253
|
+
return parsed;
|
|
254
|
+
return defaultValue;
|
|
255
|
+
}
|
|
256
|
+
const flag = this.flags.get(key);
|
|
257
|
+
if (!flag || !flag.enabled)
|
|
258
|
+
return defaultValue;
|
|
259
|
+
if (typeof flag.value === 'number')
|
|
260
|
+
return flag.value;
|
|
261
|
+
if (typeof flag.value === 'string') {
|
|
262
|
+
const parsed = Number(flag.value);
|
|
263
|
+
if (!Number.isNaN(parsed))
|
|
264
|
+
return parsed;
|
|
265
|
+
}
|
|
266
|
+
return defaultValue;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Evaluate a JSON (object) flag from the in-memory store.
|
|
270
|
+
*/
|
|
271
|
+
jsonValue(key, defaultValue) {
|
|
272
|
+
if (this.flagConfig) {
|
|
273
|
+
const ctx = this.user ? { attributes: this.user.attributes } : undefined;
|
|
274
|
+
const result = evaluateLocal(this.flagConfig, this.environment, key, ctx);
|
|
275
|
+
if (result.reason === 'flag_not_found')
|
|
276
|
+
return defaultValue;
|
|
277
|
+
try {
|
|
278
|
+
return JSON.parse(result.value);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
return defaultValue;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
const flag = this.flags.get(key);
|
|
285
|
+
if (!flag || !flag.enabled)
|
|
286
|
+
return defaultValue;
|
|
287
|
+
if (typeof flag.value === 'object' && flag.value !== null)
|
|
288
|
+
return flag.value;
|
|
289
|
+
if (typeof flag.value === 'string') {
|
|
290
|
+
try {
|
|
291
|
+
return JSON.parse(flag.value);
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
return defaultValue;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return defaultValue;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Return the full evaluation detail for a flag from the in-memory store.
|
|
301
|
+
*
|
|
302
|
+
* Returns `{ value, enabled, metadata, loading }` matching the
|
|
303
|
+
* {@link FlagDetail} interface used by the `useFlagDetail` hook.
|
|
304
|
+
*/
|
|
305
|
+
detail(key) {
|
|
306
|
+
const flag = this.flags.get(key);
|
|
307
|
+
const loading = !this.initialised;
|
|
308
|
+
if (!flag) {
|
|
309
|
+
return {
|
|
310
|
+
value: undefined,
|
|
311
|
+
enabled: false,
|
|
312
|
+
metadata: {
|
|
313
|
+
category: 'feature',
|
|
314
|
+
purpose: '',
|
|
315
|
+
owners: [],
|
|
316
|
+
isPermanent: false,
|
|
317
|
+
tags: [],
|
|
318
|
+
},
|
|
319
|
+
loading,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
return {
|
|
323
|
+
value: flag.value,
|
|
324
|
+
enabled: flag.enabled,
|
|
325
|
+
metadata: {
|
|
326
|
+
category: flag.category,
|
|
327
|
+
purpose: flag.purpose,
|
|
328
|
+
owners: flag.owners,
|
|
329
|
+
isPermanent: flag.isPermanent,
|
|
330
|
+
expiresAt: flag.expiresAt,
|
|
331
|
+
tags: flag.tags,
|
|
332
|
+
},
|
|
333
|
+
loading,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
// ---------------------------------------------------------------------------
|
|
337
|
+
// HTTP
|
|
338
|
+
// ---------------------------------------------------------------------------
|
|
339
|
+
get headers() {
|
|
340
|
+
const h = {
|
|
341
|
+
Authorization: `ApiKey ${this.apiKey}`,
|
|
342
|
+
'Content-Type': 'application/json',
|
|
343
|
+
Accept: 'application/json',
|
|
344
|
+
};
|
|
345
|
+
if (this.sessionId) {
|
|
346
|
+
h['X-DeploySentry-Session'] = this.sessionId;
|
|
347
|
+
}
|
|
348
|
+
return h;
|
|
349
|
+
}
|
|
350
|
+
buildQueryParams() {
|
|
351
|
+
const params = new URLSearchParams({
|
|
352
|
+
project_id: this.project,
|
|
353
|
+
environment_id: this.environment,
|
|
354
|
+
application: this.application,
|
|
355
|
+
});
|
|
356
|
+
if (this.user?.id) {
|
|
357
|
+
params.set('userId', this.user.id);
|
|
358
|
+
}
|
|
359
|
+
if (this.user?.attributes) {
|
|
360
|
+
params.set('attributes', JSON.stringify(this.user.attributes));
|
|
361
|
+
}
|
|
362
|
+
return params;
|
|
363
|
+
}
|
|
364
|
+
async fetchFlags() {
|
|
365
|
+
// Match the backend `listFlags` endpoint, which only requires a project_id.
|
|
366
|
+
const url = `${this.baseURL}/api/v1/flags?project_id=${encodeURIComponent(this.project)}&application=${encodeURIComponent(this.application)}`;
|
|
367
|
+
const response = await fetch(url, {
|
|
368
|
+
method: 'GET',
|
|
369
|
+
headers: this.headers,
|
|
370
|
+
});
|
|
371
|
+
if (!response.ok) {
|
|
372
|
+
const body = await response.text().catch(() => '');
|
|
373
|
+
throw new Error(`DeploySentry: failed to fetch flags (${response.status}): ${body}`);
|
|
374
|
+
}
|
|
375
|
+
const data = await response.json();
|
|
376
|
+
this.flags.clear();
|
|
377
|
+
for (const raw of data) {
|
|
378
|
+
this.flags.set(raw.key, toFlag(raw));
|
|
379
|
+
}
|
|
380
|
+
this.initialised = true;
|
|
381
|
+
this.emit();
|
|
382
|
+
}
|
|
383
|
+
// ---------------------------------------------------------------------------
|
|
384
|
+
// SSE
|
|
385
|
+
// ---------------------------------------------------------------------------
|
|
386
|
+
connectSSE() {
|
|
387
|
+
if (this.destroyed)
|
|
388
|
+
return;
|
|
389
|
+
if (typeof EventSource === 'undefined')
|
|
390
|
+
return; // SSR guard
|
|
391
|
+
const params = this.buildQueryParams();
|
|
392
|
+
const url = `${this.baseURL}/api/v1/flags/stream?${params.toString()}`;
|
|
393
|
+
// EventSource does not support custom headers natively. We pass the
|
|
394
|
+
// API key as a query parameter for SSE connections.
|
|
395
|
+
const sseUrl = new URL(url);
|
|
396
|
+
sseUrl.searchParams.set('token', this.apiKey);
|
|
397
|
+
const es = new EventSource(sseUrl.toString());
|
|
398
|
+
// The backend sends all flag change events with SSE event type
|
|
399
|
+
// "flag_change". The JSON payload's inner "event" field distinguishes
|
|
400
|
+
// the specific action (flag.updated, flag.toggled, flag.deleted, etc.).
|
|
401
|
+
es.addEventListener('flag_change', (event) => {
|
|
402
|
+
try {
|
|
403
|
+
const outer = JSON.parse(event.data);
|
|
404
|
+
// event.data is a double-encoded JSON string from SSEvent():
|
|
405
|
+
// the outer layer is the SSE data field, inner is the SSEEvent struct.
|
|
406
|
+
const data = typeof outer === 'string' ? JSON.parse(outer) : outer;
|
|
407
|
+
if (data?.event === 'flag.deleted' && data?.flag_key) {
|
|
408
|
+
this.flags.delete(data.flag_key);
|
|
409
|
+
this.emit();
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
// For all other events (updated, toggled, created, rule changes),
|
|
413
|
+
// re-fetch the full flag set to get the current state.
|
|
414
|
+
this.fetchFlags();
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
catch {
|
|
418
|
+
// Malformed event — trigger a full refresh as a fallback.
|
|
419
|
+
this.fetchFlags();
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
es.onerror = () => {
|
|
423
|
+
this.disconnectSSE();
|
|
424
|
+
this.scheduleReconnect();
|
|
425
|
+
};
|
|
426
|
+
this.eventSource = es;
|
|
427
|
+
this.sseRetryCount = 0;
|
|
428
|
+
}
|
|
429
|
+
handleSSEMessage(event) {
|
|
430
|
+
try {
|
|
431
|
+
const data = JSON.parse(event.data);
|
|
432
|
+
const raw = data?.flag ?? data;
|
|
433
|
+
if (raw?.key) {
|
|
434
|
+
this.flags.set(raw.key, toFlag(raw));
|
|
435
|
+
this.emit();
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
catch {
|
|
439
|
+
// Ignore malformed messages.
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
disconnectSSE() {
|
|
443
|
+
if (this.eventSource) {
|
|
444
|
+
this.eventSource.close();
|
|
445
|
+
this.eventSource = null;
|
|
446
|
+
}
|
|
447
|
+
if (this.sseRetryTimer !== null) {
|
|
448
|
+
clearTimeout(this.sseRetryTimer);
|
|
449
|
+
this.sseRetryTimer = null;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
scheduleReconnect() {
|
|
453
|
+
if (this.destroyed)
|
|
454
|
+
return;
|
|
455
|
+
const baseDelay = Math.min(1000 * Math.pow(2, this.sseRetryCount), DeploySentryClient.SSE_MAX_RETRY_DELAY_MS);
|
|
456
|
+
const jitter = baseDelay * 0.2 * (2 * Math.random() - 1);
|
|
457
|
+
const delay = baseDelay + jitter;
|
|
458
|
+
this.sseRetryCount++;
|
|
459
|
+
this.sseRetryTimer = setTimeout(() => {
|
|
460
|
+
this.sseRetryTimer = null;
|
|
461
|
+
this.connectSSE();
|
|
462
|
+
}, delay);
|
|
463
|
+
}
|
|
464
|
+
// ---------------------------------------------------------------------------
|
|
465
|
+
// Internal
|
|
466
|
+
// ---------------------------------------------------------------------------
|
|
467
|
+
emit() {
|
|
468
|
+
for (const listener of this.listeners) {
|
|
469
|
+
try {
|
|
470
|
+
listener();
|
|
471
|
+
}
|
|
472
|
+
catch {
|
|
473
|
+
// Listener errors must not break the notification loop.
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
DeploySentryClient.SSE_MAX_RETRY_DELAY_MS = 30000;
|
|
479
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAelD;;GAEG;AACH,SAAS,MAAM,CAAC,GAAoB;IAClC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAChC,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS;QACpC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;QAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,KAAK;QACtC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;KACtB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IAkC7B,YAAY,OAUX;QApCO,eAAU,GAAsB,IAAI,CAAC;QAG7C,8CAA8C;QAC7B,UAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;QAEjD,wEAAwE;QAChE,aAAQ,GAAgC,IAAI,GAAG,EAAE,CAAC;QAE1D,wDAAwD;QACvC,cAAS,GAAG,IAAI,GAAG,EAAsB,CAAC;QAE3D,qCAAqC;QAC7B,gBAAW,GAAuB,IAAI,CAAC;QAE/C,6DAA6D;QACrD,gBAAW,GAAG,KAAK,CAAC;QAE5B,6CAA6C;QACrC,cAAS,GAAG,KAAK,CAAC;QAE1B,wCAAwC;QAChC,kBAAa,GAAyC,IAAI,CAAC;QAC3D,kBAAa,GAAG,CAAC,CAAC;QAcxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAE9E,wEAAwE;IACxE,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,2DAA2D;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;YACjC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACvC,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE;oBACrB,GAAG,EAAE,EAAE,CAAC,GAAG;oBACX,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,QAAQ,EAAE,EAAE,CAAC,QAAe;oBAC5B,OAAO,EAAE,EAAE;oBACX,MAAM,EAAE,EAAE;oBACV,WAAW,EAAE,EAAE,CAAC,YAAY;oBAC5B,SAAS,EAAE,EAAE,CAAC,UAAU;oBACxB,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,KAAK;oBACnC,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa;oBAC1C,IAAI,EAAE,EAAE;iBACT,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,qDAAqD;IACrD,OAAO;QACL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,sEAAsE;IACtE,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,QAAQ,CAAC,IAA6B;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;IAED,kEAAkE;IAClE,SAAS,CAAC,QAA4B;QACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED,0DAA0D;IAC1D,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,wEAAwE;IACxE,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,+BAA+B;IAC/B,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,6DAA6D;IAC7D,eAAe,CAAC,GAAW;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,sBAAsB;IACtB,8EAA8E;IAE9E;;;;;OAKG;IACH,QAAQ,CACN,SAAiB,EACjB,OAAU,EACV,OAAgB;QAEhB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;YAC3D,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;;gBACnC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,QAAQ,CACN,SAAiB,EACjB,QAA4B;QAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,yCAAyC,SAAS,uCAAuC,CAC1F,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO;oBAAE,OAAO,GAAG,CAAC,OAAY,CAAC;YACpD,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,sCAAsC,SAAS,gGAAgG,CAChJ,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,CAAC,OAAY,CAAC;IACjC,CAAC;IAED,8EAA8E;IAC9E,2BAA2B;IAC3B,8EAA8E;IAE9E;;;;;OAKG;IACH,SAAS,CAAC,GAAW,EAAE,YAAqB;QAC1C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1E,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB;gBAAE,OAAO,YAAY,CAAC;YAC5D,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC;YACzC,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO;gBAAE,OAAO,KAAK,CAAC;YAC3C,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,YAAY,CAAC;QAChD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QACvD,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QACvC,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QACzC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,GAAW,EAAE,YAAoB;QAC3C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1E,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB;gBAAE,OAAO,YAAY,CAAC;YAC5D,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,YAAY,CAAC;QAChD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QACtD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,GAAW,EAAE,YAAoB;QAC3C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1E,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB;gBAAE,OAAO,YAAY,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC;YACzC,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,YAAY,CAAC;QAChD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QACtD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC;QAC3C,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,SAAS,CAA4B,GAAW,EAAE,YAAe;QAC/D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1E,IAAI,MAAM,CAAC,MAAM,KAAK,gBAAgB;gBAAE,OAAO,YAAY,CAAC;YAC5D,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAM,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,YAAY,CAAC;YACtB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,YAAY,CAAC;QAChD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,KAAU,CAAC;QAClF,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAM,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,YAAY,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,GAAW;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QAElC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE;oBACR,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,EAAE;oBACX,MAAM,EAAE,EAAE;oBACV,WAAW,EAAE,KAAK;oBAClB,IAAI,EAAE,EAAE;iBACT;gBACD,OAAO;aACR,CAAC;QACJ,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE;gBACR,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;YACD,OAAO;SACR,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,OAAO;IACP,8EAA8E;IAE9E,IAAY,OAAO;QACjB,MAAM,CAAC,GAA2B;YAChC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;YACtC,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;SAC3B,CAAC;QACF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,CAAC,CAAC,wBAAwB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/C,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAEO,gBAAgB;QACtB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YACjC,UAAU,EAAE,IAAI,CAAC,OAAO;YACxB,cAAc,EAAE,IAAI,CAAC,WAAW;YAChC,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,4EAA4E;QAC5E,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,4BAA4B,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAE9I,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,wCAAwC,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CACpE,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAsB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,8EAA8E;IAC9E,MAAM;IACN,8EAA8E;IAEtE,UAAU;QAChB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,OAAO,WAAW,KAAK,WAAW;YAAE,OAAO,CAAC,YAAY;QAE5D,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,wBAAwB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QAEvE,oEAAoE;QACpE,oDAAoD;QACpD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE9C,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE9C,+DAA+D;QAC/D,sEAAsE;QACtE,wEAAwE;QACxE,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAmB,EAAE,EAAE;YACzD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrC,6DAA6D;gBAC7D,uEAAuE;gBACvE,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACnE,IAAI,IAAI,EAAE,KAAK,KAAK,cAAc,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;oBACrD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACjC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,kEAAkE;oBAClE,uDAAuD;oBACvD,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,0DAA0D;gBAC1D,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE;YAChB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IACzB,CAAC;IAEO,gBAAgB,CAAC,KAAmB;QAC1C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,GAAG,GAAgC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC;YAC5D,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAChC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,EACtC,kBAAkB,CAAC,sBAAsB,CAC1C,CAAC;QACF,MAAM,MAAM,GAAG,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;QACjC,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAED,8EAA8E;IAC9E,WAAW;IACX,8EAA8E;IAEtE,IAAI;QACV,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,QAAQ,EAAE,CAAC;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,wDAAwD;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;;AAtduB,yCAAsB,GAAG,KAAM,AAAT,CAAU"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DeploySentryClient } from './client';
|
|
2
|
+
/**
|
|
3
|
+
* React context that holds the DeploySentry client instance.
|
|
4
|
+
*
|
|
5
|
+
* The context value is `null` until the {@link DeploySentryProvider} mounts
|
|
6
|
+
* and initialises the client. Hooks that consume this context will throw
|
|
7
|
+
* if used outside of the provider tree.
|
|
8
|
+
*/
|
|
9
|
+
export declare const DeploySentryContext: import("react").Context<DeploySentryClient | null>;
|
|
10
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,oDAAiD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createContext } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* React context that holds the DeploySentry client instance.
|
|
4
|
+
*
|
|
5
|
+
* The context value is `null` until the {@link DeploySentryProvider} mounts
|
|
6
|
+
* and initialises the client. Hooks that consume this context will throw
|
|
7
|
+
* if used outside of the provider tree.
|
|
8
|
+
*/
|
|
9
|
+
export const DeploySentryContext = createContext(null);
|
|
10
|
+
DeploySentryContext.displayName = 'DeploySentryContext';
|
|
11
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AAElF,mBAAmB,CAAC,WAAW,GAAG,qBAAqB,CAAC"}
|