@jewel998/config 0.1.0 → 0.1.2
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/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 +1 -1
- 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
|
@@ -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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { EvaluationContext, EvaluationPlugin } from "./plugins/types.js";
|
|
2
2
|
/** Loading strategy for SDK initialization */
|
|
3
3
|
export type LoadingStrategy = "optimistic" | "pessimistic" | "deferred";
|
|
4
|
+
/** Evaluation mode for the SDK */
|
|
5
|
+
export type EvaluationMode = "server" | "client";
|
|
4
6
|
/** Fetch granularity for remote config retrieval */
|
|
5
7
|
export type FetchGranularity = "batch" | "projected";
|
|
6
8
|
/** Default cache TTL: 7 days in milliseconds */
|
|
@@ -29,11 +31,19 @@ export interface CreateConfigOptions {
|
|
|
29
31
|
retry?: RetryConfig;
|
|
30
32
|
/** Timeout for pessimistic loading (ms). Default: 10000 */
|
|
31
33
|
timeout?: number;
|
|
32
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Your self-hosted API URL. Points to your Firebase deployment.
|
|
36
|
+
* Default: https://jewel998-config.web.app/api (demo instance)
|
|
37
|
+
*
|
|
38
|
+
* @example "https://your-project.web.app/api"
|
|
39
|
+
*/
|
|
33
40
|
baseUrl?: string;
|
|
34
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* Evaluation plugins to register (tree-shakeable pipeline steps).
|
|
43
|
+
* Only used with server keys (svr_). Client keys (cid_) receive pre-resolved values.
|
|
44
|
+
*/
|
|
35
45
|
plugins?: EvaluationPlugin[];
|
|
36
|
-
/** Evaluation context for
|
|
46
|
+
/** Evaluation context for targeting (can be updated post-init via setContext) */
|
|
37
47
|
context?: EvaluationContext;
|
|
38
48
|
/** Enable consent-aware mode (GDPR): if true and context.consentGranted !== true, returns defaults */
|
|
39
49
|
consentAware?: boolean;
|
|
@@ -135,11 +145,22 @@ export interface HttpTransport {
|
|
|
135
145
|
export interface GetConfigRequest {
|
|
136
146
|
clientId: string;
|
|
137
147
|
keys?: string[];
|
|
148
|
+
context?: {
|
|
149
|
+
userId?: string;
|
|
150
|
+
attributes?: Record<string, string | number | boolean | string[]>;
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
export interface EvaluationWarning {
|
|
154
|
+
key: string;
|
|
155
|
+
reason: "evaluation_error" | "segment_not_found" | "prerequisite_failed";
|
|
156
|
+
message: string;
|
|
138
157
|
}
|
|
139
158
|
export interface GetConfigResponse {
|
|
140
159
|
data: Record<string, unknown>;
|
|
160
|
+
segments?: Record<string, unknown>;
|
|
141
161
|
version: string;
|
|
142
162
|
timestamp: string;
|
|
163
|
+
warnings?: EvaluationWarning[];
|
|
143
164
|
}
|
|
144
165
|
export interface EventEmitterInterface {
|
|
145
166
|
on<E extends ConfigEventType>(event: E, callback: ConfigEventCallback<E>): void;
|
|
@@ -147,24 +168,6 @@ export interface EventEmitterInterface {
|
|
|
147
168
|
emit<E extends ConfigEventType>(event: E, payload: ConfigEventPayloads[E]): void;
|
|
148
169
|
removeAllListeners(): void;
|
|
149
170
|
}
|
|
150
|
-
/** @deprecated Use CreateConfigOptions instead */
|
|
151
|
-
export type ConfigScope = "tenant" | "project" | "environment";
|
|
152
|
-
/** @deprecated Use LoadingStrategy instead */
|
|
153
|
-
export type ConfigSourceMode = "offline" | "remote" | "hybrid";
|
|
154
|
-
/** @deprecated Config definitions are no longer needed client-side */
|
|
155
|
-
export interface ConfigDefinition<T = unknown> {
|
|
156
|
-
key: string;
|
|
157
|
-
defaultValue: T;
|
|
158
|
-
sourceMode: ConfigSourceMode;
|
|
159
|
-
scope: ConfigScope;
|
|
160
|
-
fallbackValue?: T;
|
|
161
|
-
}
|
|
162
|
-
/** @deprecated Scoping is handled by clientId */
|
|
163
|
-
export interface ConfigResolveContext {
|
|
164
|
-
tenantId?: string;
|
|
165
|
-
projectId?: string;
|
|
166
|
-
environment?: string;
|
|
167
|
-
}
|
|
168
171
|
export interface ProjectRecord {
|
|
169
172
|
id: string;
|
|
170
173
|
name: string;
|
|
@@ -198,20 +201,4 @@ export interface ConfigRecord {
|
|
|
198
201
|
updatedAt: string;
|
|
199
202
|
updatedBy: string;
|
|
200
203
|
}
|
|
201
|
-
/** @deprecated Use ProjectRecord instead */
|
|
202
|
-
export interface TenantRecord {
|
|
203
|
-
id: string;
|
|
204
|
-
name: string;
|
|
205
|
-
ownerId: string;
|
|
206
|
-
createdAt: string;
|
|
207
|
-
}
|
|
208
|
-
/** @deprecated Use ConfigRecord instead */
|
|
209
|
-
export interface ConfigVersionRecord {
|
|
210
|
-
id: string;
|
|
211
|
-
projectId: string;
|
|
212
|
-
environmentId?: string;
|
|
213
|
-
version: string;
|
|
214
|
-
payload: Record<string, unknown>;
|
|
215
|
-
publishedAt?: string;
|
|
216
|
-
}
|
|
217
204
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,8CAA8C;AAC9C,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,aAAa,GAAG,UAAU,CAAC;AAExE,oDAAoD;AACpD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,WAAW,CAAC;AAErD,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,QAA0B,CAAC;AAEzD,kDAAkD;AAClD,eAAO,MAAM,eAAe,QAAS,CAAC;AAMtC,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAEpC,sDAAsD;IACtD,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,iBAAiB;AACjB,kEAAkE;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,iBAAiB;AACjB,kEAAkE;AAalE,gDAAgD;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,iBAAiB;AAE3E,kDAAkD;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AA2GtC,MAAM,CAAC,MAAM,aAAa,GAA0B;IAClD,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,MAAM;CACjB,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supported webhook format identifiers.
|
|
3
|
+
*/
|
|
4
|
+
export declare const WEBHOOK_FORMATS: readonly ["standard", "slack", "discord", "google-chat", "ms-teams", "custom"];
|
|
5
|
+
export type WebhookFormat = (typeof WEBHOOK_FORMATS)[number];
|
|
6
|
+
/**
|
|
7
|
+
* Human-readable descriptions for each webhook format.
|
|
8
|
+
*/
|
|
9
|
+
export declare const WEBHOOK_FORMAT_INFO: Record<WebhookFormat, {
|
|
10
|
+
label: string;
|
|
11
|
+
description: string;
|
|
12
|
+
}>;
|
|
13
|
+
/**
|
|
14
|
+
* Available template variables for the custom format.
|
|
15
|
+
* Used by: portal UI (variable reference), docs page, and the function's template engine.
|
|
16
|
+
*/
|
|
17
|
+
export declare const TEMPLATE_VARIABLES: readonly [{
|
|
18
|
+
readonly variable: "{{action}}";
|
|
19
|
+
readonly description: "The action that occurred";
|
|
20
|
+
readonly example: "create, update, delete, state_change";
|
|
21
|
+
}, {
|
|
22
|
+
readonly variable: "{{resource.category}}";
|
|
23
|
+
readonly description: "Resource category";
|
|
24
|
+
readonly example: "config, segment, api_key, team";
|
|
25
|
+
}, {
|
|
26
|
+
readonly variable: "{{resource.path}}";
|
|
27
|
+
readonly description: "Full resource path";
|
|
28
|
+
readonly example: "environments/prod/configs/feature.dark_mode";
|
|
29
|
+
}, {
|
|
30
|
+
readonly variable: "{{resource.name}}";
|
|
31
|
+
readonly description: "Human-readable resource name";
|
|
32
|
+
readonly example: "feature.dark_mode";
|
|
33
|
+
}, {
|
|
34
|
+
readonly variable: "{{environment}}";
|
|
35
|
+
readonly description: "Environment name (empty if none)";
|
|
36
|
+
readonly example: "production";
|
|
37
|
+
}, {
|
|
38
|
+
readonly variable: "{{actor.id}}";
|
|
39
|
+
readonly description: "User ID of the person who made the change";
|
|
40
|
+
readonly example: "user_abc123";
|
|
41
|
+
}, {
|
|
42
|
+
readonly variable: "{{timestamp}}";
|
|
43
|
+
readonly description: "ISO 8601 timestamp of the event";
|
|
44
|
+
readonly example: "2025-01-15T09:30:00.000Z";
|
|
45
|
+
}, {
|
|
46
|
+
readonly variable: "{{project.id}}";
|
|
47
|
+
readonly description: "Project identifier";
|
|
48
|
+
readonly example: "proj_xyz";
|
|
49
|
+
}, {
|
|
50
|
+
readonly variable: "{{webhook.id}}";
|
|
51
|
+
readonly description: "Webhook identifier";
|
|
52
|
+
readonly example: "whk_123";
|
|
53
|
+
}, {
|
|
54
|
+
readonly variable: "{{changes.old}}";
|
|
55
|
+
readonly description: "Previous value as JSON string (empty if create)";
|
|
56
|
+
readonly example: "{\"enabled\": true}";
|
|
57
|
+
}, {
|
|
58
|
+
readonly variable: "{{changes.new}}";
|
|
59
|
+
readonly description: "New value as JSON string (empty if delete)";
|
|
60
|
+
readonly example: "{\"enabled\": false}";
|
|
61
|
+
}];
|
|
62
|
+
/**
|
|
63
|
+
* Event types that can trigger webhooks.
|
|
64
|
+
*/
|
|
65
|
+
export declare const WEBHOOK_EVENT_TYPES: readonly ["create", "update", "delete", "state_change"];
|
|
66
|
+
export type WebhookEventType = (typeof WEBHOOK_EVENT_TYPES)[number];
|
|
67
|
+
/**
|
|
68
|
+
* Resource categories for webhook filtering.
|
|
69
|
+
*/
|
|
70
|
+
export declare const WEBHOOK_RESOURCE_CATEGORIES: readonly ["config", "segment", "api_key", "project", "team", "environment"];
|
|
71
|
+
export type WebhookResourceCategory = (typeof WEBHOOK_RESOURCE_CATEGORIES)[number];
|
|
72
|
+
/**
|
|
73
|
+
* Sample payload used for preview/testing (shared between portal and docs).
|
|
74
|
+
*/
|
|
75
|
+
export declare const SAMPLE_WEBHOOK_EVENT: {
|
|
76
|
+
readonly action: "update";
|
|
77
|
+
readonly resourceCategory: "config";
|
|
78
|
+
readonly resourcePath: "environments/production/configs/feature.dark_mode";
|
|
79
|
+
readonly resourceName: "feature.dark_mode";
|
|
80
|
+
readonly environment: "production";
|
|
81
|
+
readonly actorId: "user_abc123";
|
|
82
|
+
readonly timestamp: "2025-01-15T09:30:00.000Z";
|
|
83
|
+
readonly oldValue: {
|
|
84
|
+
readonly value: false;
|
|
85
|
+
};
|
|
86
|
+
readonly newValue: {
|
|
87
|
+
readonly value: true;
|
|
88
|
+
};
|
|
89
|
+
readonly projectId: "proj_xyz";
|
|
90
|
+
readonly webhookId: "whk_sample";
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=webhook-formats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-formats.d.ts","sourceRoot":"","sources":["../src/webhook-formats.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,eAAO,MAAM,eAAe,gFAOlB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,aAAa,EACb;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CA0BvC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwDrB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mBAAmB,yDAKtB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,2BAA2B,6EAO9B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;CAYvB,CAAC"}
|