@dr-sentry/sdk 1.1.0 → 1.1.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.
Files changed (46) hide show
  1. package/README.md +101 -4
  2. package/dist/cjs/cache.d.ts +16 -0
  3. package/dist/cjs/cache.d.ts.map +1 -1
  4. package/dist/cjs/cache.js +21 -1
  5. package/dist/cjs/cache.js.map +1 -1
  6. package/dist/cjs/client.d.ts +44 -1
  7. package/dist/cjs/client.d.ts.map +1 -1
  8. package/dist/cjs/client.js +198 -4
  9. package/dist/cjs/client.js.map +1 -1
  10. package/dist/cjs/defaults.d.ts +58 -0
  11. package/dist/cjs/defaults.d.ts.map +1 -0
  12. package/dist/cjs/defaults.js +175 -0
  13. package/dist/cjs/defaults.js.map +1 -0
  14. package/dist/cjs/index.d.ts +2 -1
  15. package/dist/cjs/index.d.ts.map +1 -1
  16. package/dist/cjs/index.js +4 -1
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/status-reporter.d.ts +42 -0
  19. package/dist/cjs/status-reporter.d.ts.map +1 -0
  20. package/dist/cjs/status-reporter.js +153 -0
  21. package/dist/cjs/status-reporter.js.map +1 -0
  22. package/dist/cjs/types.d.ts +63 -0
  23. package/dist/cjs/types.d.ts.map +1 -1
  24. package/dist/esm/cache.d.ts +16 -0
  25. package/dist/esm/cache.d.ts.map +1 -1
  26. package/dist/esm/cache.js +21 -1
  27. package/dist/esm/cache.js.map +1 -1
  28. package/dist/esm/client.d.ts +44 -1
  29. package/dist/esm/client.d.ts.map +1 -1
  30. package/dist/esm/client.js +198 -4
  31. package/dist/esm/client.js.map +1 -1
  32. package/dist/esm/defaults.d.ts +58 -0
  33. package/dist/esm/defaults.d.ts.map +1 -0
  34. package/dist/esm/defaults.js +136 -0
  35. package/dist/esm/defaults.js.map +1 -0
  36. package/dist/esm/index.d.ts +2 -1
  37. package/dist/esm/index.d.ts.map +1 -1
  38. package/dist/esm/index.js +1 -0
  39. package/dist/esm/index.js.map +1 -1
  40. package/dist/esm/status-reporter.d.ts +42 -0
  41. package/dist/esm/status-reporter.d.ts.map +1 -0
  42. package/dist/esm/status-reporter.js +148 -0
  43. package/dist/esm/status-reporter.js.map +1 -0
  44. package/dist/esm/types.d.ts +63 -0
  45. package/dist/esm/types.d.ts.map +1 -1
  46. package/package.json +1 -1
@@ -0,0 +1,136 @@
1
+ import * as fs from 'fs/promises';
2
+ /**
3
+ * Parse a YAMLExport JSON payload into an OfflineFlagDefault map.
4
+ *
5
+ * `environment` is the SDK's configured environment string. It is matched
6
+ * against the export's `environments[]` first by UUID, then by name
7
+ * (case-insensitive). The first match wins.
8
+ */
9
+ export function parseDefaults(payload, environment) {
10
+ if (!payload || typeof payload !== 'object') {
11
+ throw new Error('deploysentry: defaults payload must be an object');
12
+ }
13
+ const exp = payload;
14
+ if (!Array.isArray(exp.flags)) {
15
+ throw new Error('deploysentry: defaults payload missing flags[] array');
16
+ }
17
+ let envUUID = '';
18
+ if (environment && Array.isArray(exp.environments)) {
19
+ for (const e of exp.environments) {
20
+ if (e.id === environment) {
21
+ envUUID = e.id;
22
+ break;
23
+ }
24
+ }
25
+ if (!envUUID) {
26
+ for (const e of exp.environments) {
27
+ if (e.name && e.name.toLowerCase() === environment.toLowerCase()) {
28
+ envUUID = e.id;
29
+ break;
30
+ }
31
+ }
32
+ }
33
+ }
34
+ const defaults = new Map();
35
+ for (const f of exp.flags) {
36
+ defaults.set(f.key, {
37
+ key: f.key,
38
+ flagType: f.flag_type,
39
+ defaultValue: f.default_value,
40
+ envStates: { ...(f.environments ?? {}) },
41
+ });
42
+ }
43
+ return { defaults, envUUID };
44
+ }
45
+ /**
46
+ * Resolve the offline value for a flag key. Returns `undefined` when the
47
+ * flag is not in the loaded defaults. When an env override exists for the
48
+ * resolved env UUID, its `value` is returned; otherwise the flag's global
49
+ * `defaultValue` is returned.
50
+ */
51
+ export function lookupOfflineDefault(defaults, envUUID, key) {
52
+ const d = defaults.get(key);
53
+ if (!d)
54
+ return undefined;
55
+ if (envUUID) {
56
+ const es = d.envStates[envUUID];
57
+ if (es && es.value !== '') {
58
+ return { value: es.value, enabled: es.enabled, flagType: d.flagType };
59
+ }
60
+ if (es) {
61
+ // Env state exists but value is empty — use flag default with this env's enabled flag.
62
+ return { value: d.defaultValue, enabled: es.enabled, flagType: d.flagType };
63
+ }
64
+ }
65
+ return { value: d.defaultValue, enabled: true, flagType: d.flagType };
66
+ }
67
+ /**
68
+ * Read a defaults JSON file from disk and return the parsed payload.
69
+ * Accepts either raw JSON or YAML based on the file extension.
70
+ */
71
+ export async function readDefaultsFile(path) {
72
+ const data = await fs.readFile(path, 'utf-8');
73
+ if (path.endsWith('.yaml') || path.endsWith('.yml')) {
74
+ // Lazy-load js-yaml so SDK consumers who never call this don't pay
75
+ // for the dependency at startup.
76
+ const yaml = await import('js-yaml');
77
+ return yaml.load(data);
78
+ }
79
+ return JSON.parse(data);
80
+ }
81
+ /**
82
+ * Coerce an offline default raw value into the requested TypeScript type.
83
+ * Mirrors the BoolValue / StringValue / IntValue helpers' coercion rules
84
+ * so offline defaults behave identically to live results.
85
+ */
86
+ export function coerceOfflineValue(raw, requested) {
87
+ switch (requested) {
88
+ case 'bool': {
89
+ // raw may be a JSON literal ("true", "false") OR a plain string ("true").
90
+ let s = raw;
91
+ if (raw.length >= 2 && raw[0] === '"' && raw[raw.length - 1] === '"') {
92
+ s = raw.slice(1, -1);
93
+ }
94
+ const lower = s.toLowerCase();
95
+ if (lower === 'true')
96
+ return true;
97
+ if (lower === 'false')
98
+ return false;
99
+ return undefined;
100
+ }
101
+ case 'string': {
102
+ try {
103
+ const parsed = JSON.parse(raw);
104
+ if (typeof parsed === 'string')
105
+ return parsed;
106
+ }
107
+ catch {
108
+ // not JSON — treat raw as the string itself
109
+ }
110
+ return raw;
111
+ }
112
+ case 'number': {
113
+ const n = Number(raw);
114
+ if (Number.isFinite(n))
115
+ return n;
116
+ try {
117
+ const parsed = JSON.parse(raw);
118
+ if (typeof parsed === 'number' && Number.isFinite(parsed))
119
+ return parsed;
120
+ }
121
+ catch {
122
+ /* ignore */
123
+ }
124
+ return undefined;
125
+ }
126
+ case 'json': {
127
+ try {
128
+ return JSON.parse(raw);
129
+ }
130
+ catch {
131
+ return undefined;
132
+ }
133
+ }
134
+ }
135
+ }
136
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"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"}
@@ -25,5 +25,6 @@ export { FlagCache } from './cache.js';
25
25
  export { FlagStreamClient } from './streaming.js';
26
26
  export { loadFlagConfig } from './file-loader.js';
27
27
  export { evaluateLocal } from './local-evaluator.js';
28
- export type { ClientOptions, EvaluationContext, EvaluationResult, Flag, FlagCategory, FlagMetadata, FlagConfig, FlagConfigFlag, FlagConfigRule, FlagConfigEnvironment, ApiError, } from './types.js';
28
+ export { StatusReporter, resolveVersion } from './status-reporter.js';
29
+ export type { ClientOptions, EvaluationContext, EvaluationResult, Flag, FlagCategory, FlagInspection, FlagSource, FlagMetadata, FlagConfig, FlagConfigFlag, FlagConfigRule, FlagConfigEnvironment, ApiError, HealthReport, } from './types.js';
29
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,QAAQ,GACT,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnE,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,QAAQ,EACR,YAAY,GACb,MAAM,SAAS,CAAC"}
package/dist/esm/index.js CHANGED
@@ -25,4 +25,5 @@ export { FlagCache } from './cache.js';
25
25
  export { FlagStreamClient } from './streaming.js';
26
26
  export { loadFlagConfig } from './file-loader.js';
27
27
  export { evaluateLocal } from './local-evaluator.js';
28
+ export { StatusReporter, resolveVersion } from './status-reporter.js';
28
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { HealthReport } from './types.js';
2
+ /** Options passed to StatusReporter. Internal to the SDK. */
3
+ export interface StatusReporterOptions {
4
+ baseURL: string;
5
+ apiKey: string;
6
+ applicationId: string;
7
+ intervalMs?: number;
8
+ version?: string;
9
+ commitSha?: string;
10
+ deploySlot?: string;
11
+ tags?: Record<string, string>;
12
+ healthProvider?: () => HealthReport | Promise<HealthReport>;
13
+ /** Injection seam for tests. Defaults to global fetch. */
14
+ fetchImpl?: typeof fetch;
15
+ /** Injection seam for tests. */
16
+ warn?: (msg: string) => void;
17
+ }
18
+ /**
19
+ * Resolve the version the app should report, in this preference order:
20
+ * explicit config → standard env vars → `npm_package_version` → "unknown".
21
+ */
22
+ export declare function resolveVersion(explicit?: string): string;
23
+ /**
24
+ * StatusReporter posts periodic `POST /applications/:id/status` updates to
25
+ * DeploySentry on behalf of a DeploySentryClient. Failures are swallowed
26
+ * (logged via `warn`) so flag evaluation is never blocked by reporting.
27
+ */
28
+ export declare class StatusReporter {
29
+ private readonly opts;
30
+ private timer;
31
+ private stopped;
32
+ private backoff;
33
+ constructor(options: StatusReporterOptions);
34
+ /** Fire one immediate report and (if intervalMs > 0) schedule repeats. */
35
+ start(): void;
36
+ /** Stop scheduling further reports. In-flight reports still resolve. */
37
+ stop(): void;
38
+ /** Send exactly one report. Public for tests and explicit callers. */
39
+ reportOnce(): Promise<void>;
40
+ private tick;
41
+ }
42
+ //# sourceMappingURL=status-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-reporter.d.ts","sourceRoot":"","sources":["../../src/status-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAiB5C,6DAA6D;AAC7D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5D,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,gCAAgC;IAChC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CASxD;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAGyE;IAE9F,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAK;gBAER,OAAO,EAAE,qBAAqB;IAiB1C,0EAA0E;IAC1E,KAAK,IAAI,IAAI;IAKb,wEAAwE;IACxE,IAAI,IAAI,IAAI;IAQZ,sEAAsE;IAChE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAuCnB,IAAI;CA+BnB"}
@@ -0,0 +1,148 @@
1
+ /** Environment variable names probed (in order) for the running version. */
2
+ const VERSION_ENV_CHAIN = [
3
+ 'APP_VERSION',
4
+ 'GIT_SHA',
5
+ 'GIT_COMMIT',
6
+ 'SOURCE_COMMIT',
7
+ 'RAILWAY_GIT_COMMIT_SHA',
8
+ 'RENDER_GIT_COMMIT',
9
+ 'VERCEL_GIT_COMMIT_SHA',
10
+ 'HEROKU_SLUG_COMMIT',
11
+ ];
12
+ const MIN_BACKOFF_MS = 1_000;
13
+ const MAX_BACKOFF_MS = 5 * 60_000;
14
+ /**
15
+ * Resolve the version the app should report, in this preference order:
16
+ * explicit config → standard env vars → `npm_package_version` → "unknown".
17
+ */
18
+ export function resolveVersion(explicit) {
19
+ if (explicit && explicit.trim())
20
+ return explicit;
21
+ const env = typeof process !== 'undefined' && process.env ? process.env : {};
22
+ for (const name of VERSION_ENV_CHAIN) {
23
+ const v = env[name];
24
+ if (v && v.trim())
25
+ return v;
26
+ }
27
+ if (env.npm_package_version)
28
+ return env.npm_package_version;
29
+ return 'unknown';
30
+ }
31
+ /**
32
+ * StatusReporter posts periodic `POST /applications/:id/status` updates to
33
+ * DeploySentry on behalf of a DeploySentryClient. Failures are swallowed
34
+ * (logged via `warn`) so flag evaluation is never blocked by reporting.
35
+ */
36
+ export class StatusReporter {
37
+ opts;
38
+ timer = null;
39
+ stopped = false;
40
+ backoff = 0;
41
+ constructor(options) {
42
+ if (!options.baseURL)
43
+ throw new Error('baseURL is required');
44
+ if (!options.apiKey)
45
+ throw new Error('apiKey is required');
46
+ if (!options.applicationId)
47
+ throw new Error('applicationId is required');
48
+ const intervalMs = options.intervalMs ?? 30_000;
49
+ if (intervalMs < 0)
50
+ throw new Error('intervalMs must be >= 0');
51
+ this.opts = {
52
+ ...options,
53
+ baseURL: options.baseURL.replace(/\/+$/, ''),
54
+ apiKey: options.apiKey,
55
+ applicationId: options.applicationId,
56
+ intervalMs,
57
+ warn: options.warn ?? ((msg) => console.warn('[DeploySentry] ' + msg)),
58
+ };
59
+ }
60
+ /** Fire one immediate report and (if intervalMs > 0) schedule repeats. */
61
+ start() {
62
+ this.stopped = false;
63
+ void this.tick();
64
+ }
65
+ /** Stop scheduling further reports. In-flight reports still resolve. */
66
+ stop() {
67
+ this.stopped = true;
68
+ if (this.timer) {
69
+ clearTimeout(this.timer);
70
+ this.timer = null;
71
+ }
72
+ }
73
+ /** Send exactly one report. Public for tests and explicit callers. */
74
+ async reportOnce() {
75
+ const version = resolveVersion(this.opts.version);
76
+ let health = { state: 'healthy' };
77
+ if (this.opts.healthProvider) {
78
+ try {
79
+ health = await this.opts.healthProvider();
80
+ }
81
+ catch (err) {
82
+ health = { state: 'unknown', reason: String(err?.message ?? err) };
83
+ }
84
+ }
85
+ const body = {
86
+ version,
87
+ health: health.state,
88
+ };
89
+ if (health.score !== undefined)
90
+ body.health_score = health.score;
91
+ if (health.reason)
92
+ body.health_reason = health.reason;
93
+ if (this.opts.commitSha)
94
+ body.commit_sha = this.opts.commitSha;
95
+ if (this.opts.deploySlot)
96
+ body.deploy_slot = this.opts.deploySlot;
97
+ if (this.opts.tags && Object.keys(this.opts.tags).length)
98
+ body.tags = this.opts.tags;
99
+ const fetchImpl = this.opts.fetchImpl ?? fetch;
100
+ const url = `${this.opts.baseURL}/api/v1/applications/${encodeURIComponent(this.opts.applicationId)}/status`;
101
+ const res = await fetchImpl(url, {
102
+ method: 'POST',
103
+ headers: {
104
+ 'Content-Type': 'application/json',
105
+ Authorization: `ApiKey ${this.opts.apiKey}`,
106
+ },
107
+ body: JSON.stringify(body),
108
+ });
109
+ if (!res.ok) {
110
+ throw new Error(`status report failed: ${res.status} ${res.statusText}`);
111
+ }
112
+ }
113
+ async tick() {
114
+ if (this.stopped)
115
+ return;
116
+ try {
117
+ await this.reportOnce();
118
+ this.backoff = 0; // success — clear backoff
119
+ }
120
+ catch (err) {
121
+ this.opts.warn(`status report error: ${err.message}`);
122
+ if (this.backoff >= MAX_BACKOFF_MS) {
123
+ // Already at the ceiling. Reset so the next schedule falls back to
124
+ // intervalMs — otherwise a server that recovers mid-outage takes up
125
+ // to MAX_BACKOFF_MS (5m) to be noticed, regardless of how tight the
126
+ // operator configured intervalMs. On the next failure the 1s ladder
127
+ // restarts, so the short-outage behavior (quickly re-probe while
128
+ // the server is still down) is preserved.
129
+ this.backoff = 0;
130
+ this.opts.warn(`status reporter backoff reset; probing every ${this.opts.intervalMs}ms`);
131
+ }
132
+ else {
133
+ this.backoff = this.backoff === 0 ? MIN_BACKOFF_MS : Math.min(this.backoff * 2, MAX_BACKOFF_MS);
134
+ }
135
+ }
136
+ if (this.stopped)
137
+ return;
138
+ if (this.opts.intervalMs === 0)
139
+ return; // startup-only
140
+ const nextDelay = this.backoff > 0 ? this.backoff : this.opts.intervalMs;
141
+ this.timer = setTimeout(() => void this.tick(), nextDelay);
142
+ // Allow Node to exit even when the timer is pending.
143
+ if (typeof this.timer.unref === 'function') {
144
+ this.timer.unref?.();
145
+ }
146
+ }
147
+ }
148
+ //# sourceMappingURL=status-reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-reporter.js","sourceRoot":"","sources":["../../src/status-reporter.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,40 @@ export interface Flag {
31
31
  /** ISO-8601 timestamp of the last update. */
32
32
  updatedAt: string;
33
33
  }
34
+ /**
35
+ * Where an inspected flag's current value originated.
36
+ *
37
+ * - `server` — fetched live from the API and still within its cache TTL.
38
+ * - `cache` — a previously-fetched server value whose TTL has elapsed but
39
+ * is still being served (server currently unreachable).
40
+ * - `file` — an offline file: a `mode: 'file'` config, or the offline
41
+ * defaults loaded via `loadDefaults*()` used as a fallback.
42
+ * - `default`— no value from any source; callers receive their coded default.
43
+ */
44
+ export type FlagSource = 'server' | 'cache' | 'file' | 'default';
45
+ /**
46
+ * A read-only view of a single flag's resolved value and provenance,
47
+ * suitable for wiring into an admin or support panel. Produced by
48
+ * {@link DeploySentryClient.inspect}.
49
+ */
50
+ export interface FlagInspection {
51
+ /** The flag key. */
52
+ key: string;
53
+ /** The currently-resolved value (parsed to its declared type). */
54
+ value: unknown;
55
+ /** The flag's value type. `unknown` when it cannot be determined. */
56
+ type: 'boolean' | 'integer' | 'number' | 'string' | 'json' | 'unknown';
57
+ /** Whether the flag is enabled in the resolved environment. */
58
+ enabled: boolean;
59
+ /** Where {@link value} came from. */
60
+ source: FlagSource;
61
+ /** Evaluation reason code (e.g. LIVE, CACHE, OFFLINE_FILE, OFFLINE_DEFAULT, DEFAULT). */
62
+ reason: string;
63
+ /** ISO-8601 timestamp the value was last fetched / loaded. Undefined for `default`. */
64
+ fetchedAt?: string;
65
+ /** True when {@link source} is `cache` and the entry is past its TTL. */
66
+ stale: boolean;
67
+ }
34
68
  /** Contextual information sent with every evaluation request. */
35
69
  export interface EvaluationContext {
36
70
  /** Identifier of the user being evaluated. */
@@ -79,6 +113,35 @@ export interface ClientOptions {
79
113
  flagFilePath?: string;
80
114
  /** Called whenever the flag cache is refreshed from an SSE change event. */
81
115
  onFlagChange?: (flags: Flag[]) => void;
116
+ /**
117
+ * Application UUID. Required when `reportStatus` is true. Distinct from
118
+ * `application` (the slug used for flag evaluation) because the status
119
+ * endpoint is keyed on the UUID.
120
+ */
121
+ applicationId?: string;
122
+ /** Enable the status reporter. Default: false. */
123
+ reportStatus?: boolean;
124
+ /** Interval in ms between status reports. Default: 30_000. 0 = send once on init. */
125
+ reportStatusIntervalMs?: number;
126
+ /** Override the auto-detected version string. */
127
+ reportStatusVersion?: string;
128
+ /** Commit SHA reported alongside the version. */
129
+ reportStatusCommitSha?: string;
130
+ /** Optional deploy-slot tag (`stable` / `canary`). */
131
+ reportStatusDeploySlot?: string;
132
+ /** Arbitrary tags attached to every report. */
133
+ reportStatusTags?: Record<string, string>;
134
+ /**
135
+ * Optional callback resolving the current health. If omitted the reporter
136
+ * sends `state: 'healthy'` on every tick (the "process alive" floor).
137
+ */
138
+ reportStatusHealthProvider?: () => HealthReport | Promise<HealthReport>;
139
+ }
140
+ /** Shape returned by a status reporter's health provider. */
141
+ export interface HealthReport {
142
+ state: 'healthy' | 'degraded' | 'unhealthy' | 'unknown';
143
+ score?: number;
144
+ reason?: string;
82
145
  }
83
146
  export interface FlagConfig {
84
147
  version: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dr-sentry/sdk",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Official Node.js SDK for the DeploySentry platform – feature flag evaluation with rich metadata",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",