@symbo.ls/sdk 2.34.32 → 2.34.33
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/dist/cjs/index.js +8 -0
- package/dist/cjs/services/FeatureFlagService.js +175 -0
- package/dist/cjs/services/index.js +4 -0
- package/dist/cjs/utils/services.js +8 -1
- package/dist/esm/index.js +171 -1
- package/dist/esm/services/FeatureFlagService.js +956 -0
- package/dist/esm/services/index.js +157 -0
- package/dist/esm/utils/services.js +8 -1
- package/dist/node/index.js +12 -2
- package/dist/node/services/FeatureFlagService.js +156 -0
- package/dist/node/services/index.js +4 -0
- package/dist/node/utils/services.js +8 -1
- package/package.json +6 -6
- package/src/index.js +11 -2
- package/src/services/FeatureFlagService.js +174 -0
- package/src/services/index.js +6 -1
- package/src/services/tests/FeatureFlagService/adminFeatureFlags.test.js +67 -0
- package/src/services/tests/FeatureFlagService/getFeatureFlags.test.js +75 -0
- package/src/utils/services.js +9 -1
package/dist/cjs/index.js
CHANGED
|
@@ -33,6 +33,7 @@ __export(index_exports, {
|
|
|
33
33
|
createBranchService: () => import_services3.createBranchService,
|
|
34
34
|
createCollabService: () => import_services3.createCollabService,
|
|
35
35
|
createDnsService: () => import_services3.createDnsService,
|
|
36
|
+
createFeatureFlagService: () => import_services3.createFeatureFlagService,
|
|
36
37
|
createFileService: () => import_services3.createFileService,
|
|
37
38
|
createIntegrationService: () => import_services3.createIntegrationService,
|
|
38
39
|
createMetricsService: () => import_services3.createMetricsService,
|
|
@@ -190,6 +191,13 @@ class SDK {
|
|
|
190
191
|
context: this._context,
|
|
191
192
|
options: this._options
|
|
192
193
|
})
|
|
194
|
+
),
|
|
195
|
+
this._initService(
|
|
196
|
+
"featureFlag",
|
|
197
|
+
(0, import_services.createFeatureFlagService)({
|
|
198
|
+
context: this._context,
|
|
199
|
+
options: this._options
|
|
200
|
+
})
|
|
193
201
|
)
|
|
194
202
|
]);
|
|
195
203
|
return this;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var FeatureFlagService_exports = {};
|
|
19
|
+
__export(FeatureFlagService_exports, {
|
|
20
|
+
FeatureFlagService: () => FeatureFlagService
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(FeatureFlagService_exports);
|
|
23
|
+
var import_BaseService = require("./BaseService.js");
|
|
24
|
+
function normalizeKeysParam(keys) {
|
|
25
|
+
if (!keys) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
if (Array.isArray(keys)) {
|
|
29
|
+
const flattened = keys.flatMap((k) => String(k).split(","));
|
|
30
|
+
const cleaned2 = flattened.map((s) => s.trim()).filter(Boolean);
|
|
31
|
+
return cleaned2.length ? cleaned2.join(",") : null;
|
|
32
|
+
}
|
|
33
|
+
const cleaned = String(keys).split(",").map((s) => s.trim()).filter(Boolean);
|
|
34
|
+
return cleaned.length ? cleaned.join(",") : null;
|
|
35
|
+
}
|
|
36
|
+
class FeatureFlagService extends import_BaseService.BaseService {
|
|
37
|
+
// ==================== USER FEATURE FLAGS (optional auth) ====================
|
|
38
|
+
/**
|
|
39
|
+
* Evaluate feature flags for the current user (or anonymous).
|
|
40
|
+
* @param {Object} [params]
|
|
41
|
+
* @param {string[]|string} [params.keys] Optional subset of keys (array or comma-separated string)
|
|
42
|
+
* @returns {Promise<{flags: Record<string, {enabled: boolean, variant: string|null, payload: any}>}>}
|
|
43
|
+
*/
|
|
44
|
+
async getFeatureFlags(params = {}) {
|
|
45
|
+
this._requireReady("getFeatureFlags");
|
|
46
|
+
const { keys } = params || {};
|
|
47
|
+
const queryParams = new URLSearchParams();
|
|
48
|
+
const keysParam = normalizeKeysParam(keys);
|
|
49
|
+
if (keysParam) {
|
|
50
|
+
queryParams.append("keys", keysParam);
|
|
51
|
+
}
|
|
52
|
+
const queryString = queryParams.toString();
|
|
53
|
+
const url = `/feature-flags${queryString ? `?${queryString}` : ""}`;
|
|
54
|
+
try {
|
|
55
|
+
const response = await this._request(url, {
|
|
56
|
+
method: "GET",
|
|
57
|
+
methodName: "getFeatureFlags"
|
|
58
|
+
});
|
|
59
|
+
if (response.success) {
|
|
60
|
+
return response.data;
|
|
61
|
+
}
|
|
62
|
+
throw new Error(response.message);
|
|
63
|
+
} catch (error) {
|
|
64
|
+
throw new Error(`Failed to get feature flags: ${error.message}`, { cause: error });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Evaluate a single feature flag for the current user (or anonymous).
|
|
69
|
+
*/
|
|
70
|
+
async getFeatureFlag(key) {
|
|
71
|
+
this._requireReady("getFeatureFlag");
|
|
72
|
+
if (!key) {
|
|
73
|
+
throw new Error("Feature flag key is required");
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
const response = await this._request(`/feature-flags/${encodeURIComponent(String(key))}`, {
|
|
77
|
+
method: "GET",
|
|
78
|
+
methodName: "getFeatureFlag"
|
|
79
|
+
});
|
|
80
|
+
if (response.success) {
|
|
81
|
+
return response.data;
|
|
82
|
+
}
|
|
83
|
+
throw new Error(response.message);
|
|
84
|
+
} catch (error) {
|
|
85
|
+
throw new Error(`Failed to get feature flag: ${error.message}`, { cause: error });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// ==================== ADMIN FEATURE FLAGS (admin only) ====================
|
|
89
|
+
async getAdminFeatureFlags(params = {}) {
|
|
90
|
+
this._requireReady("getAdminFeatureFlags");
|
|
91
|
+
const { includeArchived = true } = params || {};
|
|
92
|
+
const queryParams = new URLSearchParams();
|
|
93
|
+
if (includeArchived === false) {
|
|
94
|
+
queryParams.append("includeArchived", "false");
|
|
95
|
+
}
|
|
96
|
+
const queryString = queryParams.toString();
|
|
97
|
+
const url = `/admin/feature-flags${queryString ? `?${queryString}` : ""}`;
|
|
98
|
+
try {
|
|
99
|
+
const response = await this._request(url, {
|
|
100
|
+
method: "GET",
|
|
101
|
+
methodName: "getAdminFeatureFlags"
|
|
102
|
+
});
|
|
103
|
+
if (response.success) {
|
|
104
|
+
return response.data;
|
|
105
|
+
}
|
|
106
|
+
throw new Error(response.message);
|
|
107
|
+
} catch (error) {
|
|
108
|
+
throw new Error(`Failed to get admin feature flags: ${error.message}`, {
|
|
109
|
+
cause: error
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async createFeatureFlag(flagData) {
|
|
114
|
+
this._requireReady("createFeatureFlag");
|
|
115
|
+
if (!flagData || typeof flagData !== "object") {
|
|
116
|
+
throw new Error("Feature flag data is required");
|
|
117
|
+
}
|
|
118
|
+
if (!flagData.key) {
|
|
119
|
+
throw new Error("Feature flag key is required");
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
const response = await this._request("/admin/feature-flags", {
|
|
123
|
+
method: "POST",
|
|
124
|
+
body: JSON.stringify(flagData),
|
|
125
|
+
methodName: "createFeatureFlag"
|
|
126
|
+
});
|
|
127
|
+
if (response.success) {
|
|
128
|
+
return response.data;
|
|
129
|
+
}
|
|
130
|
+
throw new Error(response.message);
|
|
131
|
+
} catch (error) {
|
|
132
|
+
throw new Error(`Failed to create feature flag: ${error.message}`, { cause: error });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async updateFeatureFlag(id, patch) {
|
|
136
|
+
this._requireReady("updateFeatureFlag");
|
|
137
|
+
if (!id) {
|
|
138
|
+
throw new Error("Feature flag id is required");
|
|
139
|
+
}
|
|
140
|
+
if (!patch || typeof patch !== "object") {
|
|
141
|
+
throw new Error("Feature flag patch is required");
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
const response = await this._request(`/admin/feature-flags/${encodeURIComponent(String(id))}`, {
|
|
145
|
+
method: "PATCH",
|
|
146
|
+
body: JSON.stringify(patch),
|
|
147
|
+
methodName: "updateFeatureFlag"
|
|
148
|
+
});
|
|
149
|
+
if (response.success) {
|
|
150
|
+
return response.data;
|
|
151
|
+
}
|
|
152
|
+
throw new Error(response.message);
|
|
153
|
+
} catch (error) {
|
|
154
|
+
throw new Error(`Failed to update feature flag: ${error.message}`, { cause: error });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
async archiveFeatureFlag(id) {
|
|
158
|
+
this._requireReady("archiveFeatureFlag");
|
|
159
|
+
if (!id) {
|
|
160
|
+
throw new Error("Feature flag id is required");
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
const response = await this._request(`/admin/feature-flags/${encodeURIComponent(String(id))}`, {
|
|
164
|
+
method: "DELETE",
|
|
165
|
+
methodName: "archiveFeatureFlag"
|
|
166
|
+
});
|
|
167
|
+
if (response.success) {
|
|
168
|
+
return response.data;
|
|
169
|
+
}
|
|
170
|
+
throw new Error(response.message);
|
|
171
|
+
} catch (error) {
|
|
172
|
+
throw new Error(`Failed to archive feature flag: ${error.message}`, { cause: error });
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
@@ -22,6 +22,7 @@ __export(services_exports, {
|
|
|
22
22
|
BranchService: () => import_BranchService.BranchService,
|
|
23
23
|
CollabService: () => import_CollabService.CollabService,
|
|
24
24
|
DnsService: () => import_DnsService.DnsService,
|
|
25
|
+
FeatureFlagService: () => import_FeatureFlagService.FeatureFlagService,
|
|
25
26
|
FileService: () => import_FileService.FileService,
|
|
26
27
|
IntegrationService: () => import_IntegrationService.IntegrationService,
|
|
27
28
|
MetricsService: () => import_MetricsService.MetricsService,
|
|
@@ -38,6 +39,7 @@ __export(services_exports, {
|
|
|
38
39
|
createBranchService: () => createBranchService,
|
|
39
40
|
createCollabService: () => createCollabService,
|
|
40
41
|
createDnsService: () => createDnsService,
|
|
42
|
+
createFeatureFlagService: () => createFeatureFlagService,
|
|
41
43
|
createFileService: () => createFileService,
|
|
42
44
|
createIntegrationService: () => createIntegrationService,
|
|
43
45
|
createMetricsService: () => createMetricsService,
|
|
@@ -67,6 +69,7 @@ var import_TrackingService = require("./TrackingService.js");
|
|
|
67
69
|
var import_WaitlistService = require("./WaitlistService.js");
|
|
68
70
|
var import_MetricsService = require("./MetricsService.js");
|
|
69
71
|
var import_IntegrationService = require("./IntegrationService.js");
|
|
72
|
+
var import_FeatureFlagService = require("./FeatureFlagService.js");
|
|
70
73
|
const createService = (ServiceClass, config) => new ServiceClass(config);
|
|
71
74
|
const createAuthService = (config) => createService(import_AuthService.AuthService, config);
|
|
72
75
|
const createCollabService = (config) => createService(import_CollabService.CollabService, config);
|
|
@@ -84,3 +87,4 @@ const createTrackingService = (config) => createService(import_TrackingService.T
|
|
|
84
87
|
const createWaitlistService = (config) => createService(import_WaitlistService.WaitlistService, config);
|
|
85
88
|
const createMetricsService = (config) => createService(import_MetricsService.MetricsService, config);
|
|
86
89
|
const createIntegrationService = (config) => createService(import_IntegrationService.IntegrationService, config);
|
|
90
|
+
const createFeatureFlagService = (config) => createService(import_FeatureFlagService.FeatureFlagService, config);
|
|
@@ -319,5 +319,12 @@ const SERVICE_METHODS = {
|
|
|
319
319
|
listGitHubConnectors: "integration",
|
|
320
320
|
createGitHubConnector: "integration",
|
|
321
321
|
updateGitHubConnector: "integration",
|
|
322
|
-
deleteGitHubConnector: "integration"
|
|
322
|
+
deleteGitHubConnector: "integration",
|
|
323
|
+
// Feature flag methods (system-level + experiments)
|
|
324
|
+
getFeatureFlags: "featureFlag",
|
|
325
|
+
getFeatureFlag: "featureFlag",
|
|
326
|
+
getAdminFeatureFlags: "featureFlag",
|
|
327
|
+
createFeatureFlag: "featureFlag",
|
|
328
|
+
updateFeatureFlag: "featureFlag",
|
|
329
|
+
archiveFeatureFlag: "featureFlag"
|
|
323
330
|
};
|
package/dist/esm/index.js
CHANGED
|
@@ -50331,6 +50331,160 @@ var IntegrationService = class extends BaseService {
|
|
|
50331
50331
|
}
|
|
50332
50332
|
};
|
|
50333
50333
|
|
|
50334
|
+
// src/services/FeatureFlagService.js
|
|
50335
|
+
function normalizeKeysParam(keys2) {
|
|
50336
|
+
if (!keys2) {
|
|
50337
|
+
return null;
|
|
50338
|
+
}
|
|
50339
|
+
if (Array.isArray(keys2)) {
|
|
50340
|
+
const flattened = keys2.flatMap((k3) => String(k3).split(","));
|
|
50341
|
+
const cleaned2 = flattened.map((s3) => s3.trim()).filter(Boolean);
|
|
50342
|
+
return cleaned2.length ? cleaned2.join(",") : null;
|
|
50343
|
+
}
|
|
50344
|
+
const cleaned = String(keys2).split(",").map((s3) => s3.trim()).filter(Boolean);
|
|
50345
|
+
return cleaned.length ? cleaned.join(",") : null;
|
|
50346
|
+
}
|
|
50347
|
+
var FeatureFlagService = class extends BaseService {
|
|
50348
|
+
// ==================== USER FEATURE FLAGS (optional auth) ====================
|
|
50349
|
+
/**
|
|
50350
|
+
* Evaluate feature flags for the current user (or anonymous).
|
|
50351
|
+
* @param {Object} [params]
|
|
50352
|
+
* @param {string[]|string} [params.keys] Optional subset of keys (array or comma-separated string)
|
|
50353
|
+
* @returns {Promise<{flags: Record<string, {enabled: boolean, variant: string|null, payload: any}>}>}
|
|
50354
|
+
*/
|
|
50355
|
+
async getFeatureFlags(params2 = {}) {
|
|
50356
|
+
this._requireReady("getFeatureFlags");
|
|
50357
|
+
const { keys: keys2 } = params2 || {};
|
|
50358
|
+
const queryParams = new URLSearchParams();
|
|
50359
|
+
const keysParam = normalizeKeysParam(keys2);
|
|
50360
|
+
if (keysParam) {
|
|
50361
|
+
queryParams.append("keys", keysParam);
|
|
50362
|
+
}
|
|
50363
|
+
const queryString = queryParams.toString();
|
|
50364
|
+
const url2 = `/feature-flags${queryString ? `?${queryString}` : ""}`;
|
|
50365
|
+
try {
|
|
50366
|
+
const response = await this._request(url2, {
|
|
50367
|
+
method: "GET",
|
|
50368
|
+
methodName: "getFeatureFlags"
|
|
50369
|
+
});
|
|
50370
|
+
if (response.success) {
|
|
50371
|
+
return response.data;
|
|
50372
|
+
}
|
|
50373
|
+
throw new Error(response.message);
|
|
50374
|
+
} catch (error) {
|
|
50375
|
+
throw new Error(`Failed to get feature flags: ${error.message}`, { cause: error });
|
|
50376
|
+
}
|
|
50377
|
+
}
|
|
50378
|
+
/**
|
|
50379
|
+
* Evaluate a single feature flag for the current user (or anonymous).
|
|
50380
|
+
*/
|
|
50381
|
+
async getFeatureFlag(key) {
|
|
50382
|
+
this._requireReady("getFeatureFlag");
|
|
50383
|
+
if (!key) {
|
|
50384
|
+
throw new Error("Feature flag key is required");
|
|
50385
|
+
}
|
|
50386
|
+
try {
|
|
50387
|
+
const response = await this._request(`/feature-flags/${encodeURIComponent(String(key))}`, {
|
|
50388
|
+
method: "GET",
|
|
50389
|
+
methodName: "getFeatureFlag"
|
|
50390
|
+
});
|
|
50391
|
+
if (response.success) {
|
|
50392
|
+
return response.data;
|
|
50393
|
+
}
|
|
50394
|
+
throw new Error(response.message);
|
|
50395
|
+
} catch (error) {
|
|
50396
|
+
throw new Error(`Failed to get feature flag: ${error.message}`, { cause: error });
|
|
50397
|
+
}
|
|
50398
|
+
}
|
|
50399
|
+
// ==================== ADMIN FEATURE FLAGS (admin only) ====================
|
|
50400
|
+
async getAdminFeatureFlags(params2 = {}) {
|
|
50401
|
+
this._requireReady("getAdminFeatureFlags");
|
|
50402
|
+
const { includeArchived = true } = params2 || {};
|
|
50403
|
+
const queryParams = new URLSearchParams();
|
|
50404
|
+
if (includeArchived === false) {
|
|
50405
|
+
queryParams.append("includeArchived", "false");
|
|
50406
|
+
}
|
|
50407
|
+
const queryString = queryParams.toString();
|
|
50408
|
+
const url2 = `/admin/feature-flags${queryString ? `?${queryString}` : ""}`;
|
|
50409
|
+
try {
|
|
50410
|
+
const response = await this._request(url2, {
|
|
50411
|
+
method: "GET",
|
|
50412
|
+
methodName: "getAdminFeatureFlags"
|
|
50413
|
+
});
|
|
50414
|
+
if (response.success) {
|
|
50415
|
+
return response.data;
|
|
50416
|
+
}
|
|
50417
|
+
throw new Error(response.message);
|
|
50418
|
+
} catch (error) {
|
|
50419
|
+
throw new Error(`Failed to get admin feature flags: ${error.message}`, {
|
|
50420
|
+
cause: error
|
|
50421
|
+
});
|
|
50422
|
+
}
|
|
50423
|
+
}
|
|
50424
|
+
async createFeatureFlag(flagData) {
|
|
50425
|
+
this._requireReady("createFeatureFlag");
|
|
50426
|
+
if (!flagData || typeof flagData !== "object") {
|
|
50427
|
+
throw new Error("Feature flag data is required");
|
|
50428
|
+
}
|
|
50429
|
+
if (!flagData.key) {
|
|
50430
|
+
throw new Error("Feature flag key is required");
|
|
50431
|
+
}
|
|
50432
|
+
try {
|
|
50433
|
+
const response = await this._request("/admin/feature-flags", {
|
|
50434
|
+
method: "POST",
|
|
50435
|
+
body: JSON.stringify(flagData),
|
|
50436
|
+
methodName: "createFeatureFlag"
|
|
50437
|
+
});
|
|
50438
|
+
if (response.success) {
|
|
50439
|
+
return response.data;
|
|
50440
|
+
}
|
|
50441
|
+
throw new Error(response.message);
|
|
50442
|
+
} catch (error) {
|
|
50443
|
+
throw new Error(`Failed to create feature flag: ${error.message}`, { cause: error });
|
|
50444
|
+
}
|
|
50445
|
+
}
|
|
50446
|
+
async updateFeatureFlag(id2, patch) {
|
|
50447
|
+
this._requireReady("updateFeatureFlag");
|
|
50448
|
+
if (!id2) {
|
|
50449
|
+
throw new Error("Feature flag id is required");
|
|
50450
|
+
}
|
|
50451
|
+
if (!patch || typeof patch !== "object") {
|
|
50452
|
+
throw new Error("Feature flag patch is required");
|
|
50453
|
+
}
|
|
50454
|
+
try {
|
|
50455
|
+
const response = await this._request(`/admin/feature-flags/${encodeURIComponent(String(id2))}`, {
|
|
50456
|
+
method: "PATCH",
|
|
50457
|
+
body: JSON.stringify(patch),
|
|
50458
|
+
methodName: "updateFeatureFlag"
|
|
50459
|
+
});
|
|
50460
|
+
if (response.success) {
|
|
50461
|
+
return response.data;
|
|
50462
|
+
}
|
|
50463
|
+
throw new Error(response.message);
|
|
50464
|
+
} catch (error) {
|
|
50465
|
+
throw new Error(`Failed to update feature flag: ${error.message}`, { cause: error });
|
|
50466
|
+
}
|
|
50467
|
+
}
|
|
50468
|
+
async archiveFeatureFlag(id2) {
|
|
50469
|
+
this._requireReady("archiveFeatureFlag");
|
|
50470
|
+
if (!id2) {
|
|
50471
|
+
throw new Error("Feature flag id is required");
|
|
50472
|
+
}
|
|
50473
|
+
try {
|
|
50474
|
+
const response = await this._request(`/admin/feature-flags/${encodeURIComponent(String(id2))}`, {
|
|
50475
|
+
method: "DELETE",
|
|
50476
|
+
methodName: "archiveFeatureFlag"
|
|
50477
|
+
});
|
|
50478
|
+
if (response.success) {
|
|
50479
|
+
return response.data;
|
|
50480
|
+
}
|
|
50481
|
+
throw new Error(response.message);
|
|
50482
|
+
} catch (error) {
|
|
50483
|
+
throw new Error(`Failed to archive feature flag: ${error.message}`, { cause: error });
|
|
50484
|
+
}
|
|
50485
|
+
}
|
|
50486
|
+
};
|
|
50487
|
+
|
|
50334
50488
|
// src/services/index.js
|
|
50335
50489
|
var createService = (ServiceClass, config) => new ServiceClass(config);
|
|
50336
50490
|
var createAuthService = (config) => createService(AuthService, config);
|
|
@@ -50349,6 +50503,7 @@ var createTrackingService = (config) => createService(TrackingService, config);
|
|
|
50349
50503
|
var createWaitlistService = (config) => createService(WaitlistService, config);
|
|
50350
50504
|
var createMetricsService = (config) => createService(MetricsService, config);
|
|
50351
50505
|
var createIntegrationService = (config) => createService(IntegrationService, config);
|
|
50506
|
+
var createFeatureFlagService = (config) => createService(FeatureFlagService, config);
|
|
50352
50507
|
|
|
50353
50508
|
// src/utils/services.js
|
|
50354
50509
|
var SERVICE_METHODS = {
|
|
@@ -50650,7 +50805,14 @@ var SERVICE_METHODS = {
|
|
|
50650
50805
|
listGitHubConnectors: "integration",
|
|
50651
50806
|
createGitHubConnector: "integration",
|
|
50652
50807
|
updateGitHubConnector: "integration",
|
|
50653
|
-
deleteGitHubConnector: "integration"
|
|
50808
|
+
deleteGitHubConnector: "integration",
|
|
50809
|
+
// Feature flag methods (system-level + experiments)
|
|
50810
|
+
getFeatureFlags: "featureFlag",
|
|
50811
|
+
getFeatureFlag: "featureFlag",
|
|
50812
|
+
getAdminFeatureFlags: "featureFlag",
|
|
50813
|
+
createFeatureFlag: "featureFlag",
|
|
50814
|
+
updateFeatureFlag: "featureFlag",
|
|
50815
|
+
archiveFeatureFlag: "featureFlag"
|
|
50654
50816
|
};
|
|
50655
50817
|
|
|
50656
50818
|
// src/index.js
|
|
@@ -50790,6 +50952,13 @@ var SDK = class {
|
|
|
50790
50952
|
context: this._context,
|
|
50791
50953
|
options: this._options
|
|
50792
50954
|
})
|
|
50955
|
+
),
|
|
50956
|
+
this._initService(
|
|
50957
|
+
"featureFlag",
|
|
50958
|
+
createFeatureFlagService({
|
|
50959
|
+
context: this._context,
|
|
50960
|
+
options: this._options
|
|
50961
|
+
})
|
|
50793
50962
|
)
|
|
50794
50963
|
]);
|
|
50795
50964
|
return this;
|
|
@@ -50913,6 +51082,7 @@ export {
|
|
|
50913
51082
|
createBranchService,
|
|
50914
51083
|
createCollabService,
|
|
50915
51084
|
createDnsService,
|
|
51085
|
+
createFeatureFlagService,
|
|
50916
51086
|
createFileService,
|
|
50917
51087
|
createIntegrationService,
|
|
50918
51088
|
createMetricsService,
|