@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,58 @@
1
+ /**
2
+ * In-memory representation of one flag from an offline-defaults export.
3
+ *
4
+ * The SDK keeps a map from flag key → OfflineFlagDefault and consults it
5
+ * from {@link DeploySentryClient.evaluate} when the live API and the
6
+ * cache both fail.
7
+ */
8
+ export interface OfflineFlagDefault {
9
+ key: string;
10
+ flagType: string;
11
+ defaultValue: string;
12
+ /** Map from env UUID → per-env state from the export. */
13
+ envStates: Record<string, {
14
+ enabled: boolean;
15
+ value: string;
16
+ }>;
17
+ }
18
+ /** Result of parsing a YAMLExport JSON payload. */
19
+ export interface ParsedDefaults {
20
+ defaults: Map<string, OfflineFlagDefault>;
21
+ /**
22
+ * The env UUID matched at load time against the configured environment.
23
+ * When empty, no env match was found — lookups fall back to the flag's
24
+ * `defaultValue`.
25
+ */
26
+ envUUID: string;
27
+ }
28
+ /**
29
+ * Parse a YAMLExport JSON payload into an OfflineFlagDefault map.
30
+ *
31
+ * `environment` is the SDK's configured environment string. It is matched
32
+ * against the export's `environments[]` first by UUID, then by name
33
+ * (case-insensitive). The first match wins.
34
+ */
35
+ export declare function parseDefaults(payload: unknown, environment: string): ParsedDefaults;
36
+ /**
37
+ * Resolve the offline value for a flag key. Returns `undefined` when the
38
+ * flag is not in the loaded defaults. When an env override exists for the
39
+ * resolved env UUID, its `value` is returned; otherwise the flag's global
40
+ * `defaultValue` is returned.
41
+ */
42
+ export declare function lookupOfflineDefault(defaults: Map<string, OfflineFlagDefault>, envUUID: string, key: string): {
43
+ value: string;
44
+ enabled: boolean;
45
+ flagType: string;
46
+ } | undefined;
47
+ /**
48
+ * Read a defaults JSON file from disk and return the parsed payload.
49
+ * Accepts either raw JSON or YAML based on the file extension.
50
+ */
51
+ export declare function readDefaultsFile(path: string): Promise<unknown>;
52
+ /**
53
+ * Coerce an offline default raw value into the requested TypeScript type.
54
+ * Mirrors the BoolValue / StringValue / IntValue helpers' coercion rules
55
+ * so offline defaults behave identically to live results.
56
+ */
57
+ export declare function coerceOfflineValue<T>(raw: string, requested: 'bool' | 'string' | 'number' | 'json'): T | undefined;
58
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE;AAED,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC1C;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,cAAc,CAqCnF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EACzC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAenE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASrE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,SAAS,CAyClH"}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parseDefaults = parseDefaults;
37
+ exports.lookupOfflineDefault = lookupOfflineDefault;
38
+ exports.readDefaultsFile = readDefaultsFile;
39
+ exports.coerceOfflineValue = coerceOfflineValue;
40
+ const fs = __importStar(require("fs/promises"));
41
+ /**
42
+ * Parse a YAMLExport JSON payload into an OfflineFlagDefault map.
43
+ *
44
+ * `environment` is the SDK's configured environment string. It is matched
45
+ * against the export's `environments[]` first by UUID, then by name
46
+ * (case-insensitive). The first match wins.
47
+ */
48
+ function parseDefaults(payload, environment) {
49
+ if (!payload || typeof payload !== 'object') {
50
+ throw new Error('deploysentry: defaults payload must be an object');
51
+ }
52
+ const exp = payload;
53
+ if (!Array.isArray(exp.flags)) {
54
+ throw new Error('deploysentry: defaults payload missing flags[] array');
55
+ }
56
+ let envUUID = '';
57
+ if (environment && Array.isArray(exp.environments)) {
58
+ for (const e of exp.environments) {
59
+ if (e.id === environment) {
60
+ envUUID = e.id;
61
+ break;
62
+ }
63
+ }
64
+ if (!envUUID) {
65
+ for (const e of exp.environments) {
66
+ if (e.name && e.name.toLowerCase() === environment.toLowerCase()) {
67
+ envUUID = e.id;
68
+ break;
69
+ }
70
+ }
71
+ }
72
+ }
73
+ const defaults = new Map();
74
+ for (const f of exp.flags) {
75
+ defaults.set(f.key, {
76
+ key: f.key,
77
+ flagType: f.flag_type,
78
+ defaultValue: f.default_value,
79
+ envStates: { ...(f.environments ?? {}) },
80
+ });
81
+ }
82
+ return { defaults, envUUID };
83
+ }
84
+ /**
85
+ * Resolve the offline value for a flag key. Returns `undefined` when the
86
+ * flag is not in the loaded defaults. When an env override exists for the
87
+ * resolved env UUID, its `value` is returned; otherwise the flag's global
88
+ * `defaultValue` is returned.
89
+ */
90
+ function lookupOfflineDefault(defaults, envUUID, key) {
91
+ const d = defaults.get(key);
92
+ if (!d)
93
+ return undefined;
94
+ if (envUUID) {
95
+ const es = d.envStates[envUUID];
96
+ if (es && es.value !== '') {
97
+ return { value: es.value, enabled: es.enabled, flagType: d.flagType };
98
+ }
99
+ if (es) {
100
+ // Env state exists but value is empty — use flag default with this env's enabled flag.
101
+ return { value: d.defaultValue, enabled: es.enabled, flagType: d.flagType };
102
+ }
103
+ }
104
+ return { value: d.defaultValue, enabled: true, flagType: d.flagType };
105
+ }
106
+ /**
107
+ * Read a defaults JSON file from disk and return the parsed payload.
108
+ * Accepts either raw JSON or YAML based on the file extension.
109
+ */
110
+ async function readDefaultsFile(path) {
111
+ const data = await fs.readFile(path, 'utf-8');
112
+ if (path.endsWith('.yaml') || path.endsWith('.yml')) {
113
+ // Lazy-load js-yaml so SDK consumers who never call this don't pay
114
+ // for the dependency at startup.
115
+ const yaml = await Promise.resolve().then(() => __importStar(require('js-yaml')));
116
+ return yaml.load(data);
117
+ }
118
+ return JSON.parse(data);
119
+ }
120
+ /**
121
+ * Coerce an offline default raw value into the requested TypeScript type.
122
+ * Mirrors the BoolValue / StringValue / IntValue helpers' coercion rules
123
+ * so offline defaults behave identically to live results.
124
+ */
125
+ function coerceOfflineValue(raw, requested) {
126
+ switch (requested) {
127
+ case 'bool': {
128
+ // raw may be a JSON literal ("true", "false") OR a plain string ("true").
129
+ let s = raw;
130
+ if (raw.length >= 2 && raw[0] === '"' && raw[raw.length - 1] === '"') {
131
+ s = raw.slice(1, -1);
132
+ }
133
+ const lower = s.toLowerCase();
134
+ if (lower === 'true')
135
+ return true;
136
+ if (lower === 'false')
137
+ return false;
138
+ return undefined;
139
+ }
140
+ case 'string': {
141
+ try {
142
+ const parsed = JSON.parse(raw);
143
+ if (typeof parsed === 'string')
144
+ return parsed;
145
+ }
146
+ catch {
147
+ // not JSON — treat raw as the string itself
148
+ }
149
+ return raw;
150
+ }
151
+ case 'number': {
152
+ const n = Number(raw);
153
+ if (Number.isFinite(n))
154
+ return n;
155
+ try {
156
+ const parsed = JSON.parse(raw);
157
+ if (typeof parsed === 'number' && Number.isFinite(parsed))
158
+ return parsed;
159
+ }
160
+ catch {
161
+ /* ignore */
162
+ }
163
+ return undefined;
164
+ }
165
+ case 'json': {
166
+ try {
167
+ return JSON.parse(raw);
168
+ }
169
+ catch {
170
+ return undefined;
171
+ }
172
+ }
173
+ }
174
+ }
175
+ //# 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';
25
25
  export { FlagStreamClient } from './streaming';
26
26
  export { loadFlagConfig } from './file-loader';
27
27
  export { evaluateLocal } from './local-evaluator';
28
- export type { ClientOptions, EvaluationContext, EvaluationResult, Flag, FlagCategory, FlagMetadata, FlagConfig, FlagConfigFlag, FlagConfigRule, FlagConfigEnvironment, ApiError, } from './types';
28
+ export { StatusReporter, resolveVersion } from './status-reporter';
29
+ export type { ClientOptions, EvaluationContext, EvaluationResult, Flag, FlagCategory, FlagInspection, FlagSource, FlagMetadata, FlagConfig, FlagConfigFlag, FlagConfigRule, FlagConfigEnvironment, ApiError, HealthReport, } from './types';
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/cjs/index.js CHANGED
@@ -22,7 +22,7 @@
22
22
  * @packageDocumentation
23
23
  */
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.evaluateLocal = exports.loadFlagConfig = exports.FlagStreamClient = exports.FlagCache = exports.DeploySentryClient = void 0;
25
+ exports.resolveVersion = exports.StatusReporter = exports.evaluateLocal = exports.loadFlagConfig = exports.FlagStreamClient = exports.FlagCache = exports.DeploySentryClient = void 0;
26
26
  var client_1 = require("./client");
27
27
  Object.defineProperty(exports, "DeploySentryClient", { enumerable: true, get: function () { return client_1.DeploySentryClient; } });
28
28
  var cache_1 = require("./cache");
@@ -33,4 +33,7 @@ var file_loader_1 = require("./file-loader");
33
33
  Object.defineProperty(exports, "loadFlagConfig", { enumerable: true, get: function () { return file_loader_1.loadFlagConfig; } });
34
34
  var local_evaluator_1 = require("./local-evaluator");
35
35
  Object.defineProperty(exports, "evaluateLocal", { enumerable: true, get: function () { return local_evaluator_1.evaluateLocal; } });
36
+ var status_reporter_1 = require("./status-reporter");
37
+ Object.defineProperty(exports, "StatusReporter", { enumerable: true, get: function () { return status_reporter_1.StatusReporter; } });
38
+ Object.defineProperty(exports, "resolveVersion", { enumerable: true, get: function () { return status_reporter_1.resolveVersion; } });
36
39
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AAEH,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAC3B,iCAAoC;AAA3B,kGAAA,SAAS,OAAA;AAClB,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA;AACzB,6CAA+C;AAAtC,6GAAA,cAAc,OAAA;AACvB,qDAAkD;AAAzC,gHAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AAEH,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAC3B,iCAAoC;AAA3B,kGAAA,SAAS,OAAA;AAClB,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA;AACzB,6CAA+C;AAAtC,6GAAA,cAAc,OAAA;AACvB,qDAAkD;AAAzC,gHAAA,aAAa,OAAA;AACtB,qDAAmE;AAA1D,iHAAA,cAAc,OAAA;AAAE,iHAAA,cAAc,OAAA"}
@@ -0,0 +1,42 @@
1
+ import type { HealthReport } from './types';
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,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StatusReporter = void 0;
4
+ exports.resolveVersion = resolveVersion;
5
+ /** Environment variable names probed (in order) for the running version. */
6
+ const VERSION_ENV_CHAIN = [
7
+ 'APP_VERSION',
8
+ 'GIT_SHA',
9
+ 'GIT_COMMIT',
10
+ 'SOURCE_COMMIT',
11
+ 'RAILWAY_GIT_COMMIT_SHA',
12
+ 'RENDER_GIT_COMMIT',
13
+ 'VERCEL_GIT_COMMIT_SHA',
14
+ 'HEROKU_SLUG_COMMIT',
15
+ ];
16
+ const MIN_BACKOFF_MS = 1_000;
17
+ const MAX_BACKOFF_MS = 5 * 60_000;
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
+ function resolveVersion(explicit) {
23
+ if (explicit && explicit.trim())
24
+ return explicit;
25
+ const env = typeof process !== 'undefined' && process.env ? process.env : {};
26
+ for (const name of VERSION_ENV_CHAIN) {
27
+ const v = env[name];
28
+ if (v && v.trim())
29
+ return v;
30
+ }
31
+ if (env.npm_package_version)
32
+ return env.npm_package_version;
33
+ return 'unknown';
34
+ }
35
+ /**
36
+ * StatusReporter posts periodic `POST /applications/:id/status` updates to
37
+ * DeploySentry on behalf of a DeploySentryClient. Failures are swallowed
38
+ * (logged via `warn`) so flag evaluation is never blocked by reporting.
39
+ */
40
+ class StatusReporter {
41
+ opts;
42
+ timer = null;
43
+ stopped = false;
44
+ backoff = 0;
45
+ constructor(options) {
46
+ if (!options.baseURL)
47
+ throw new Error('baseURL is required');
48
+ if (!options.apiKey)
49
+ throw new Error('apiKey is required');
50
+ if (!options.applicationId)
51
+ throw new Error('applicationId is required');
52
+ const intervalMs = options.intervalMs ?? 30_000;
53
+ if (intervalMs < 0)
54
+ throw new Error('intervalMs must be >= 0');
55
+ this.opts = {
56
+ ...options,
57
+ baseURL: options.baseURL.replace(/\/+$/, ''),
58
+ apiKey: options.apiKey,
59
+ applicationId: options.applicationId,
60
+ intervalMs,
61
+ warn: options.warn ?? ((msg) => console.warn('[DeploySentry] ' + msg)),
62
+ };
63
+ }
64
+ /** Fire one immediate report and (if intervalMs > 0) schedule repeats. */
65
+ start() {
66
+ this.stopped = false;
67
+ void this.tick();
68
+ }
69
+ /** Stop scheduling further reports. In-flight reports still resolve. */
70
+ stop() {
71
+ this.stopped = true;
72
+ if (this.timer) {
73
+ clearTimeout(this.timer);
74
+ this.timer = null;
75
+ }
76
+ }
77
+ /** Send exactly one report. Public for tests and explicit callers. */
78
+ async reportOnce() {
79
+ const version = resolveVersion(this.opts.version);
80
+ let health = { state: 'healthy' };
81
+ if (this.opts.healthProvider) {
82
+ try {
83
+ health = await this.opts.healthProvider();
84
+ }
85
+ catch (err) {
86
+ health = { state: 'unknown', reason: String(err?.message ?? err) };
87
+ }
88
+ }
89
+ const body = {
90
+ version,
91
+ health: health.state,
92
+ };
93
+ if (health.score !== undefined)
94
+ body.health_score = health.score;
95
+ if (health.reason)
96
+ body.health_reason = health.reason;
97
+ if (this.opts.commitSha)
98
+ body.commit_sha = this.opts.commitSha;
99
+ if (this.opts.deploySlot)
100
+ body.deploy_slot = this.opts.deploySlot;
101
+ if (this.opts.tags && Object.keys(this.opts.tags).length)
102
+ body.tags = this.opts.tags;
103
+ const fetchImpl = this.opts.fetchImpl ?? fetch;
104
+ const url = `${this.opts.baseURL}/api/v1/applications/${encodeURIComponent(this.opts.applicationId)}/status`;
105
+ const res = await fetchImpl(url, {
106
+ method: 'POST',
107
+ headers: {
108
+ 'Content-Type': 'application/json',
109
+ Authorization: `ApiKey ${this.opts.apiKey}`,
110
+ },
111
+ body: JSON.stringify(body),
112
+ });
113
+ if (!res.ok) {
114
+ throw new Error(`status report failed: ${res.status} ${res.statusText}`);
115
+ }
116
+ }
117
+ async tick() {
118
+ if (this.stopped)
119
+ return;
120
+ try {
121
+ await this.reportOnce();
122
+ this.backoff = 0; // success — clear backoff
123
+ }
124
+ catch (err) {
125
+ this.opts.warn(`status report error: ${err.message}`);
126
+ if (this.backoff >= MAX_BACKOFF_MS) {
127
+ // Already at the ceiling. Reset so the next schedule falls back to
128
+ // intervalMs — otherwise a server that recovers mid-outage takes up
129
+ // to MAX_BACKOFF_MS (5m) to be noticed, regardless of how tight the
130
+ // operator configured intervalMs. On the next failure the 1s ladder
131
+ // restarts, so the short-outage behavior (quickly re-probe while
132
+ // the server is still down) is preserved.
133
+ this.backoff = 0;
134
+ this.opts.warn(`status reporter backoff reset; probing every ${this.opts.intervalMs}ms`);
135
+ }
136
+ else {
137
+ this.backoff = this.backoff === 0 ? MIN_BACKOFF_MS : Math.min(this.backoff * 2, MAX_BACKOFF_MS);
138
+ }
139
+ }
140
+ if (this.stopped)
141
+ return;
142
+ if (this.opts.intervalMs === 0)
143
+ return; // startup-only
144
+ const nextDelay = this.backoff > 0 ? this.backoff : this.opts.intervalMs;
145
+ this.timer = setTimeout(() => void this.tick(), nextDelay);
146
+ // Allow Node to exit even when the timer is pending.
147
+ if (typeof this.timer.unref === 'function') {
148
+ this.timer.unref?.();
149
+ }
150
+ }
151
+ }
152
+ exports.StatusReporter = StatusReporter;
153
+ //# 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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"}
@@ -1,4 +1,14 @@
1
1
  import { Flag } from './types.js';
2
+ /** A cache entry exposed for inspection, including staleness. */
3
+ export interface CacheInspectionEntry {
4
+ flag: Flag;
5
+ /** Epoch-ms when the entry was last written. */
6
+ storedAt: number;
7
+ /** Epoch-ms when the entry's TTL elapses. */
8
+ expiresAt: number;
9
+ /** True when the TTL has elapsed but the entry is still held. */
10
+ stale: boolean;
11
+ }
2
12
  /**
3
13
  * In-memory flag cache with per-entry TTL support.
4
14
  *
@@ -21,6 +31,12 @@ export declare class FlagCache {
21
31
  get(key: string): Flag | undefined;
22
32
  /** Return all non-expired flags currently in the cache. */
23
33
  getAll(): Flag[];
34
+ /**
35
+ * Return every entry held in the cache — including stale (TTL-elapsed)
36
+ * entries — without evicting anything. For inspection / admin views only;
37
+ * read paths should use {@link get} / {@link getAll} which evict.
38
+ */
39
+ entries(): CacheInspectionEntry[];
24
40
  /** Remove a single key from the cache. */
25
41
  delete(key: string): void;
26
42
  /** Remove all expired entries. Returns the number of entries purged. */
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAO/B;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B;;;OAGG;gBACS,KAAK,GAAE,MAAe;IAIlC,kDAAkD;IAClD,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAOrB,sDAAsD;IACtD,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAM5B,yEAAyE;IACzE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAYlC,2DAA2D;IAC3D,MAAM,IAAI,IAAI,EAAE;IAehB,0CAA0C;IAC1C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,wEAAwE;IACxE,YAAY,IAAI,MAAM;IActB,uCAAuC;IACvC,KAAK,IAAI,IAAI;IAIb,8DAA8D;IAC9D,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAQ/B,iEAAiE;AACjE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,CAAC;IACX,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B;;;OAGG;gBACS,KAAK,GAAE,MAAe;IAIlC,kDAAkD;IAClD,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IASrB,sDAAsD;IACtD,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAM5B,yEAAyE;IACzE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAYlC,2DAA2D;IAC3D,MAAM,IAAI,IAAI,EAAE;IAehB;;;;OAIG;IACH,OAAO,IAAI,oBAAoB,EAAE;IAcjC,0CAA0C;IAC1C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,wEAAwE;IACxE,YAAY,IAAI,MAAM;IActB,uCAAuC;IACvC,KAAK,IAAI,IAAI;IAIb,8DAA8D;IAC9D,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}