@dr-sentry/sdk 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.
Files changed (59) hide show
  1. package/README.md +285 -0
  2. package/dist/cjs/cache.d.ts +33 -0
  3. package/dist/cjs/cache.d.ts.map +1 -0
  4. package/dist/cjs/cache.js +84 -0
  5. package/dist/cjs/cache.js.map +1 -0
  6. package/dist/cjs/client.d.ts +81 -0
  7. package/dist/cjs/client.d.ts.map +1 -0
  8. package/dist/cjs/client.js +362 -0
  9. package/dist/cjs/client.js.map +1 -0
  10. package/dist/cjs/file-loader.d.ts +3 -0
  11. package/dist/cjs/file-loader.d.ts.map +1 -0
  12. package/dist/cjs/file-loader.js +53 -0
  13. package/dist/cjs/file-loader.js.map +1 -0
  14. package/dist/cjs/index.d.ts +29 -0
  15. package/dist/cjs/index.d.ts.map +1 -0
  16. package/dist/cjs/index.js +36 -0
  17. package/dist/cjs/index.js.map +1 -0
  18. package/dist/cjs/local-evaluator.d.ts +6 -0
  19. package/dist/cjs/local-evaluator.d.ts.map +1 -0
  20. package/dist/cjs/local-evaluator.js +40 -0
  21. package/dist/cjs/local-evaluator.js.map +1 -0
  22. package/dist/cjs/package.json +1 -0
  23. package/dist/cjs/streaming.d.ts +42 -0
  24. package/dist/cjs/streaming.d.ts.map +1 -0
  25. package/dist/cjs/streaming.js +140 -0
  26. package/dist/cjs/streaming.js.map +1 -0
  27. package/dist/cjs/types.d.ts +126 -0
  28. package/dist/cjs/types.d.ts.map +1 -0
  29. package/dist/cjs/types.js +6 -0
  30. package/dist/cjs/types.js.map +1 -0
  31. package/dist/esm/cache.d.ts +33 -0
  32. package/dist/esm/cache.d.ts.map +1 -0
  33. package/dist/esm/cache.js +80 -0
  34. package/dist/esm/cache.js.map +1 -0
  35. package/dist/esm/client.d.ts +81 -0
  36. package/dist/esm/client.d.ts.map +1 -0
  37. package/dist/esm/client.js +358 -0
  38. package/dist/esm/client.js.map +1 -0
  39. package/dist/esm/file-loader.d.ts +3 -0
  40. package/dist/esm/file-loader.d.ts.map +1 -0
  41. package/dist/esm/file-loader.js +17 -0
  42. package/dist/esm/file-loader.js.map +1 -0
  43. package/dist/esm/index.d.ts +29 -0
  44. package/dist/esm/index.d.ts.map +1 -0
  45. package/dist/esm/index.js +28 -0
  46. package/dist/esm/index.js.map +1 -0
  47. package/dist/esm/local-evaluator.d.ts +6 -0
  48. package/dist/esm/local-evaluator.d.ts.map +1 -0
  49. package/dist/esm/local-evaluator.js +37 -0
  50. package/dist/esm/local-evaluator.js.map +1 -0
  51. package/dist/esm/streaming.d.ts +42 -0
  52. package/dist/esm/streaming.d.ts.map +1 -0
  53. package/dist/esm/streaming.js +136 -0
  54. package/dist/esm/streaming.js.map +1 -0
  55. package/dist/esm/types.d.ts +126 -0
  56. package/dist/esm/types.d.ts.map +1 -0
  57. package/dist/esm/types.js +5 -0
  58. package/dist/esm/types.js.map +1 -0
  59. package/package.json +62 -0
@@ -0,0 +1,136 @@
1
+ const SSE_INITIAL_RETRY_MS = 1_000;
2
+ const SSE_MAX_RETRY_MS = 30_000;
3
+ const SSE_BACKOFF_MULTIPLIER = 2;
4
+ const SSE_JITTER_FRACTION = 0.2;
5
+ /**
6
+ * Lightweight SSE streaming client that keeps the local flag cache
7
+ * synchronised with the DeploySentry service.
8
+ *
9
+ * Uses the built-in `fetch` readable stream API available in Node 18+
10
+ * to avoid external EventSource dependencies.
11
+ */
12
+ export class FlagStreamClient {
13
+ abortController = null;
14
+ reconnectTimer = null;
15
+ closed = false;
16
+ retryMs = SSE_INITIAL_RETRY_MS;
17
+ url;
18
+ headers;
19
+ onUpdate;
20
+ onError;
21
+ constructor(options) {
22
+ this.url = options.url;
23
+ this.headers = options.headers;
24
+ this.onUpdate = options.onUpdate;
25
+ this.onError = options.onError ?? (() => { });
26
+ }
27
+ /** Open the SSE connection and start processing events. */
28
+ async connect() {
29
+ if (this.closed)
30
+ return;
31
+ this.abortController = new AbortController();
32
+ try {
33
+ const response = await fetch(this.url, {
34
+ method: 'GET',
35
+ headers: {
36
+ ...this.headers,
37
+ Accept: 'text/event-stream',
38
+ 'Cache-Control': 'no-cache',
39
+ },
40
+ signal: this.abortController.signal,
41
+ });
42
+ if (!response.ok) {
43
+ throw new Error(`SSE connection failed: ${response.status} ${response.statusText}`);
44
+ }
45
+ if (!response.body) {
46
+ throw new Error('SSE response has no body');
47
+ }
48
+ this.retryMs = SSE_INITIAL_RETRY_MS;
49
+ await this.consumeStream(response.body);
50
+ }
51
+ catch (err) {
52
+ if (this.closed)
53
+ return;
54
+ const error = err instanceof Error ? err : new Error(String(err));
55
+ if (error.name === 'AbortError')
56
+ return;
57
+ this.onError(error);
58
+ this.scheduleReconnect();
59
+ }
60
+ }
61
+ /** Close the connection and stop reconnection attempts. */
62
+ close() {
63
+ this.closed = true;
64
+ if (this.reconnectTimer) {
65
+ clearTimeout(this.reconnectTimer);
66
+ this.reconnectTimer = null;
67
+ }
68
+ if (this.abortController) {
69
+ this.abortController.abort();
70
+ this.abortController = null;
71
+ }
72
+ }
73
+ // ---------------------------------------------------------------------------
74
+ // Internals
75
+ // ---------------------------------------------------------------------------
76
+ async consumeStream(body) {
77
+ const reader = body.getReader();
78
+ const decoder = new TextDecoder();
79
+ let buffer = '';
80
+ try {
81
+ while (!this.closed) {
82
+ const { done, value } = await reader.read();
83
+ if (done)
84
+ break;
85
+ buffer += decoder.decode(value, { stream: true });
86
+ // SSE events are delimited by double newlines.
87
+ const parts = buffer.split('\n\n');
88
+ buffer = parts.pop() ?? '';
89
+ for (const raw of parts) {
90
+ this.processEvent(raw);
91
+ }
92
+ }
93
+ }
94
+ finally {
95
+ reader.releaseLock();
96
+ }
97
+ // If the stream ended naturally (server closed), attempt reconnect.
98
+ if (!this.closed) {
99
+ this.scheduleReconnect();
100
+ }
101
+ }
102
+ processEvent(raw) {
103
+ let eventType = 'message';
104
+ let data = '';
105
+ for (const line of raw.split('\n')) {
106
+ if (line.startsWith('event:')) {
107
+ eventType = line.slice(6).trim();
108
+ }
109
+ else if (line.startsWith('data:')) {
110
+ data += line.slice(5).trim();
111
+ }
112
+ }
113
+ if (eventType === 'flag_update' || eventType === 'message') {
114
+ try {
115
+ const parsed = JSON.parse(data);
116
+ const flags = Array.isArray(parsed) ? parsed : [parsed];
117
+ this.onUpdate(flags);
118
+ }
119
+ catch {
120
+ // Ignore malformed payloads (e.g. keep-alive comments).
121
+ }
122
+ }
123
+ }
124
+ scheduleReconnect() {
125
+ if (this.closed)
126
+ return;
127
+ const jitter = this.retryMs * SSE_JITTER_FRACTION * (2 * Math.random() - 1);
128
+ const delay = this.retryMs + jitter;
129
+ this.reconnectTimer = setTimeout(() => {
130
+ this.reconnectTimer = null;
131
+ this.connect();
132
+ }, delay);
133
+ this.retryMs = Math.min(this.retryMs * SSE_BACKOFF_MULTIPLIER, SSE_MAX_RETRY_MS);
134
+ }
135
+ }
136
+ //# sourceMappingURL=streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../src/streaming.ts"],"names":[],"mappings":"AAQA,MAAM,oBAAoB,GAAG,KAAK,CAAC;AACnC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAahC;;;;;;GAMG;AACH,MAAM,OAAO,gBAAgB;IACnB,eAAe,GAA2B,IAAI,CAAC;IAC/C,cAAc,GAAyC,IAAI,CAAC;IAC5D,MAAM,GAAG,KAAK,CAAC;IACf,OAAO,GAAG,oBAAoB,CAAC;IAEtB,GAAG,CAAS;IACZ,OAAO,CAAyB;IAChC,QAAQ,CAAoB;IAC5B,OAAO,CAAqB;IAE7C,YAAY,OAAsB;QAChC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAExB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE7C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBACrC,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,GAAG,IAAI,CAAC,OAAO;oBACf,MAAM,EAAE,mBAAmB;oBAC3B,eAAe,EAAE,UAAU;iBAC5B;gBACD,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;aACpC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,0BAA0B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACnE,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;YAED,IAAI,CAAC,OAAO,GAAG,oBAAoB,CAAC;YACpC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO;YAExB,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBAAE,OAAO;YAExC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,YAAY;IACZ,8EAA8E;IAEtE,KAAK,CAAC,aAAa,CAAC,IAAgC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAEhB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAElD,+CAA+C;gBAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACnC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAE3B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;oBACxB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAED,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,GAAW;QAC9B,IAAI,SAAS,GAAG,SAAS,CAAC;QAC1B,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC3D,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAW,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAChE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,wDAAwD;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,mBAAmB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEpC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CACrB,IAAI,CAAC,OAAO,GAAG,sBAAsB,EACrC,gBAAgB,CACjB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * DeploySentry SDK type definitions.
3
+ */
4
+ /** Categories that classify the intent and lifecycle of a feature flag. */
5
+ export type FlagCategory = 'release' | 'feature' | 'experiment' | 'ops' | 'permission';
6
+ /** Rich metadata attached to every feature flag. */
7
+ export interface FlagMetadata {
8
+ /** Categorisation that drives lifecycle policies. */
9
+ category: FlagCategory;
10
+ /** Human-readable explanation of what this flag controls. */
11
+ purpose: string;
12
+ /** Team or individual owners responsible for this flag. */
13
+ owners: string[];
14
+ /** When true the flag is not expected to be removed. */
15
+ isPermanent: boolean;
16
+ /** ISO-8601 expiration timestamp. Undefined for permanent flags. */
17
+ expiresAt?: string;
18
+ /** Free-form tags for filtering and grouping. */
19
+ tags: string[];
20
+ }
21
+ /** A feature flag as returned by the DeploySentry API. */
22
+ export interface Flag {
23
+ /** Unique key used to reference the flag in code. */
24
+ key: string;
25
+ /** Whether the flag is currently enabled. */
26
+ enabled: boolean;
27
+ /** The resolved value (boolean, string, number, or JSON object). */
28
+ value: unknown;
29
+ /** Rich metadata describing the flag. */
30
+ metadata: FlagMetadata;
31
+ /** ISO-8601 timestamp of the last update. */
32
+ updatedAt: string;
33
+ }
34
+ /** Contextual information sent with every evaluation request. */
35
+ export interface EvaluationContext {
36
+ /** Identifier of the user being evaluated. */
37
+ userId?: string;
38
+ /** Identifier of the organisation the user belongs to. */
39
+ orgId?: string;
40
+ /** Arbitrary key-value attributes for targeting rules. */
41
+ attributes?: Record<string, string>;
42
+ }
43
+ /** Full evaluation result including the resolved value and metadata. */
44
+ export interface EvaluationResult<T = unknown> {
45
+ /** The flag key that was evaluated. */
46
+ key: string;
47
+ /** The resolved value after evaluation. */
48
+ value: T;
49
+ /** Whether the flag is enabled for the given context. */
50
+ enabled: boolean;
51
+ /** Reason the value was resolved (e.g. "TARGETING_MATCH", "DEFAULT"). */
52
+ reason: string;
53
+ /** Rich metadata for the flag. */
54
+ metadata: FlagMetadata;
55
+ /** ISO-8601 evaluation timestamp. */
56
+ evaluatedAt: string;
57
+ }
58
+ /** Configuration options for the DeploySentry client. */
59
+ export interface ClientOptions {
60
+ /** API key used for authenticating with the DeploySentry service. */
61
+ apiKey: string;
62
+ /** Base URL of the DeploySentry API. Defaults to https://api.dr-sentry.com. */
63
+ baseURL?: string;
64
+ /** Environment identifier (e.g. "production", "staging"). */
65
+ environment: string;
66
+ /** Project identifier. */
67
+ project: string;
68
+ /** Application identifier. */
69
+ application: string;
70
+ /** Cache TTL in milliseconds. Defaults to 60 000 (1 minute). */
71
+ cacheTimeout?: number;
72
+ /** When true, the client returns default values without contacting the API. */
73
+ offlineMode?: boolean;
74
+ /** Optional session identifier for consistent flag evaluation across requests. */
75
+ sessionId?: string;
76
+ /** SDK mode: server (default), file (YAML only), or server-with-fallback. */
77
+ mode?: 'server' | 'file' | 'server-with-fallback';
78
+ /** Path to a local YAML flag config file. Defaults to .deploysentry/flags.yaml. */
79
+ flagFilePath?: string;
80
+ }
81
+ export interface FlagConfig {
82
+ version: number;
83
+ project: string;
84
+ application: string;
85
+ exported_at: string;
86
+ environments: FlagConfigEnvironment[];
87
+ flags: FlagConfigFlag[];
88
+ }
89
+ export interface FlagConfigEnvironment {
90
+ id: string;
91
+ name: string;
92
+ is_production: boolean;
93
+ }
94
+ export interface FlagConfigFlag {
95
+ key: string;
96
+ name: string;
97
+ flag_type: string;
98
+ category: string;
99
+ default_value: string;
100
+ is_permanent: boolean;
101
+ expires_at?: string;
102
+ environments: Record<string, {
103
+ enabled: boolean;
104
+ value: string;
105
+ }>;
106
+ rules?: FlagConfigRule[];
107
+ }
108
+ export interface FlagConfigRule {
109
+ attribute: string;
110
+ operator: string;
111
+ target_values: string[];
112
+ value: string;
113
+ priority: number;
114
+ environments: Record<string, boolean>;
115
+ }
116
+ /** Internal representation of an API error response. */
117
+ export interface ApiError {
118
+ status: number;
119
+ message: string;
120
+ code?: string;
121
+ }
122
+ export interface Registration<T extends (...args: any[]) => any = (...args: any[]) => any> {
123
+ handler: T;
124
+ flagKey?: string;
125
+ }
126
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * DeploySentry SDK type definitions.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@dr-sentry/sdk",
3
+ "version": "1.0.0",
4
+ "description": "Official Node.js SDK for the DeploySentry platform – feature flag evaluation with rich metadata",
5
+ "main": "dist/cjs/index.js",
6
+ "module": "dist/esm/index.js",
7
+ "types": "dist/esm/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": {
11
+ "types": "./dist/esm/index.d.ts",
12
+ "default": "./dist/esm/index.js"
13
+ },
14
+ "require": {
15
+ "types": "./dist/cjs/index.d.ts",
16
+ "default": "./dist/cjs/index.js"
17
+ }
18
+ }
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "scripts": {
24
+ "build": "npm run build:esm && npm run build:cjs && npm run build:cjs-package-json",
25
+ "build:esm": "tsc -p tsconfig.esm.json",
26
+ "build:cjs": "tsc -p tsconfig.cjs.json",
27
+ "build:cjs-package-json": "node -e \"require('fs').writeFileSync('dist/cjs/package.json', JSON.stringify({type:'commonjs'}))\"",
28
+ "clean": "rm -rf dist",
29
+ "test": "jest",
30
+ "lint": "eslint src/",
31
+ "prepublishOnly": "npm run clean && npm run build"
32
+ },
33
+ "keywords": [
34
+ "deploysentry",
35
+ "feature-flags",
36
+ "deployment",
37
+ "canary",
38
+ "sdk"
39
+ ],
40
+ "author": "DeploySentry",
41
+ "license": "Apache-2.0",
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "https://github.com/deploysentry/deploysentry.git",
45
+ "directory": "sdk/node"
46
+ },
47
+ "engines": {
48
+ "node": ">=18"
49
+ },
50
+ "dependencies": {
51
+ "eventsource": "^2.0.2",
52
+ "js-yaml": "^4.1.1"
53
+ },
54
+ "devDependencies": {
55
+ "@types/jest": "^29.0.0",
56
+ "@types/js-yaml": "^4.0.9",
57
+ "@types/node": "^20.0.0",
58
+ "jest": "^29.0.0",
59
+ "ts-jest": "^29.0.0",
60
+ "typescript": "^5.0.0"
61
+ }
62
+ }