@jewel998/config 0.1.0 → 0.1.3
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/LICENSE +84 -0
- package/README.md +234 -0
- package/dist/client/ConfigClient.d.ts +3 -1
- package/dist/client/ConfigClient.d.ts.map +1 -1
- package/dist/client/ConfigClient.js +53 -19
- package/dist/client/ConfigClient.js.map +1 -1
- package/dist/context/autoContext.d.ts +28 -0
- package/dist/context/autoContext.d.ts.map +1 -0
- package/dist/context/autoContext.js +135 -0
- package/dist/context/autoContext.js.map +1 -0
- package/dist/createConfig.d.ts.map +1 -1
- package/dist/createConfig.js +31 -7
- package/dist/createConfig.js.map +1 -1
- package/dist/index.d.ts +6 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -9
- package/dist/index.js.map +1 -1
- package/dist/initConfig.d.ts +66 -0
- package/dist/initConfig.d.ts.map +1 -0
- package/dist/initConfig.js +128 -0
- package/dist/initConfig.js.map +1 -0
- package/dist/loading/pessimistic.d.ts.map +1 -1
- package/dist/loading/pessimistic.js +12 -5
- package/dist/loading/pessimistic.js.map +1 -1
- package/dist/plugins/models.d.ts +1 -0
- package/dist/plugins/models.d.ts.map +1 -1
- package/dist/plugins/prerequisites/prerequisitePlugin.d.ts.map +1 -1
- package/dist/plugins/prerequisites/prerequisitePlugin.js +22 -2
- package/dist/plugins/prerequisites/prerequisitePlugin.js.map +1 -1
- package/dist/transport/HttpTransport.d.ts +4 -0
- package/dist/transport/HttpTransport.d.ts.map +1 -1
- package/dist/transport/HttpTransport.js +15 -4
- package/dist/transport/HttpTransport.js.map +1 -1
- package/dist/types.d.ts +24 -37
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/webhook-formats.d.ts +92 -0
- package/dist/webhook-formats.d.ts.map +1 -0
- package/dist/webhook-formats.js +141 -0
- package/dist/webhook-formats.js.map +1 -0
- package/package.json +21 -3
- package/dist/cache/storage.d.ts +0 -15
- package/dist/cache/storage.d.ts.map +0 -1
- package/dist/cache/storage.js +0 -43
- package/dist/cache/storage.js.map +0 -1
- package/dist/cache/types.d.ts +0 -3
- package/dist/cache/types.js +0 -2
- package/dist/cache/types.js.map +0 -1
- package/dist/client.d.ts +0 -15
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -80
- package/dist/client.js.map +0 -1
- package/dist/core/resolver.d.ts +0 -8
- package/dist/core/resolver.d.ts.map +0 -1
- package/dist/core/resolver.js +0 -22
- package/dist/core/resolver.js.map +0 -1
- package/dist/errors/index.d.ts +0 -17
- package/dist/errors/index.d.ts.map +0 -1
- package/dist/errors/index.js +0 -29
- package/dist/errors/index.js.map +0 -1
- package/dist/example.d.ts +0 -2
- package/dist/example.d.ts.map +0 -1
- package/dist/example.js +0 -23
- package/dist/example.js.map +0 -1
- package/dist/loading/deferred.d.ts +0 -3
- package/dist/loading/deferred.js +0 -5
- package/dist/loading/deferred.js.map +0 -1
- package/dist/loading/optimistic.d.ts +0 -3
- package/dist/loading/pessimistic.d.ts +0 -3
- package/dist/management/index.d.ts +0 -3
- package/dist/management/index.d.ts.map +0 -1
- package/dist/management/index.js +0 -2
- package/dist/management/index.js.map +0 -1
- package/dist/management/manager.d.ts +0 -34
- package/dist/management/manager.d.ts.map +0 -1
- package/dist/management/manager.js +0 -21
- package/dist/management/manager.js.map +0 -1
- package/dist/management/memory-backend.d.ts +0 -6
- package/dist/management/memory-backend.d.ts.map +0 -1
- package/dist/management/memory-backend.js +0 -78
- package/dist/management/memory-backend.js.map +0 -1
- package/dist/plugins/index.d.ts +0 -5
- package/dist/plugins/lifecycle/index.d.ts +0 -4
- package/dist/plugins/overrides/index.d.ts +0 -2
- package/dist/plugins/prerequisites/index.d.ts +0 -3
- package/dist/plugins/rollout/index.d.ts +0 -3
- package/dist/plugins/rollout/murmurhash3.d.ts +0 -6
- package/dist/plugins/rollout/murmurhash3.d.ts.map +0 -1
- package/dist/plugins/rollout/murmurhash3.js +0 -56
- package/dist/plugins/rollout/murmurhash3.js.map +0 -1
- package/dist/plugins/schedule/index.d.ts +0 -2
- package/dist/plugins/targeting/index.d.ts +0 -4
- package/dist/plugins/targeting/predicates.d.ts +0 -23
- package/dist/plugins/targeting/predicates.js +0 -110
- package/dist/plugins/targeting/predicates.js.map +0 -1
- package/dist/plugins/types.d.ts +0 -35
- package/dist/plugins/types.js +0 -13
- package/dist/plugins/types.js.map +0 -1
- package/dist/registry.d.ts +0 -9
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -22
- package/dist/registry.js.map +0 -1
- package/dist/remote/firebase-adapter.d.ts +0 -6
- package/dist/remote/firebase-adapter.d.ts.map +0 -1
- package/dist/remote/firebase-adapter.js +0 -12
- package/dist/remote/firebase-adapter.js.map +0 -1
- package/dist/remote/provider.d.ts +0 -6
- package/dist/remote/provider.d.ts.map +0 -1
- package/dist/remote/provider.js +0 -5
- package/dist/remote/provider.js.map +0 -1
package/dist/createConfig.js
CHANGED
|
@@ -9,7 +9,7 @@ import { executeOptimistic } from "./loading/optimistic";
|
|
|
9
9
|
import { executePessimistic } from "./loading/pessimistic";
|
|
10
10
|
import { createHttpTransport } from "./transport/HttpTransport";
|
|
11
11
|
import { DEFAULT_RETRY, DEFAULT_TIMEOUT } from "./types";
|
|
12
|
-
const DEFAULT_BASE_URL = "https://
|
|
12
|
+
const DEFAULT_BASE_URL = "https://jewel998-config.web.app/api";
|
|
13
13
|
export function createConfig(options) {
|
|
14
14
|
// 1. Validate clientId
|
|
15
15
|
if (!options.clientId) {
|
|
@@ -26,16 +26,26 @@ export function createConfig(options) {
|
|
|
26
26
|
const retry = { ...DEFAULT_RETRY, ...options.retry };
|
|
27
27
|
const timeout = options.timeout ?? DEFAULT_TIMEOUT;
|
|
28
28
|
const baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;
|
|
29
|
-
//
|
|
29
|
+
// Auto-detect evaluation mode from key prefix:
|
|
30
|
+
// cid_ = client key → server evaluates (frontend)
|
|
31
|
+
// svr_ = server key → client evaluates locally (backend)
|
|
32
|
+
const evaluationMode = options.clientId.startsWith("svr_")
|
|
33
|
+
? "client"
|
|
34
|
+
: "server";
|
|
35
|
+
// 4. Maintain a mutable context reference for server mode
|
|
36
|
+
let currentContext = options.context ?? {};
|
|
37
|
+
// 5. Create internal modules
|
|
30
38
|
const transport = createHttpTransport({
|
|
31
39
|
baseUrl,
|
|
32
40
|
clientId: options.clientId,
|
|
41
|
+
evaluationMode,
|
|
42
|
+
getContext: () => currentContext,
|
|
33
43
|
});
|
|
34
44
|
const events = new TypedEventEmitter();
|
|
35
45
|
const fetcher = granularity === "batch"
|
|
36
46
|
? createBatchFetcher(transport)
|
|
37
47
|
: createProjectedFetcher(transport);
|
|
38
|
-
//
|
|
48
|
+
// 6. Create loading context
|
|
39
49
|
const context = {
|
|
40
50
|
clientId: options.clientId,
|
|
41
51
|
fetcher,
|
|
@@ -45,7 +55,9 @@ export function createConfig(options) {
|
|
|
45
55
|
timeout,
|
|
46
56
|
granularity,
|
|
47
57
|
};
|
|
48
|
-
//
|
|
58
|
+
// 7. In server mode, plugins are not needed (API resolves everything)
|
|
59
|
+
const plugins = evaluationMode === "client" ? options.plugins : undefined;
|
|
60
|
+
// 8. Execute strategy
|
|
49
61
|
if (strategy === "pessimistic") {
|
|
50
62
|
return executePessimistic(context).then((result) => {
|
|
51
63
|
const client = buildConfigClient({
|
|
@@ -56,9 +68,13 @@ export function createConfig(options) {
|
|
|
56
68
|
retry,
|
|
57
69
|
granularity,
|
|
58
70
|
isDeferred: false,
|
|
59
|
-
plugins
|
|
71
|
+
plugins,
|
|
60
72
|
context: options.context,
|
|
61
73
|
consentAware: options.consentAware,
|
|
74
|
+
evaluationMode,
|
|
75
|
+
onContextChange: (ctx) => {
|
|
76
|
+
currentContext = ctx;
|
|
77
|
+
},
|
|
62
78
|
});
|
|
63
79
|
events.emit("ready", {
|
|
64
80
|
loadingStrategy: "pessimistic",
|
|
@@ -77,9 +93,13 @@ export function createConfig(options) {
|
|
|
77
93
|
retry,
|
|
78
94
|
granularity,
|
|
79
95
|
isDeferred: true,
|
|
80
|
-
plugins
|
|
96
|
+
plugins,
|
|
81
97
|
context: options.context,
|
|
82
98
|
consentAware: options.consentAware,
|
|
99
|
+
evaluationMode,
|
|
100
|
+
onContextChange: (ctx) => {
|
|
101
|
+
currentContext = ctx;
|
|
102
|
+
},
|
|
83
103
|
});
|
|
84
104
|
events.emit("ready", {
|
|
85
105
|
loadingStrategy: "deferred",
|
|
@@ -97,9 +117,13 @@ export function createConfig(options) {
|
|
|
97
117
|
retry,
|
|
98
118
|
granularity,
|
|
99
119
|
isDeferred: false,
|
|
100
|
-
plugins
|
|
120
|
+
plugins,
|
|
101
121
|
context: options.context,
|
|
102
122
|
consentAware: options.consentAware,
|
|
123
|
+
evaluationMode,
|
|
124
|
+
onContextChange: (ctx) => {
|
|
125
|
+
currentContext = ctx;
|
|
126
|
+
},
|
|
103
127
|
});
|
|
104
128
|
events.emit("ready", {
|
|
105
129
|
loadingStrategy: "optimistic",
|
package/dist/createConfig.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createConfig.js","sourceRoot":"","sources":["../src/createConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"createConfig.js","sourceRoot":"","sources":["../src/createConfig.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,23 +1,14 @@
|
|
|
1
|
+
export { initConfig } from "./initConfig";
|
|
2
|
+
export type { InitConfigOptions, Flags } from "./initConfig";
|
|
1
3
|
export { createConfig } from "./createConfig";
|
|
2
|
-
export type { CacheStorage, ClientIdRecord, ConfigClient, ConfigEventCallback, ConfigEventPayloads, ConfigEventType, ConfigRecord, CreateConfigOptions, EnvironmentRecord, FetchGranularity, LoadingStrategy, ProjectRecord, RetryConfig, } from "./types";
|
|
4
|
+
export type { CacheStorage, ClientIdRecord, ConfigClient, ConfigEventCallback, ConfigEventPayloads, ConfigEventType, ConfigRecord, CreateConfigOptions, EnvironmentRecord, EvaluationWarning, FetchGranularity, LoadingStrategy, ProjectRecord, RetryConfig, } from "./types";
|
|
3
5
|
export type { EvaluationContext, EvaluationPlugin, PipelineStepId, PipelineStepResult, PipelineHelpers, } from "./plugins/types.js";
|
|
4
6
|
export { PIPELINE_ORDER } from "./plugins/types.js";
|
|
7
|
+
export { autoContext, mergeContext } from "./context/autoContext";
|
|
8
|
+
export { WEBHOOK_FORMATS, WEBHOOK_FORMAT_INFO, TEMPLATE_VARIABLES, WEBHOOK_EVENT_TYPES, WEBHOOK_RESOURCE_CATEGORIES, SAMPLE_WEBHOOK_EVENT, } from "./webhook-formats";
|
|
9
|
+
export type { WebhookFormat, WebhookEventType, WebhookResourceCategory, } from "./webhook-formats";
|
|
5
10
|
export { memoryStorage } from "./cache/memoryStorage";
|
|
6
11
|
export { browserStorage } from "./cache/browserStorage";
|
|
7
12
|
export { AuthenticationError, ConfigError, InitializationError, TimeoutError, } from "./errors/index";
|
|
8
13
|
export type { ConfigErrorCode } from "./errors/index";
|
|
9
|
-
/** @deprecated Use createConfig() instead */
|
|
10
|
-
export { createConfigClient } from "./client";
|
|
11
|
-
export type { ConfigClient as LegacyConfigClient, ConfigClientOptions, } from "./client";
|
|
12
|
-
/** @deprecated Tenant concept removed. Use ProjectRecord instead. */
|
|
13
|
-
export type { TenantRecord } from "./types";
|
|
14
|
-
/** @deprecated Use ConfigRecord instead */
|
|
15
|
-
export type { ConfigVersionRecord } from "./types";
|
|
16
|
-
/** @deprecated Scoping is handled by clientId */
|
|
17
|
-
export type { ConfigResolveContext, ConfigDefinition } from "./types";
|
|
18
|
-
/** @deprecated Use LoadingStrategy instead */
|
|
19
|
-
export type { ConfigScope, ConfigSourceMode } from "./types";
|
|
20
|
-
export { createConfigManager } from "./management/index";
|
|
21
|
-
export type { ConfigManager, ConfigManagerOptions } from "./management/index";
|
|
22
|
-
export type { ConfigManagerBackend } from "./management/manager";
|
|
23
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,YAAY,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAG7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,YAAY,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
// ═══════════════════════════════════════════════════════════════
|
|
2
|
-
//
|
|
2
|
+
// @jewel998/config SDK
|
|
3
3
|
// ═══════════════════════════════════════════════════════════════
|
|
4
|
-
//
|
|
4
|
+
// Primary entry point
|
|
5
|
+
export { initConfig } from "./initConfig";
|
|
6
|
+
// Legacy (still works, use initConfig for new projects)
|
|
5
7
|
export { createConfig } from "./createConfig";
|
|
6
8
|
export { PIPELINE_ORDER } from "./plugins/types.js";
|
|
9
|
+
// Context helpers (tree-shakeable)
|
|
10
|
+
export { autoContext, mergeContext } from "./context/autoContext";
|
|
11
|
+
// Webhook format constants (shared between portal, docs, functions)
|
|
12
|
+
export { WEBHOOK_FORMATS, WEBHOOK_FORMAT_INFO, TEMPLATE_VARIABLES, WEBHOOK_EVENT_TYPES, WEBHOOK_RESOURCE_CATEGORIES, SAMPLE_WEBHOOK_EVENT, } from "./webhook-formats";
|
|
7
13
|
// Cache adapters
|
|
8
14
|
export { memoryStorage } from "./cache/memoryStorage";
|
|
9
15
|
export { browserStorage } from "./cache/browserStorage";
|
|
10
16
|
// Errors
|
|
11
17
|
export { AuthenticationError, ConfigError, InitializationError, TimeoutError, } from "./errors/index";
|
|
12
|
-
// ═══════════════════════════════════════════════════════════════
|
|
13
|
-
// Deprecated API (kept for Phase 1 migration, remove in v1.0.0)
|
|
14
|
-
// ═══════════════════════════════════════════════════════════════
|
|
15
|
-
/** @deprecated Use createConfig() instead */
|
|
16
|
-
export { createConfigClient } from "./client";
|
|
17
|
-
// Management (Portal only — still active)
|
|
18
|
-
export { createConfigManager } from "./management/index";
|
|
19
18
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,uBAAuB;AACvB,kEAAkE;AAElE,sBAAsB;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,wDAAwD;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA6B9C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,mCAAmC;AACnC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAElE,oEAAoE;AACpE,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAO3B,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,SAAS;AACT,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,YAAY,GACb,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { ConfigEventCallback, ConfigEventType } from "./types";
|
|
2
|
+
import type { EvaluationContext } from "./plugins/types.js";
|
|
3
|
+
export interface InitConfigOptions {
|
|
4
|
+
/** Required. API key from the portal (cid_ for client, svr_ for server). */
|
|
5
|
+
clientId: string;
|
|
6
|
+
/**
|
|
7
|
+
* Default/fallback values returned instantly before the API responds.
|
|
8
|
+
* Keys are flag names, values are what your app uses immediately (optimistic).
|
|
9
|
+
*/
|
|
10
|
+
defaults?: Record<string, unknown>;
|
|
11
|
+
/** User context for targeting evaluation. Use autoContext() to auto-detect browser info. */
|
|
12
|
+
context?: EvaluationContext;
|
|
13
|
+
/**
|
|
14
|
+
* Your self-hosted API URL. Points to your Firebase deployment.
|
|
15
|
+
* Default: https://jewel998-config.web.app/api (demo instance)
|
|
16
|
+
*
|
|
17
|
+
* @example "https://your-project.web.app/api"
|
|
18
|
+
*/
|
|
19
|
+
baseUrl?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Polling interval in milliseconds for version checks.
|
|
22
|
+
* The SDK periodically calls /api/version (lightweight ~100 bytes)
|
|
23
|
+
* and only re-fetches full data when the version changes.
|
|
24
|
+
*
|
|
25
|
+
* Default: 300000 (5 minutes). Set to 0 to disable polling.
|
|
26
|
+
*/
|
|
27
|
+
pollInterval?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface Flags {
|
|
30
|
+
/** Get a flag value. Returns the default until the API responds, then the resolved value. */
|
|
31
|
+
get<T = unknown>(key: string): T;
|
|
32
|
+
/** Get a boolean flag. Returns false if the flag doesn't exist. */
|
|
33
|
+
flag(key: string): boolean;
|
|
34
|
+
/** Get all resolved flag values. */
|
|
35
|
+
all(): Record<string, unknown>;
|
|
36
|
+
/** Update user context. Triggers a re-fetch in client-key mode. */
|
|
37
|
+
setContext(context: EvaluationContext): void;
|
|
38
|
+
/** Force re-fetch from the API. */
|
|
39
|
+
refresh(): Promise<void>;
|
|
40
|
+
/** Subscribe to events: "ready", "updated", "fetchError" */
|
|
41
|
+
on<E extends ConfigEventType>(event: E, cb: ConfigEventCallback<E>): void;
|
|
42
|
+
/** Unsubscribe from events. */
|
|
43
|
+
off<E extends ConfigEventType>(event: E, cb: ConfigEventCallback<E>): void;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Initialize the feature flags SDK.
|
|
47
|
+
*
|
|
48
|
+
* Returns a Flags instance that immediately serves default values,
|
|
49
|
+
* then resolves to real values from the API in the background.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* const flags = initConfig({
|
|
54
|
+
* clientId: "cid_xxx",
|
|
55
|
+
* defaults: { "feature.dark_mode": false },
|
|
56
|
+
* context: autoContext({ userId: "user_123", plan: "pro" }),
|
|
57
|
+
* });
|
|
58
|
+
*
|
|
59
|
+
* flags.get("feature.dark_mode"); // → false (instant)
|
|
60
|
+
* flags.on("updated", () => {
|
|
61
|
+
* flags.get("feature.dark_mode"); // → true (from API)
|
|
62
|
+
* });
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare function initConfig(options: InitConfigOptions): Flags;
|
|
66
|
+
//# sourceMappingURL=initConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initConfig.d.ts","sourceRoot":"","sources":["../src/initConfig.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAEV,mBAAmB,EACnB,eAAe,EAEhB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC,4FAA4F;IAC5F,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAE5B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,KAAK;IACpB,6FAA6F;IAC7F,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC;IAEjC,mEAAmE;IACnE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAE3B,oCAAoC;IACpC,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B,mEAAmE;IACnE,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAE7C,mCAAmC;IACnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB,4DAA4D;IAC5D,EAAE,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAE1E,+BAA+B;IAC/B,GAAG,CAAC,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAC5E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,KAAK,CA4G5D"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// ═══════════════════════════════════════════════════════════════
|
|
2
|
+
// initConfig — Primary SDK entry point
|
|
3
|
+
//
|
|
4
|
+
// Usage:
|
|
5
|
+
// const flags = initConfig({
|
|
6
|
+
// clientId: "cid_xxx",
|
|
7
|
+
// defaults: { "feature.dark_mode": false, "app.upload_limit": 50 },
|
|
8
|
+
// context: autoContext({ userId: "user_123", plan: "pro" }),
|
|
9
|
+
// });
|
|
10
|
+
//
|
|
11
|
+
// flags.get("feature.dark_mode") // → false (instant, from defaults)
|
|
12
|
+
// // ...API responds...
|
|
13
|
+
// flags.get("feature.dark_mode") // → true (resolved from server)
|
|
14
|
+
// ═══════════════════════════════════════════════════════════════
|
|
15
|
+
import { createConfig } from "./createConfig";
|
|
16
|
+
/**
|
|
17
|
+
* Initialize the feature flags SDK.
|
|
18
|
+
*
|
|
19
|
+
* Returns a Flags instance that immediately serves default values,
|
|
20
|
+
* then resolves to real values from the API in the background.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* const flags = initConfig({
|
|
25
|
+
* clientId: "cid_xxx",
|
|
26
|
+
* defaults: { "feature.dark_mode": false },
|
|
27
|
+
* context: autoContext({ userId: "user_123", plan: "pro" }),
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* flags.get("feature.dark_mode"); // → false (instant)
|
|
31
|
+
* flags.on("updated", () => {
|
|
32
|
+
* flags.get("feature.dark_mode"); // → true (from API)
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function initConfig(options) {
|
|
37
|
+
const defaults = options.defaults ?? {};
|
|
38
|
+
const pollInterval = options.pollInterval ?? 300_000; // 5 minutes default
|
|
39
|
+
const baseUrl = options.baseUrl ?? "https://jewel998-config.web.app/api";
|
|
40
|
+
// Create the underlying config client (optimistic strategy = instant return + background fetch)
|
|
41
|
+
const client = createConfig({
|
|
42
|
+
clientId: options.clientId,
|
|
43
|
+
loadingStrategy: "optimistic",
|
|
44
|
+
context: options.context,
|
|
45
|
+
baseUrl,
|
|
46
|
+
});
|
|
47
|
+
// Version-based polling: check /api/version periodically, delta-fetch on change
|
|
48
|
+
let cachedVersion = null;
|
|
49
|
+
let pollTimer = null;
|
|
50
|
+
async function checkVersion() {
|
|
51
|
+
try {
|
|
52
|
+
const res = await fetch(`${baseUrl}/getVersion?clientId=${options.clientId}`, {
|
|
53
|
+
headers: cachedVersion
|
|
54
|
+
? { "If-None-Match": `"${cachedVersion}"` }
|
|
55
|
+
: {},
|
|
56
|
+
});
|
|
57
|
+
// 304 = version unchanged, no action needed
|
|
58
|
+
if (res.status === 304)
|
|
59
|
+
return;
|
|
60
|
+
if (!res.ok)
|
|
61
|
+
return;
|
|
62
|
+
const { version, changedKeys } = (await res.json());
|
|
63
|
+
// First check — just store version, no refetch (initial fetch already happened)
|
|
64
|
+
if (cachedVersion === null) {
|
|
65
|
+
cachedVersion = version;
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Version changed — need to refresh
|
|
69
|
+
if (version !== cachedVersion) {
|
|
70
|
+
cachedVersion = version;
|
|
71
|
+
// If we know which keys changed, we could delta-fetch in the future
|
|
72
|
+
// For now, full refresh (still efficient with CDN + deduplication)
|
|
73
|
+
await client.refresh();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Silently ignore polling errors — cache continues to work
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Start polling if interval > 0
|
|
81
|
+
if (pollInterval > 0 && typeof window !== "undefined") {
|
|
82
|
+
// Initial version check after first fetch completes
|
|
83
|
+
client.on("ready", () => {
|
|
84
|
+
void checkVersion();
|
|
85
|
+
});
|
|
86
|
+
pollTimer = setInterval(checkVersion, pollInterval);
|
|
87
|
+
// Also check on tab visibility change (user returns to tab)
|
|
88
|
+
document.addEventListener("visibilitychange", () => {
|
|
89
|
+
if (document.visibilityState === "visible") {
|
|
90
|
+
void checkVersion();
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
get(key) {
|
|
96
|
+
const resolved = client.getValue(key);
|
|
97
|
+
if (resolved !== undefined)
|
|
98
|
+
return resolved;
|
|
99
|
+
return defaults[key];
|
|
100
|
+
},
|
|
101
|
+
flag(key) {
|
|
102
|
+
const resolved = client.getFlag(key);
|
|
103
|
+
if (resolved)
|
|
104
|
+
return true;
|
|
105
|
+
const val = client.getValue(key);
|
|
106
|
+
if (val !== undefined)
|
|
107
|
+
return val === true;
|
|
108
|
+
return defaults[key] === true;
|
|
109
|
+
},
|
|
110
|
+
all() {
|
|
111
|
+
const resolved = client.getAll();
|
|
112
|
+
return { ...defaults, ...resolved };
|
|
113
|
+
},
|
|
114
|
+
setContext(context) {
|
|
115
|
+
client.setContext(context);
|
|
116
|
+
},
|
|
117
|
+
refresh() {
|
|
118
|
+
return client.refresh();
|
|
119
|
+
},
|
|
120
|
+
on(event, cb) {
|
|
121
|
+
client.on(event, cb);
|
|
122
|
+
},
|
|
123
|
+
off(event, cb) {
|
|
124
|
+
client.off(event, cb);
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=initConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initConfig.js","sourceRoot":"","sources":["../src/initConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pessimistic.d.ts","sourceRoot":"","sources":["../../src/loading/pessimistic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9D,eAAO,MAAM,kBAAkB,GAC7B,KAAK,cAAc,KAClB,OAAO,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"pessimistic.d.ts","sourceRoot":"","sources":["../../src/loading/pessimistic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9D,eAAO,MAAM,kBAAkB,GAC7B,KAAK,cAAc,KAClB,OAAO,CAAC,aAAa,CA8BvB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TimeoutError } from "../errors/index";
|
|
2
2
|
import { withRetry } from "../retry/RetryEngine";
|
|
3
3
|
import { DEFAULT_CACHE_TTL } from "../types";
|
|
4
4
|
export const executePessimistic = async (ctx) => {
|
|
@@ -15,10 +15,17 @@ export const executePessimistic = async (ctx) => {
|
|
|
15
15
|
return { initialData: data, status: "ready" };
|
|
16
16
|
}
|
|
17
17
|
catch (error) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
// On failure: fall back to cached data instead of throwing.
|
|
19
|
+
// This prevents SDK errors from hitting the consumer's error tracking.
|
|
20
|
+
// The error is communicated via the "fetchError" event instead.
|
|
21
|
+
ctx.events.emit("fetchError", {
|
|
22
|
+
error: error,
|
|
23
|
+
retryCount: ctx.retry.maxRetries,
|
|
24
|
+
willRetry: false,
|
|
25
|
+
});
|
|
26
|
+
// Try cache as fallback
|
|
27
|
+
const cached = ctx.cache.get("__all__");
|
|
28
|
+
return { initialData: cached ?? {}, status: "ready" };
|
|
22
29
|
}
|
|
23
30
|
};
|
|
24
31
|
//# sourceMappingURL=pessimistic.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pessimistic.js","sourceRoot":"","sources":["../../src/loading/pessimistic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pessimistic.js","sourceRoot":"","sources":["../../src/loading/pessimistic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,GAAmB,EACK,EAAE;IAC1B,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAExE,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACtD,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;QAEhE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,4DAA4D;QAC5D,uEAAuE;QACvE,gEAAgE;QAChE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE;YAC5B,KAAK,EAAE,KAAc;YACrB,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU;YAChC,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QAEH,wBAAwB;QACxB,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAA0B,SAAS,CAAC,CAAC;QACjE,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACxD,CAAC;AACH,CAAC,CAAC"}
|
package/dist/plugins/models.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/plugins/models.ts"],"names":[],"mappings":"AAIA,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;IAG1D,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IAGjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGpC,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAGF,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC,CAAC;CACJ;AAED,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,yBAAyB;AACzB,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;CAC7C;AAED,oCAAoC;AACpC,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,aAAa,GACb,WAAW,GACX,SAAS,GACT,aAAa,GACb,cAAc,GACd,WAAW,GACX,aAAa,GACb,YAAY,GACZ,gBAAgB,CAAC;AAErB,kCAAkC;AAClC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/plugins/models.ts"],"names":[],"mappings":"AAIA,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;IAG1D,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IAGjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGpC,QAAQ,CAAC,EAAE;QACT,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAGF,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EACP,QAAQ,GAAG,YAAY,GAAG,cAAc,GAAG,WAAW,GAAG,UAAU,CAAC;QACtE,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC,CAAC;CACJ;AAED,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,yBAAyB;AACzB,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC;CAC7C;AAED,oCAAoC;AACpC,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,aAAa,GACb,WAAW,GACX,SAAS,GACT,aAAa,GACb,cAAc,GACd,WAAW,GACX,aAAa,GACb,YAAY,GACZ,gBAAgB,CAAC;AAErB,kCAAkC;AAClC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prerequisitePlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/prerequisites/prerequisitePlugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,gBAAgB,EAGjB,MAAM,aAAa,CAAC;AAErB,0CAA0C;AAC1C,MAAM,WAAW,yBAAyB;IACxC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,CAAC,EAAE,yBAAyB,GAClC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"prerequisitePlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/prerequisites/prerequisitePlugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,gBAAgB,EAGjB,MAAM,aAAa,CAAC;AAErB,0CAA0C;AAC1C,MAAM,WAAW,yBAAyB;IACxC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,CAAC,EAAE,yBAAyB,GAClC,gBAAgB,CAmElB"}
|
|
@@ -44,8 +44,9 @@ export function prerequisitePlugin(options) {
|
|
|
44
44
|
// Evaluate each prerequisite
|
|
45
45
|
for (const prerequisite of flag.prerequisites) {
|
|
46
46
|
const resolvedValue = helpers.evaluateFlag(prerequisite.flagKey, context);
|
|
47
|
-
//
|
|
48
|
-
|
|
47
|
+
// Evaluate using the specified operator (defaults to "equals")
|
|
48
|
+
const op = prerequisite.operator ?? "equals";
|
|
49
|
+
if (!evaluatePrerequisiteOp(resolvedValue, op, prerequisite.requiredValue)) {
|
|
49
50
|
return { resolved: true, value: flag.value };
|
|
50
51
|
}
|
|
51
52
|
}
|
|
@@ -59,4 +60,23 @@ export function prerequisitePlugin(options) {
|
|
|
59
60
|
},
|
|
60
61
|
};
|
|
61
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Evaluate a prerequisite comparison using the specified operator.
|
|
65
|
+
*/
|
|
66
|
+
function evaluatePrerequisiteOp(actual, operator, expected) {
|
|
67
|
+
switch (operator) {
|
|
68
|
+
case "equals":
|
|
69
|
+
return actual === expected || String(actual) === String(expected);
|
|
70
|
+
case "not_equals":
|
|
71
|
+
return actual !== expected && String(actual) !== String(expected);
|
|
72
|
+
case "greater_than":
|
|
73
|
+
return Number(actual) > Number(expected);
|
|
74
|
+
case "less_than":
|
|
75
|
+
return Number(actual) < Number(expected);
|
|
76
|
+
case "contains":
|
|
77
|
+
return String(actual ?? "").includes(String(expected));
|
|
78
|
+
default:
|
|
79
|
+
return actual === expected || String(actual) === String(expected);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
62
82
|
//# sourceMappingURL=prerequisitePlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prerequisitePlugin.js","sourceRoot":"","sources":["../../../src/plugins/prerequisites/prerequisitePlugin.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,kCAAkC;AAClC,kEAAkE;AAgBlE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAmC;IAEnC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;IAExC,iFAAiF;IACjF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,OAAO;QACL,MAAM,EAAE,eAAe;QAEvB,QAAQ,CACN,IAAoB,EACpB,OAA0B,EAC1B,OAAwB;YAExB,qCAAqC;YACrC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC7B,CAAC;YAED,sEAAsE;YACtE,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,SAAS,CACf,uCAAuC,IAAI,CAAC,GAAG,mDAAmD,CACnG,CAAC;gBACF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/C,CAAC;YAED,qDAAqD;YACrD,IAAI,eAAe,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;gBACrC,OAAO,CAAC,SAAS,CACf,qDAAqD,QAAQ,kCAAkC,IAAI,CAAC,GAAG,GAAG,CAC3G,CAAC;gBACF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/C,CAAC;YAED,2CAA2C;YAC3C,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAE9B,IAAI,CAAC;gBACH,6BAA6B;gBAC7B,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CACxC,YAAY,CAAC,OAAO,EACpB,OAAO,CACR,CAAC;oBAEF
|
|
1
|
+
{"version":3,"file":"prerequisitePlugin.js","sourceRoot":"","sources":["../../../src/plugins/prerequisites/prerequisitePlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import type { EvaluationContext } from "../plugins/types";
|
|
1
2
|
import type { HttpTransport } from "../types";
|
|
2
3
|
export interface TransportConfig {
|
|
3
4
|
baseUrl: string;
|
|
4
5
|
clientId: string;
|
|
6
|
+
/** Internal mode (auto-detected from key prefix). Controls whether context is sent. */
|
|
7
|
+
evaluationMode?: "server" | "client";
|
|
8
|
+
getContext?: () => EvaluationContext;
|
|
5
9
|
}
|
|
6
10
|
export declare const createHttpTransport: (config: TransportConfig) => HttpTransport;
|
|
7
11
|
//# sourceMappingURL=HttpTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpTransport.d.ts","sourceRoot":"","sources":["../../src/transport/HttpTransport.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"HttpTransport.d.ts","sourceRoot":"","sources":["../../src/transport/HttpTransport.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,cAAc,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,iBAAiB,CAAC;CACtC;AAED,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,eAAe,KACtB,aAsDD,CAAC"}
|
|
@@ -3,16 +3,27 @@ import { AuthenticationError, ConfigError } from "../errors/index";
|
|
|
3
3
|
export const createHttpTransport = (config) => ({
|
|
4
4
|
async request(endpoint, body) {
|
|
5
5
|
const url = `${config.baseUrl}/${endpoint}`;
|
|
6
|
+
const requestData = {
|
|
7
|
+
clientId: config.clientId,
|
|
8
|
+
...body,
|
|
9
|
+
};
|
|
10
|
+
// In server mode (cid_ key), include the current context for server-side evaluation
|
|
11
|
+
if (config.evaluationMode === "server" && config.getContext) {
|
|
12
|
+
const ctx = config.getContext();
|
|
13
|
+
if (ctx && (ctx.userId || ctx.attributes)) {
|
|
14
|
+
requestData.context = {
|
|
15
|
+
...(ctx.userId && { userId: ctx.userId }),
|
|
16
|
+
...(ctx.attributes && { attributes: ctx.attributes }),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
6
20
|
const response = await fetch(url, {
|
|
7
21
|
method: "POST",
|
|
8
22
|
headers: {
|
|
9
23
|
"Content-Type": "application/json",
|
|
10
24
|
},
|
|
11
25
|
body: JSON.stringify({
|
|
12
|
-
data:
|
|
13
|
-
clientId: config.clientId,
|
|
14
|
-
...body,
|
|
15
|
-
},
|
|
26
|
+
data: requestData,
|
|
16
27
|
}),
|
|
17
28
|
});
|
|
18
29
|
if (!response.ok) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpTransport.js","sourceRoot":"","sources":["../../src/transport/HttpTransport.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"HttpTransport.js","sourceRoot":"","sources":["../../src/transport/HttpTransport.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAYnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAuB,EACR,EAAE,CAAC,CAAC;IACnB,KAAK,CAAC,OAAO,CACX,QAAgB,EAChB,IAA8B;QAE9B,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC;QAE5C,MAAM,WAAW,GAA4B;YAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,GAAG,IAAI;SACR,CAAC;QAEF,oFAAoF;QACpF,IAAI,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,WAAW,CAAC,OAAO,GAAG;oBACpB,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;oBACzC,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;iBACtD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,IAAI,EAAE,WAAW;aAClB,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,SAEjB,CAAC;YACF,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,IAAI,eAAe,CAAC;YACtD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;YAEtE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,IAAuB,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;IACtC,CAAC;CACF,CAAC,CAAC"}
|