@coframe/sdk 1.1.22 → 1.1.24
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 +163 -0
- package/dist/pkg/cf.cjs.js +336 -53
- package/dist/pkg/cf.esm.mjs +336 -53
- package/dist/pkg/feature-flags.cjs.js +623 -0
- package/dist/pkg/feature-flags.esm.mjs +609 -0
- package/dist/pkg/react.cjs.js +36 -1
- package/dist/pkg/react.esm.mjs +32 -2
- package/dist/pkg/server.cjs.js +75 -0
- package/dist/pkg/server.esm.mjs +70 -1
- package/dist/pkg/types/feature-flags.d.ts +75 -0
- package/dist/pkg/types/index.d.ts +2 -0
- package/dist/pkg/types/react.d.ts +24 -1
- package/dist/pkg/types/server.d.ts +53 -2
- package/package.json +6 -1
package/dist/pkg/server.cjs.js
CHANGED
|
@@ -48,6 +48,75 @@ async function fetchProjectFromEdge(projectId, currentUrl, signal, userContext,
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
async function requestFeatureFlags(options) {
|
|
52
|
+
var _a, _b;
|
|
53
|
+
const controller = new AbortController();
|
|
54
|
+
const timeout = setTimeout(() => controller.abort(), (_a = options.requestTimeoutMs) !== null && _a !== void 0 ? _a : 3000);
|
|
55
|
+
try {
|
|
56
|
+
const response = await fetch(`${(_b = options.edgeUrl) !== null && _b !== void 0 ? _b : "https://edge.cofra.me"}/api/v1/flags?v=1`, {
|
|
57
|
+
method: 'POST',
|
|
58
|
+
headers: {
|
|
59
|
+
'Content-Type': 'application/json',
|
|
60
|
+
Authorization: `Bearer ${options.apiKey}`,
|
|
61
|
+
},
|
|
62
|
+
body: JSON.stringify({
|
|
63
|
+
projectId: options.projectId,
|
|
64
|
+
userToken: options.userToken,
|
|
65
|
+
...(options.selector ? { selector: options.selector } : {}),
|
|
66
|
+
...(options.currentUrl ? { currentUrl: options.currentUrl } : {}),
|
|
67
|
+
...(options.languages ? { languages: options.languages } : {}),
|
|
68
|
+
...(options.browserPlatform
|
|
69
|
+
? { browserPlatform: options.browserPlatform }
|
|
70
|
+
: {}),
|
|
71
|
+
...(options.userVisitCount !== undefined
|
|
72
|
+
? { userVisitCount: options.userVisitCount }
|
|
73
|
+
: {}),
|
|
74
|
+
...(options.userContext ? { userContext: options.userContext } : {}),
|
|
75
|
+
...(options.country ? { country: options.country } : {}),
|
|
76
|
+
...(options.device ? { device: options.device } : {}),
|
|
77
|
+
}),
|
|
78
|
+
signal: controller.signal,
|
|
79
|
+
});
|
|
80
|
+
if (!response.ok)
|
|
81
|
+
return undefined;
|
|
82
|
+
return (await response.json());
|
|
83
|
+
}
|
|
84
|
+
catch (_c) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
clearTimeout(timeout);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function evaluateFlags(options) {
|
|
92
|
+
return requestFeatureFlags(options);
|
|
93
|
+
}
|
|
94
|
+
async function getFeatureFlagResult(key, options) {
|
|
95
|
+
const response = await requestFeatureFlags({
|
|
96
|
+
...options,
|
|
97
|
+
selector: { names: [key] },
|
|
98
|
+
});
|
|
99
|
+
return response === null || response === void 0 ? void 0 : response.flags[key];
|
|
100
|
+
}
|
|
101
|
+
async function getFeatureFlag(key, options) {
|
|
102
|
+
var _a;
|
|
103
|
+
const result = await getFeatureFlagResult(key, options);
|
|
104
|
+
if (!result)
|
|
105
|
+
return undefined;
|
|
106
|
+
return (_a = result.variant) !== null && _a !== void 0 ? _a : result.enabled;
|
|
107
|
+
}
|
|
108
|
+
async function isFeatureEnabled(key, options) {
|
|
109
|
+
var _a, _b;
|
|
110
|
+
return ((_b = (_a = (await getFeatureFlagResult(key, options))) === null || _a === void 0 ? void 0 : _a.enabled) !== null && _b !== void 0 ? _b : options.defaultValue);
|
|
111
|
+
}
|
|
112
|
+
async function getFeatureFlagPayload(key, options) {
|
|
113
|
+
var _a;
|
|
114
|
+
const result = await getFeatureFlagResult(key, options);
|
|
115
|
+
if (!result)
|
|
116
|
+
return undefined;
|
|
117
|
+
return 'payload' in result ? ((_a = result.payload) !== null && _a !== void 0 ? _a : null) : null;
|
|
118
|
+
}
|
|
119
|
+
const getRemoteConfig = getFeatureFlagPayload;
|
|
51
120
|
function getRequestReferrer(headers) {
|
|
52
121
|
const get = headers.get;
|
|
53
122
|
if (typeof get === 'function') {
|
|
@@ -124,4 +193,10 @@ async function getProjectData(options) {
|
|
|
124
193
|
return null;
|
|
125
194
|
}
|
|
126
195
|
|
|
196
|
+
exports.evaluateFlags = evaluateFlags;
|
|
197
|
+
exports.getFeatureFlag = getFeatureFlag;
|
|
198
|
+
exports.getFeatureFlagPayload = getFeatureFlagPayload;
|
|
199
|
+
exports.getFeatureFlagResult = getFeatureFlagResult;
|
|
127
200
|
exports.getProjectData = getProjectData;
|
|
201
|
+
exports.getRemoteConfig = getRemoteConfig;
|
|
202
|
+
exports.isFeatureEnabled = isFeatureEnabled;
|
package/dist/pkg/server.esm.mjs
CHANGED
|
@@ -46,6 +46,75 @@ async function fetchProjectFromEdge(projectId, currentUrl, signal, userContext,
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
async function requestFeatureFlags(options) {
|
|
50
|
+
var _a, _b;
|
|
51
|
+
const controller = new AbortController();
|
|
52
|
+
const timeout = setTimeout(() => controller.abort(), (_a = options.requestTimeoutMs) !== null && _a !== void 0 ? _a : 3000);
|
|
53
|
+
try {
|
|
54
|
+
const response = await fetch(`${(_b = options.edgeUrl) !== null && _b !== void 0 ? _b : "https://edge.cofra.me"}/api/v1/flags?v=1`, {
|
|
55
|
+
method: 'POST',
|
|
56
|
+
headers: {
|
|
57
|
+
'Content-Type': 'application/json',
|
|
58
|
+
Authorization: `Bearer ${options.apiKey}`,
|
|
59
|
+
},
|
|
60
|
+
body: JSON.stringify({
|
|
61
|
+
projectId: options.projectId,
|
|
62
|
+
userToken: options.userToken,
|
|
63
|
+
...(options.selector ? { selector: options.selector } : {}),
|
|
64
|
+
...(options.currentUrl ? { currentUrl: options.currentUrl } : {}),
|
|
65
|
+
...(options.languages ? { languages: options.languages } : {}),
|
|
66
|
+
...(options.browserPlatform
|
|
67
|
+
? { browserPlatform: options.browserPlatform }
|
|
68
|
+
: {}),
|
|
69
|
+
...(options.userVisitCount !== undefined
|
|
70
|
+
? { userVisitCount: options.userVisitCount }
|
|
71
|
+
: {}),
|
|
72
|
+
...(options.userContext ? { userContext: options.userContext } : {}),
|
|
73
|
+
...(options.country ? { country: options.country } : {}),
|
|
74
|
+
...(options.device ? { device: options.device } : {}),
|
|
75
|
+
}),
|
|
76
|
+
signal: controller.signal,
|
|
77
|
+
});
|
|
78
|
+
if (!response.ok)
|
|
79
|
+
return undefined;
|
|
80
|
+
return (await response.json());
|
|
81
|
+
}
|
|
82
|
+
catch (_c) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
clearTimeout(timeout);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function evaluateFlags(options) {
|
|
90
|
+
return requestFeatureFlags(options);
|
|
91
|
+
}
|
|
92
|
+
async function getFeatureFlagResult(key, options) {
|
|
93
|
+
const response = await requestFeatureFlags({
|
|
94
|
+
...options,
|
|
95
|
+
selector: { names: [key] },
|
|
96
|
+
});
|
|
97
|
+
return response === null || response === void 0 ? void 0 : response.flags[key];
|
|
98
|
+
}
|
|
99
|
+
async function getFeatureFlag(key, options) {
|
|
100
|
+
var _a;
|
|
101
|
+
const result = await getFeatureFlagResult(key, options);
|
|
102
|
+
if (!result)
|
|
103
|
+
return undefined;
|
|
104
|
+
return (_a = result.variant) !== null && _a !== void 0 ? _a : result.enabled;
|
|
105
|
+
}
|
|
106
|
+
async function isFeatureEnabled(key, options) {
|
|
107
|
+
var _a, _b;
|
|
108
|
+
return ((_b = (_a = (await getFeatureFlagResult(key, options))) === null || _a === void 0 ? void 0 : _a.enabled) !== null && _b !== void 0 ? _b : options.defaultValue);
|
|
109
|
+
}
|
|
110
|
+
async function getFeatureFlagPayload(key, options) {
|
|
111
|
+
var _a;
|
|
112
|
+
const result = await getFeatureFlagResult(key, options);
|
|
113
|
+
if (!result)
|
|
114
|
+
return undefined;
|
|
115
|
+
return 'payload' in result ? ((_a = result.payload) !== null && _a !== void 0 ? _a : null) : null;
|
|
116
|
+
}
|
|
117
|
+
const getRemoteConfig = getFeatureFlagPayload;
|
|
49
118
|
function getRequestReferrer(headers) {
|
|
50
119
|
const get = headers.get;
|
|
51
120
|
if (typeof get === 'function') {
|
|
@@ -122,4 +191,4 @@ async function getProjectData(options) {
|
|
|
122
191
|
return null;
|
|
123
192
|
}
|
|
124
193
|
|
|
125
|
-
export { getProjectData };
|
|
194
|
+
export { evaluateFlags, getFeatureFlag, getFeatureFlagPayload, getFeatureFlagResult, getProjectData, getRemoteConfig, isFeatureEnabled };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
2
|
+
[key: string]: JsonValue;
|
|
3
|
+
};
|
|
4
|
+
type FeatureFlagValue = boolean | string;
|
|
5
|
+
type FeatureFlagReason = 'inactive' | 'remote_config' | 'condition_match' | 'no_matching_condition' | 'missing_user_token';
|
|
6
|
+
interface FeatureFlagResult {
|
|
7
|
+
key: string;
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
reason: FeatureFlagReason;
|
|
10
|
+
metadata: {
|
|
11
|
+
version: number;
|
|
12
|
+
};
|
|
13
|
+
variant?: string;
|
|
14
|
+
payload?: JsonValue;
|
|
15
|
+
}
|
|
16
|
+
interface FeatureFlagsResponse {
|
|
17
|
+
flags: Record<string, FeatureFlagResult>;
|
|
18
|
+
errorsWhileComputingFlags: boolean;
|
|
19
|
+
requestId: string;
|
|
20
|
+
snapshotVersion: number;
|
|
21
|
+
}
|
|
22
|
+
interface FeatureFlagSelector {
|
|
23
|
+
names?: string[];
|
|
24
|
+
groups?: string[];
|
|
25
|
+
}
|
|
26
|
+
interface FeatureFlagsConfig {
|
|
27
|
+
selector?: FeatureFlagSelector;
|
|
28
|
+
requestTimeoutMs?: number;
|
|
29
|
+
cacheTtlMs?: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
type FeatureFlagsCallback = (flags: Record<string, FeatureFlagResult>, metadata: {
|
|
33
|
+
errorsWhileComputingFlags: boolean;
|
|
34
|
+
snapshotVersion: number;
|
|
35
|
+
}) => void;
|
|
36
|
+
declare function reloadFeatureFlags(): Promise<void>;
|
|
37
|
+
declare function onFeatureFlags(callback: FeatureFlagsCallback): () => void;
|
|
38
|
+
declare function getFeatureFlagResult(key: string): FeatureFlagResult | undefined;
|
|
39
|
+
declare function getFeatureFlag(key: string): FeatureFlagValue | undefined;
|
|
40
|
+
declare function isFeatureEnabled(key: string, options?: {
|
|
41
|
+
defaultValue?: boolean;
|
|
42
|
+
}): boolean | undefined;
|
|
43
|
+
declare function getFeatureFlagPayload(key: string): JsonValue | null | undefined;
|
|
44
|
+
declare const getRemoteConfig: typeof getFeatureFlagPayload;
|
|
45
|
+
|
|
46
|
+
interface FeatureFlagsInitOptions extends FeatureFlagsConfig {
|
|
47
|
+
projectId: string;
|
|
48
|
+
userToken?: string;
|
|
49
|
+
userContext?: Record<string, unknown>;
|
|
50
|
+
consent?: boolean;
|
|
51
|
+
reloadOnSpaNavigation?: boolean;
|
|
52
|
+
}
|
|
53
|
+
declare function initFeatureFlags(options: FeatureFlagsInitOptions): Promise<void>;
|
|
54
|
+
declare function setUserToken(userToken: string): void;
|
|
55
|
+
declare function reset(): string;
|
|
56
|
+
declare function setConsent(enabled: boolean): void;
|
|
57
|
+
declare function getUserToken(): string | undefined;
|
|
58
|
+
|
|
59
|
+
declare const featureFlags: {
|
|
60
|
+
init: typeof initFeatureFlags;
|
|
61
|
+
setUserToken: typeof setUserToken;
|
|
62
|
+
reset: typeof reset;
|
|
63
|
+
setConsent: typeof setConsent;
|
|
64
|
+
getUserToken: typeof getUserToken;
|
|
65
|
+
getFeatureFlag: typeof getFeatureFlag;
|
|
66
|
+
getFeatureFlagPayload: typeof getFeatureFlagPayload;
|
|
67
|
+
getFeatureFlagResult: typeof getFeatureFlagResult;
|
|
68
|
+
getRemoteConfig: typeof getFeatureFlagPayload;
|
|
69
|
+
isFeatureEnabled: typeof isFeatureEnabled;
|
|
70
|
+
onFeatureFlags: typeof onFeatureFlags;
|
|
71
|
+
reloadFeatureFlags: typeof reloadFeatureFlags;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export { featureFlags, getFeatureFlag, getFeatureFlagPayload, getFeatureFlagResult, getRemoteConfig, getUserToken, initFeatureFlags, isFeatureEnabled, onFeatureFlags, reloadFeatureFlags, reset, setConsent, setUserToken };
|
|
75
|
+
export type { FeatureFlagResult, FeatureFlagSelector, FeatureFlagValue, FeatureFlagsConfig, FeatureFlagsInitOptions, FeatureFlagsResponse, JsonValue };
|
|
@@ -163,9 +163,11 @@ interface Experiment {
|
|
|
163
163
|
}
|
|
164
164
|
interface ExperimentMetadata {
|
|
165
165
|
experiment_id: string;
|
|
166
|
+
source_experiment_id?: string;
|
|
166
167
|
slug: string;
|
|
167
168
|
iteration_id: string;
|
|
168
169
|
seed: number;
|
|
170
|
+
type?: 'CMAB';
|
|
169
171
|
holdout_info: HoldoutInfo;
|
|
170
172
|
allocation: Allocation;
|
|
171
173
|
activation_condition: {
|
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import React, { ReactNode } from 'react';
|
|
2
2
|
export { init, onLog, onTreatmentApplied, setConsent, setFeatureFlag, setPageHydrated, setUserToken, trackConversion } from '@coframe/sdk';
|
|
3
3
|
|
|
4
|
+
type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
5
|
+
[key: string]: JsonValue;
|
|
6
|
+
};
|
|
7
|
+
type FeatureFlagValue = boolean | string;
|
|
8
|
+
type FeatureFlagReason = 'inactive' | 'remote_config' | 'condition_match' | 'no_matching_condition' | 'missing_user_token';
|
|
9
|
+
interface FeatureFlagResult {
|
|
10
|
+
key: string;
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
reason: FeatureFlagReason;
|
|
13
|
+
metadata: {
|
|
14
|
+
version: number;
|
|
15
|
+
};
|
|
16
|
+
variant?: string;
|
|
17
|
+
payload?: JsonValue;
|
|
18
|
+
}
|
|
19
|
+
|
|
4
20
|
interface UniversalSelector {
|
|
5
21
|
t: string;
|
|
6
22
|
fingerprint?: string;
|
|
@@ -166,9 +182,11 @@ interface Experiment {
|
|
|
166
182
|
}
|
|
167
183
|
interface ExperimentMetadata {
|
|
168
184
|
experiment_id: string;
|
|
185
|
+
source_experiment_id?: string;
|
|
169
186
|
slug: string;
|
|
170
187
|
iteration_id: string;
|
|
171
188
|
seed: number;
|
|
189
|
+
type?: 'CMAB';
|
|
172
190
|
holdout_info: HoldoutInfo;
|
|
173
191
|
allocation: Allocation;
|
|
174
192
|
activation_condition: {
|
|
@@ -310,6 +328,11 @@ declare function CoframeProvider({ projectConfig, projectData, onTreatmentApplie
|
|
|
310
328
|
declare function useCoframeTreatments(): TreatmentData[] | null;
|
|
311
329
|
declare function useCoframeTreatment(experimentId: string): TreatmentData | undefined;
|
|
312
330
|
declare function useCoframeVariant(experimentId: string): string | undefined;
|
|
331
|
+
declare function useFeatureFlagResult(key: string): FeatureFlagResult | undefined;
|
|
332
|
+
declare function useFeatureFlagVariantKey(key: string): FeatureFlagValue | undefined;
|
|
333
|
+
declare const useFeatureFlag: typeof useFeatureFlagVariantKey;
|
|
334
|
+
declare function useFeatureFlagEnabled(key: string): boolean | undefined;
|
|
335
|
+
declare function useFeatureFlagPayload(key: string): JsonValue | null | undefined;
|
|
313
336
|
|
|
314
|
-
export { CoframeProvider, useCoframeTreatment, useCoframeTreatments, useCoframeVariant };
|
|
337
|
+
export { CoframeProvider, useCoframeTreatment, useCoframeTreatments, useCoframeVariant, useFeatureFlag, useFeatureFlagEnabled, useFeatureFlagPayload, useFeatureFlagResult, useFeatureFlagVariantKey };
|
|
315
338
|
export type { CoframeProviderProps };
|
|
@@ -129,9 +129,11 @@ interface Experiment {
|
|
|
129
129
|
}
|
|
130
130
|
interface ExperimentMetadata {
|
|
131
131
|
experiment_id: string;
|
|
132
|
+
source_experiment_id?: string;
|
|
132
133
|
slug: string;
|
|
133
134
|
iteration_id: string;
|
|
134
135
|
seed: number;
|
|
136
|
+
type?: 'CMAB';
|
|
135
137
|
holdout_info: HoldoutInfo;
|
|
136
138
|
allocation: Allocation;
|
|
137
139
|
activation_condition: {
|
|
@@ -215,6 +217,32 @@ type PersonalizationHeaders = {
|
|
|
215
217
|
'x-bot-reason': BotReason;
|
|
216
218
|
};
|
|
217
219
|
|
|
220
|
+
type JsonValue = string | number | boolean | null | JsonValue[] | {
|
|
221
|
+
[key: string]: JsonValue;
|
|
222
|
+
};
|
|
223
|
+
type FeatureFlagValue = boolean | string;
|
|
224
|
+
type FeatureFlagReason = 'inactive' | 'remote_config' | 'condition_match' | 'no_matching_condition' | 'missing_user_token';
|
|
225
|
+
interface FeatureFlagResult {
|
|
226
|
+
key: string;
|
|
227
|
+
enabled: boolean;
|
|
228
|
+
reason: FeatureFlagReason;
|
|
229
|
+
metadata: {
|
|
230
|
+
version: number;
|
|
231
|
+
};
|
|
232
|
+
variant?: string;
|
|
233
|
+
payload?: JsonValue;
|
|
234
|
+
}
|
|
235
|
+
interface FeatureFlagsResponse {
|
|
236
|
+
flags: Record<string, FeatureFlagResult>;
|
|
237
|
+
errorsWhileComputingFlags: boolean;
|
|
238
|
+
requestId: string;
|
|
239
|
+
snapshotVersion: number;
|
|
240
|
+
}
|
|
241
|
+
interface FeatureFlagSelector {
|
|
242
|
+
names?: string[];
|
|
243
|
+
groups?: string[];
|
|
244
|
+
}
|
|
245
|
+
|
|
218
246
|
interface GetProjectDataOptions {
|
|
219
247
|
projectId: string;
|
|
220
248
|
currentUrl: string;
|
|
@@ -230,7 +258,30 @@ interface CoframeProjectPayload {
|
|
|
230
258
|
personalizationHeaders?: PersonalizationHeaders;
|
|
231
259
|
antiflickerCSS?: string;
|
|
232
260
|
}
|
|
261
|
+
interface EvaluateFlagsOptions {
|
|
262
|
+
apiKey: string;
|
|
263
|
+
projectId: string;
|
|
264
|
+
userToken?: string;
|
|
265
|
+
selector?: FeatureFlagSelector;
|
|
266
|
+
requestTimeoutMs?: number;
|
|
267
|
+
edgeUrl?: string;
|
|
268
|
+
currentUrl?: string;
|
|
269
|
+
languages?: string[];
|
|
270
|
+
browserPlatform?: string;
|
|
271
|
+
userVisitCount?: number;
|
|
272
|
+
userContext?: Record<string, unknown>;
|
|
273
|
+
country?: string;
|
|
274
|
+
device?: 'desktop' | 'mobile';
|
|
275
|
+
}
|
|
276
|
+
declare function evaluateFlags(options: EvaluateFlagsOptions): Promise<FeatureFlagsResponse | undefined>;
|
|
277
|
+
declare function getFeatureFlagResult(key: string, options: Omit<EvaluateFlagsOptions, 'selector'>): Promise<FeatureFlagResult | undefined>;
|
|
278
|
+
declare function getFeatureFlag(key: string, options: Omit<EvaluateFlagsOptions, 'selector'>): Promise<FeatureFlagValue | undefined>;
|
|
279
|
+
declare function isFeatureEnabled(key: string, options: Omit<EvaluateFlagsOptions, 'selector'> & {
|
|
280
|
+
defaultValue?: boolean;
|
|
281
|
+
}): Promise<boolean | undefined>;
|
|
282
|
+
declare function getFeatureFlagPayload(key: string, options: Omit<EvaluateFlagsOptions, 'selector'>): Promise<JsonValue | null | undefined>;
|
|
283
|
+
declare const getRemoteConfig: typeof getFeatureFlagPayload;
|
|
233
284
|
declare function getProjectData(options: GetProjectDataOptions): Promise<CoframeProjectPayload | null>;
|
|
234
285
|
|
|
235
|
-
export { getProjectData };
|
|
236
|
-
export type { CoframeProjectPayload, GetProjectDataOptions };
|
|
286
|
+
export { evaluateFlags, getFeatureFlag, getFeatureFlagPayload, getFeatureFlagResult, getProjectData, getRemoteConfig, isFeatureEnabled };
|
|
287
|
+
export type { CoframeProjectPayload, EvaluateFlagsOptions, GetProjectDataOptions };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coframe/sdk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.24",
|
|
4
4
|
"description": "Coframe optimizes your website using generative AI to deliver maximum impact to your audience and allow your site to improve itself as you sleep. Learn more at coframe.com.",
|
|
5
5
|
"main": "dist/pkg/cf.cjs.js",
|
|
6
6
|
"module": "dist/pkg/cf.esm.mjs",
|
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
"require": "./dist/pkg/server.cjs.js",
|
|
17
17
|
"types": "./dist/pkg/types/server.d.ts"
|
|
18
18
|
},
|
|
19
|
+
"./feature-flags": {
|
|
20
|
+
"import": "./dist/pkg/feature-flags.esm.mjs",
|
|
21
|
+
"require": "./dist/pkg/feature-flags.cjs.js",
|
|
22
|
+
"types": "./dist/pkg/types/feature-flags.d.ts"
|
|
23
|
+
},
|
|
19
24
|
"./react": {
|
|
20
25
|
"import": "./dist/pkg/react.esm.mjs",
|
|
21
26
|
"require": "./dist/pkg/react.cjs.js",
|