@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.
Files changed (110) hide show
  1. package/LICENSE +84 -0
  2. package/README.md +234 -0
  3. package/dist/client/ConfigClient.d.ts +3 -1
  4. package/dist/client/ConfigClient.d.ts.map +1 -1
  5. package/dist/client/ConfigClient.js +53 -19
  6. package/dist/client/ConfigClient.js.map +1 -1
  7. package/dist/context/autoContext.d.ts +28 -0
  8. package/dist/context/autoContext.d.ts.map +1 -0
  9. package/dist/context/autoContext.js +135 -0
  10. package/dist/context/autoContext.js.map +1 -0
  11. package/dist/createConfig.d.ts.map +1 -1
  12. package/dist/createConfig.js +31 -7
  13. package/dist/createConfig.js.map +1 -1
  14. package/dist/index.d.ts +6 -15
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +8 -9
  17. package/dist/index.js.map +1 -1
  18. package/dist/initConfig.d.ts +66 -0
  19. package/dist/initConfig.d.ts.map +1 -0
  20. package/dist/initConfig.js +128 -0
  21. package/dist/initConfig.js.map +1 -0
  22. package/dist/loading/pessimistic.d.ts.map +1 -1
  23. package/dist/loading/pessimistic.js +12 -5
  24. package/dist/loading/pessimistic.js.map +1 -1
  25. package/dist/plugins/models.d.ts +1 -0
  26. package/dist/plugins/models.d.ts.map +1 -1
  27. package/dist/plugins/prerequisites/prerequisitePlugin.d.ts.map +1 -1
  28. package/dist/plugins/prerequisites/prerequisitePlugin.js +22 -2
  29. package/dist/plugins/prerequisites/prerequisitePlugin.js.map +1 -1
  30. package/dist/transport/HttpTransport.d.ts +4 -0
  31. package/dist/transport/HttpTransport.d.ts.map +1 -1
  32. package/dist/transport/HttpTransport.js +15 -4
  33. package/dist/transport/HttpTransport.js.map +1 -1
  34. package/dist/types.d.ts +24 -37
  35. package/dist/types.d.ts.map +1 -1
  36. package/dist/types.js.map +1 -1
  37. package/dist/webhook-formats.d.ts +92 -0
  38. package/dist/webhook-formats.d.ts.map +1 -0
  39. package/dist/webhook-formats.js +141 -0
  40. package/dist/webhook-formats.js.map +1 -0
  41. package/package.json +21 -3
  42. package/dist/cache/storage.d.ts +0 -15
  43. package/dist/cache/storage.d.ts.map +0 -1
  44. package/dist/cache/storage.js +0 -43
  45. package/dist/cache/storage.js.map +0 -1
  46. package/dist/cache/types.d.ts +0 -3
  47. package/dist/cache/types.js +0 -2
  48. package/dist/cache/types.js.map +0 -1
  49. package/dist/client.d.ts +0 -15
  50. package/dist/client.d.ts.map +0 -1
  51. package/dist/client.js +0 -80
  52. package/dist/client.js.map +0 -1
  53. package/dist/core/resolver.d.ts +0 -8
  54. package/dist/core/resolver.d.ts.map +0 -1
  55. package/dist/core/resolver.js +0 -22
  56. package/dist/core/resolver.js.map +0 -1
  57. package/dist/errors/index.d.ts +0 -17
  58. package/dist/errors/index.d.ts.map +0 -1
  59. package/dist/errors/index.js +0 -29
  60. package/dist/errors/index.js.map +0 -1
  61. package/dist/example.d.ts +0 -2
  62. package/dist/example.d.ts.map +0 -1
  63. package/dist/example.js +0 -23
  64. package/dist/example.js.map +0 -1
  65. package/dist/loading/deferred.d.ts +0 -3
  66. package/dist/loading/deferred.js +0 -5
  67. package/dist/loading/deferred.js.map +0 -1
  68. package/dist/loading/optimistic.d.ts +0 -3
  69. package/dist/loading/pessimistic.d.ts +0 -3
  70. package/dist/management/index.d.ts +0 -3
  71. package/dist/management/index.d.ts.map +0 -1
  72. package/dist/management/index.js +0 -2
  73. package/dist/management/index.js.map +0 -1
  74. package/dist/management/manager.d.ts +0 -34
  75. package/dist/management/manager.d.ts.map +0 -1
  76. package/dist/management/manager.js +0 -21
  77. package/dist/management/manager.js.map +0 -1
  78. package/dist/management/memory-backend.d.ts +0 -6
  79. package/dist/management/memory-backend.d.ts.map +0 -1
  80. package/dist/management/memory-backend.js +0 -78
  81. package/dist/management/memory-backend.js.map +0 -1
  82. package/dist/plugins/index.d.ts +0 -5
  83. package/dist/plugins/lifecycle/index.d.ts +0 -4
  84. package/dist/plugins/overrides/index.d.ts +0 -2
  85. package/dist/plugins/prerequisites/index.d.ts +0 -3
  86. package/dist/plugins/rollout/index.d.ts +0 -3
  87. package/dist/plugins/rollout/murmurhash3.d.ts +0 -6
  88. package/dist/plugins/rollout/murmurhash3.d.ts.map +0 -1
  89. package/dist/plugins/rollout/murmurhash3.js +0 -56
  90. package/dist/plugins/rollout/murmurhash3.js.map +0 -1
  91. package/dist/plugins/schedule/index.d.ts +0 -2
  92. package/dist/plugins/targeting/index.d.ts +0 -4
  93. package/dist/plugins/targeting/predicates.d.ts +0 -23
  94. package/dist/plugins/targeting/predicates.js +0 -110
  95. package/dist/plugins/targeting/predicates.js.map +0 -1
  96. package/dist/plugins/types.d.ts +0 -35
  97. package/dist/plugins/types.js +0 -13
  98. package/dist/plugins/types.js.map +0 -1
  99. package/dist/registry.d.ts +0 -9
  100. package/dist/registry.d.ts.map +0 -1
  101. package/dist/registry.js +0 -22
  102. package/dist/registry.js.map +0 -1
  103. package/dist/remote/firebase-adapter.d.ts +0 -6
  104. package/dist/remote/firebase-adapter.d.ts.map +0 -1
  105. package/dist/remote/firebase-adapter.js +0 -12
  106. package/dist/remote/firebase-adapter.js.map +0 -1
  107. package/dist/remote/provider.d.ts +0 -6
  108. package/dist/remote/provider.d.ts.map +0 -1
  109. package/dist/remote/provider.js +0 -5
  110. package/dist/remote/provider.js.map +0 -1
@@ -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://us-central1-jewel998-config.cloudfunctions.net";
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
- // 4. Create internal modules
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
- // 5. Create loading context
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
- // 6. Execute strategy
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: options.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: options.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: options.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",
@@ -1 +1 @@
1
- {"version":3,"file":"createConfig.js","sourceRoot":"","sources":["../src/createConfig.ts"],"names":[],"mappings":"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"}
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;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAMhE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEzD,MAAM,gBAAgB,GAAG,qCAAqC,CAAC;AAM/D,MAAM,UAAU,YAAY,CAC1B,OAA4B;IAE5B,uBAAuB;IACvB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,WAAW,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC;IACrE,CAAC;IAED,+BAA+B;IAC/B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,WAAW,CACnB,uEAAuE,EACvE,uBAAuB,CACxB,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,IAAI,YAAY,CAAC;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC;IAEpD,+CAA+C;IAC/C,kDAAkD;IAClD,yDAAyD;IACzD,MAAM,cAAc,GAAwB,OAAO,CAAC,QAAQ,CAAC,UAAU,CACrE,MAAM,CACP;QACC,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,QAAQ,CAAC;IAEb,0DAA0D;IAC1D,IAAI,cAAc,GAAsB,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IAE9D,6BAA6B;IAC7B,MAAM,SAAS,GAAG,mBAAmB,CAAC;QACpC,OAAO;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc;QACd,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc;KACjC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACvC,MAAM,OAAO,GACX,WAAW,KAAK,OAAO;QACrB,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC;QAC/B,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAExC,4BAA4B;IAC5B,MAAM,OAAO,GAAmB;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO;QACP,KAAK,EAAE,OAAO;QACd,MAAM;QACN,KAAK;QACL,OAAO;QACP,WAAW;KACZ,CAAC;IAEF,sEAAsE;IACtE,MAAM,OAAO,GAAG,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1E,sBAAsB;IACtB,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC/B,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC;gBAC/B,IAAI,EAAE,MAAM,CAAC,WAAW;gBACxB,KAAK,EAAE,OAAO;gBACd,OAAO;gBACP,MAAM;gBACN,KAAK;gBACL,WAAW;gBACX,UAAU,EAAE,KAAK;gBACjB,OAAO;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,cAAc;gBACd,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE;oBACvB,cAAc,GAAG,GAAG,CAAC;gBACvB,CAAC;aACF,CAAC,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;gBACnB,eAAe,EAAE,aAAa;gBAC9B,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM;aACnD,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,iBAAiB,CAAC;YAC/B,IAAI,EAAE,MAAM,CAAC,WAAW;YACxB,KAAK,EAAE,OAAO;YACd,OAAO;YACP,MAAM;YACN,KAAK;YACL,WAAW;YACX,UAAU,EAAE,IAAI;YAChB,OAAO;YACP,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,cAAc;YACd,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvB,cAAc,GAAG,GAAG,CAAC;YACvB,CAAC;SACF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;YACnB,eAAe,EAAE,UAAU;YAC3B,UAAU,EAAE,CAAC;SACd,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,sBAAsB;IACtB,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC;QAC/B,IAAI,EAAE,MAAM,CAAC,WAAW;QACxB,KAAK,EAAE,OAAO;QACd,OAAO;QACP,MAAM;QACN,KAAK;QACL,WAAW;QACX,UAAU,EAAE,KAAK;QACjB,OAAO;QACP,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc;QACd,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,cAAc,GAAG,GAAG,CAAC;QACvB,CAAC;KACF,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;QACnB,eAAe,EAAE,YAAY;QAC7B,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM;KACnD,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
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
@@ -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,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;AAMtD,6CAA6C;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,YAAY,EACV,YAAY,IAAI,kBAAkB,EAClC,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAElB,qEAAqE;AACrE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,2CAA2C;AAC3C,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,iDAAiD;AACjD,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEtE,8CAA8C;AAC9C,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
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
- // New API (v0.2.0+)
2
+ // @jewel998/config SDK
3
3
  // ═══════════════════════════════════════════════════════════════
4
- // Entry point
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,oBAAoB;AACpB,kEAAkE;AAElE,cAAc;AACd,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA4B9C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,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;AAGxB,kEAAkE;AAClE,gEAAgE;AAChE,kEAAkE;AAElE,6CAA6C;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAkB9C,0CAA0C;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
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,CAyBvB,CAAC"}
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 { InitializationError, TimeoutError } from "../errors/index";
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
- if (error instanceof TimeoutError) {
19
- throw error;
20
- }
21
- throw new InitializationError("Failed to fetch config after all retries", error);
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,mBAAmB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpE,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,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAI,mBAAmB,CAC3B,0CAA0C,EAC1C,KAAc,CACf,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
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"}
@@ -15,6 +15,7 @@ export interface ConfigFlagData {
15
15
  };
16
16
  prerequisites?: Array<{
17
17
  flagKey: string;
18
+ operator?: "equals" | "not_equals" | "greater_than" | "less_than" | "contains";
18
19
  requiredValue: unknown;
19
20
  }>;
20
21
  }
@@ -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,CA4DlB"}
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
- // Strict equality check — prerequisite is unmet if values don't match
48
- if (resolvedValue !== prerequisite.requiredValue) {
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,sEAAsE;oBACtE,IAAI,aAAa,KAAK,YAAY,CAAC,aAAa,EAAE,CAAC;wBACjD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC/C,CAAC;gBACH,CAAC;gBAED,gDAAgD;gBAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC7B,CAAC;oBAAS,CAAC;gBACT,6DAA6D;gBAC7D,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
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;CAClB;AAED,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,eAAe,KACtB,aAyCD,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;AAQnE,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,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;oBACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,GAAG,IAAI;iBACR;aACF,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"}
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"}