@holokai/holo-sdk 1.4.1
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 +21 -0
- package/README.md +264 -0
- package/dist/client/builder.d.ts +82 -0
- package/dist/client/builder.d.ts.map +1 -0
- package/dist/client/builder.js +207 -0
- package/dist/client/builder.js.map +1 -0
- package/dist/client/client.d.ts +148 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +309 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/errors.d.ts +20 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +36 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/index.d.ts +11 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +8 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/merge.d.ts +28 -0
- package/dist/client/merge.d.ts.map +1 -0
- package/dist/client/merge.js +185 -0
- package/dist/client/merge.js.map +1 -0
- package/dist/client/output.d.ts +26 -0
- package/dist/client/output.d.ts.map +1 -0
- package/dist/client/output.js +75 -0
- package/dist/client/output.js.map +1 -0
- package/dist/client/runner.d.ts +92 -0
- package/dist/client/runner.d.ts.map +1 -0
- package/dist/client/runner.js +121 -0
- package/dist/client/runner.js.map +1 -0
- package/dist/client/sse.d.ts +3 -0
- package/dist/client/sse.d.ts.map +1 -0
- package/dist/client/sse.js +72 -0
- package/dist/client/sse.js.map +1 -0
- package/dist/client/stream.d.ts +60 -0
- package/dist/client/stream.d.ts.map +1 -0
- package/dist/client/stream.js +137 -0
- package/dist/client/stream.js.map +1 -0
- package/dist/client/transport.d.ts +42 -0
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/client/transport.js +129 -0
- package/dist/client/transport.js.map +1 -0
- package/dist/client/types.d.ts +41 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/core/async-event-queue.d.ts +11 -0
- package/dist/core/async-event-queue.d.ts.map +1 -0
- package/dist/core/async-event-queue.js +38 -0
- package/dist/core/async-event-queue.js.map +1 -0
- package/dist/core/binary.d.ts +3 -0
- package/dist/core/binary.d.ts.map +1 -0
- package/dist/core/binary.js +11 -0
- package/dist/core/binary.js.map +1 -0
- package/dist/core/errors.d.ts +11 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +24 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/headers.d.ts +3 -0
- package/dist/core/headers.d.ts.map +1 -0
- package/dist/core/headers.js +42 -0
- package/dist/core/headers.js.map +1 -0
- package/dist/core/index.d.ts +13 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +37 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +73 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/pick-defined.d.ts +9 -0
- package/dist/core/pick-defined.d.ts.map +1 -0
- package/dist/core/pick-defined.js +79 -0
- package/dist/core/pick-defined.js.map +1 -0
- package/dist/core/safe-parse.d.ts +2 -0
- package/dist/core/safe-parse.d.ts.map +1 -0
- package/dist/core/safe-parse.js +11 -0
- package/dist/core/safe-parse.js.map +1 -0
- package/dist/core/sanitize.object.d.ts +2 -0
- package/dist/core/sanitize.object.d.ts.map +1 -0
- package/dist/core/sanitize.object.js +10 -0
- package/dist/core/sanitize.object.js.map +1 -0
- package/dist/core/stable-id.d.ts +2 -0
- package/dist/core/stable-id.d.ts.map +1 -0
- package/dist/core/stable-id.js +11 -0
- package/dist/core/stable-id.js.map +1 -0
- package/dist/core/stringify-any.d.ts +2 -0
- package/dist/core/stringify-any.d.ts.map +1 -0
- package/dist/core/stringify-any.js +4 -0
- package/dist/core/stringify-any.js.map +1 -0
- package/dist/core/time-utils.d.ts +2 -0
- package/dist/core/time-utils.d.ts.map +1 -0
- package/dist/core/time-utils.js +2 -0
- package/dist/core/time-utils.js.map +1 -0
- package/dist/core/tokenizer.d.ts +2 -0
- package/dist/core/tokenizer.d.ts.map +1 -0
- package/dist/core/tokenizer.js +12 -0
- package/dist/core/tokenizer.js.map +1 -0
- package/dist/holo/content.d.ts +9 -0
- package/dist/holo/content.d.ts.map +1 -0
- package/dist/holo/content.js +22 -0
- package/dist/holo/content.js.map +1 -0
- package/dist/holo/factories/index.d.ts +2 -0
- package/dist/holo/factories/index.d.ts.map +1 -0
- package/dist/holo/factories/index.js +2 -0
- package/dist/holo/factories/index.js.map +1 -0
- package/dist/holo/factories/request-factory.d.ts +3 -0
- package/dist/holo/factories/request-factory.d.ts.map +1 -0
- package/dist/holo/factories/request-factory.js +8 -0
- package/dist/holo/factories/request-factory.js.map +1 -0
- package/dist/holo/index.d.ts +3 -0
- package/dist/holo/index.d.ts.map +1 -0
- package/dist/holo/index.js +3 -0
- package/dist/holo/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/matching/index.d.ts +3 -0
- package/dist/matching/index.d.ts.map +1 -0
- package/dist/matching/index.js +2 -0
- package/dist/matching/index.js.map +1 -0
- package/dist/matching/normalize.d.ts +19 -0
- package/dist/matching/normalize.d.ts.map +1 -0
- package/dist/matching/normalize.js +169 -0
- package/dist/matching/normalize.js.map +1 -0
- package/dist/notification/index.d.ts +4 -0
- package/dist/notification/index.d.ts.map +1 -0
- package/dist/notification/index.js +4 -0
- package/dist/notification/index.js.map +1 -0
- package/dist/notification/service.d.ts +8 -0
- package/dist/notification/service.d.ts.map +1 -0
- package/dist/notification/service.js +16 -0
- package/dist/notification/service.js.map +1 -0
- package/dist/notification/store.d.ts +2 -0
- package/dist/notification/store.d.ts.map +1 -0
- package/dist/notification/store.js +2 -0
- package/dist/notification/store.js.map +1 -0
- package/dist/notification/types.d.ts +11 -0
- package/dist/notification/types.d.ts.map +1 -0
- package/dist/notification/types.js +63 -0
- package/dist/notification/types.js.map +1 -0
- package/dist/plugin/base.d.ts +29 -0
- package/dist/plugin/base.d.ts.map +1 -0
- package/dist/plugin/base.js +105 -0
- package/dist/plugin/base.js.map +1 -0
- package/dist/plugin/errors.d.ts +9 -0
- package/dist/plugin/errors.d.ts.map +1 -0
- package/dist/plugin/errors.js +15 -0
- package/dist/plugin/errors.js.map +1 -0
- package/dist/plugin/index.d.ts +5 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +5 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/loader.d.ts +14 -0
- package/dist/plugin/loader.d.ts.map +1 -0
- package/dist/plugin/loader.js +67 -0
- package/dist/plugin/loader.js.map +1 -0
- package/dist/plugin/normalize.d.ts +3 -0
- package/dist/plugin/normalize.d.ts.map +1 -0
- package/dist/plugin/normalize.js +160 -0
- package/dist/plugin/normalize.js.map +1 -0
- package/dist/provider/auditor/base.d.ts +47 -0
- package/dist/provider/auditor/base.d.ts.map +1 -0
- package/dist/provider/auditor/base.js +254 -0
- package/dist/provider/auditor/base.js.map +1 -0
- package/dist/provider/auditor/index.d.ts +2 -0
- package/dist/provider/auditor/index.d.ts.map +1 -0
- package/dist/provider/auditor/index.js +2 -0
- package/dist/provider/auditor/index.js.map +1 -0
- package/dist/provider/base.d.ts +36 -0
- package/dist/provider/base.d.ts.map +1 -0
- package/dist/provider/base.js +185 -0
- package/dist/provider/base.js.map +1 -0
- package/dist/provider/event-processor.d.ts +13 -0
- package/dist/provider/event-processor.d.ts.map +1 -0
- package/dist/provider/event-processor.js +22 -0
- package/dist/provider/event-processor.js.map +1 -0
- package/dist/provider/index.d.ts +7 -0
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/provider/index.js +7 -0
- package/dist/provider/index.js.map +1 -0
- package/dist/provider/translator/base.d.ts +15 -0
- package/dist/provider/translator/base.d.ts.map +1 -0
- package/dist/provider/translator/base.js +33 -0
- package/dist/provider/translator/base.js.map +1 -0
- package/dist/provider/translator/index.d.ts +3 -0
- package/dist/provider/translator/index.d.ts.map +1 -0
- package/dist/provider/translator/index.js +3 -0
- package/dist/provider/translator/index.js.map +1 -0
- package/dist/provider/translator/stream.d.ts +24 -0
- package/dist/provider/translator/stream.d.ts.map +1 -0
- package/dist/provider/translator/stream.js +50 -0
- package/dist/provider/translator/stream.js.map +1 -0
- package/dist/provider/wire/base.d.ts +39 -0
- package/dist/provider/wire/base.d.ts.map +1 -0
- package/dist/provider/wire/base.js +106 -0
- package/dist/provider/wire/base.js.map +1 -0
- package/dist/provider/wire/holo.wire.adapter.d.ts +33 -0
- package/dist/provider/wire/holo.wire.adapter.d.ts.map +1 -0
- package/dist/provider/wire/holo.wire.adapter.js +220 -0
- package/dist/provider/wire/holo.wire.adapter.js.map +1 -0
- package/dist/provider/wire/index.d.ts +3 -0
- package/dist/provider/wire/index.d.ts.map +1 -0
- package/dist/provider/wire/index.js +3 -0
- package/dist/provider/wire/index.js.map +1 -0
- package/dist/provider/worker-request-factory.d.ts +23 -0
- package/dist/provider/worker-request-factory.d.ts.map +1 -0
- package/dist/provider/worker-request-factory.js +38 -0
- package/dist/provider/worker-request-factory.js.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { pickDefined } from '../core/pick-defined';
|
|
2
|
+
const PROVIDER_PREFIXES = [
|
|
3
|
+
'anthropic/', 'openai/', 'google/', 'meta-llama/', 'meta/', 'mistralai/',
|
|
4
|
+
'cohere/', 'deepseek/', 'qwen/',
|
|
5
|
+
'ollama/', 'lmstudio/', 'openrouter/', 'azure/',
|
|
6
|
+
'models/',
|
|
7
|
+
];
|
|
8
|
+
const PREFIX_TO_PROVIDER = {
|
|
9
|
+
'anthropic': 'anthropic',
|
|
10
|
+
'openai': 'openai',
|
|
11
|
+
'google': 'google',
|
|
12
|
+
'meta-llama': 'meta',
|
|
13
|
+
'meta': 'meta',
|
|
14
|
+
'mistralai': 'mistral',
|
|
15
|
+
'cohere': 'cohere',
|
|
16
|
+
'deepseek': 'deepseek',
|
|
17
|
+
'qwen': 'qwen',
|
|
18
|
+
'ollama': 'ollama',
|
|
19
|
+
'lmstudio': 'lmstudio',
|
|
20
|
+
'openrouter': 'openrouter',
|
|
21
|
+
'azure': 'azure',
|
|
22
|
+
};
|
|
23
|
+
const PREFIX_TO_FAMILY = {
|
|
24
|
+
'anthropic': 'claude',
|
|
25
|
+
'google': 'gemini',
|
|
26
|
+
'meta-llama': 'llama',
|
|
27
|
+
'meta': 'llama',
|
|
28
|
+
};
|
|
29
|
+
const FAMILY_PATTERNS = [
|
|
30
|
+
[/\bclaude/, 'claude'],
|
|
31
|
+
[/\bgemini/, 'gemini'],
|
|
32
|
+
[/\bgpt/, 'gpt'],
|
|
33
|
+
[/(?:^|-)o[1-9](?:-|$)/, 'o-series'],
|
|
34
|
+
[/\bllama/, 'llama'],
|
|
35
|
+
[/\bqwen/, 'qwen'],
|
|
36
|
+
[/\bmi[sx]tral/, 'mistral'],
|
|
37
|
+
[/\bdeepseek/, 'deepseek'],
|
|
38
|
+
[/\bcohere/, 'cohere'],
|
|
39
|
+
[/\bcommand/, 'cohere'],
|
|
40
|
+
[/\bphi/, 'phi'],
|
|
41
|
+
[/\bgemma/, 'gemma'],
|
|
42
|
+
];
|
|
43
|
+
const SEMANTIC_VARIANTS = ['opus', 'sonnet', 'haiku', 'pro', 'flash', 'mini', 'nano', 'instruct', 'coder', 'turbo'];
|
|
44
|
+
const CHANNEL_MARKERS = ['latest', 'preview'];
|
|
45
|
+
const ALL_VARIANT_TOKENS = [...SEMANTIC_VARIANTS, ...CHANNEL_MARKERS];
|
|
46
|
+
const VARIANT_PATTERN = new RegExp(`\\b(${ALL_VARIANT_TOKENS.join('|')})\\b`, 'g');
|
|
47
|
+
const VARIANT_PRIORITY = Object.fromEntries(SEMANTIC_VARIANTS.map((v, i) => [v, SEMANTIC_VARIANTS.length - i]));
|
|
48
|
+
const SIZE_PATTERN = /\b(\d+x\d+b|\d+(?:\.\d+)?b)\b/;
|
|
49
|
+
const DATE_TRAILING_COMPACT = /-(\d{4})(\d{2})(\d{2})$/;
|
|
50
|
+
const DATE_TRAILING_HYPHEN = /-(\d{4})-(\d{2})-(\d{2})$/;
|
|
51
|
+
const KIND_SIGNALS = [
|
|
52
|
+
[/\bembed/, 'embedding'],
|
|
53
|
+
[/\btts\b/, 'tts'],
|
|
54
|
+
[/\bwhisper\b/, 'transcription'],
|
|
55
|
+
[/\brerank\b/, 'rerank'],
|
|
56
|
+
[/\bmoderat/, 'moderation'],
|
|
57
|
+
[/\bimage\b|\bdall-?e\b|\bstable-?diffusion\b/, 'image'],
|
|
58
|
+
];
|
|
59
|
+
export function normalizeModelName(input) {
|
|
60
|
+
const raw = input;
|
|
61
|
+
let s = input.trim().toLowerCase();
|
|
62
|
+
let providerHint;
|
|
63
|
+
let prefixKey;
|
|
64
|
+
for (const prefix of PROVIDER_PREFIXES) {
|
|
65
|
+
if (s.startsWith(prefix)) {
|
|
66
|
+
prefixKey = prefix.slice(0, -1);
|
|
67
|
+
providerHint = PREFIX_TO_PROVIDER[prefixKey];
|
|
68
|
+
s = s.slice(prefix.length);
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
s = s.replace(/[_:\/]/g, '-').replace(/\s+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');
|
|
73
|
+
let dateHint;
|
|
74
|
+
const compactDate = s.match(DATE_TRAILING_COMPACT);
|
|
75
|
+
if (compactDate) {
|
|
76
|
+
dateHint = `${compactDate[1]}-${compactDate[2]}-${compactDate[3]}`;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const hyphenDate = s.match(DATE_TRAILING_HYPHEN);
|
|
80
|
+
if (hyphenDate) {
|
|
81
|
+
dateHint = `${hyphenDate[1]}-${hyphenDate[2]}-${hyphenDate[3]}`;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
let versionHint;
|
|
85
|
+
const versionMatch = s.match(/\b(\d+)-(\d+)\b/);
|
|
86
|
+
if (versionMatch) {
|
|
87
|
+
versionHint = `${versionMatch[1]}.${versionMatch[2]}`;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
const dotVersion = s.match(/(\d+\.\d+(?:\.\d+)?)/);
|
|
91
|
+
if (dotVersion) {
|
|
92
|
+
versionHint = dotVersion[1];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
let sizeHint;
|
|
96
|
+
const sizeMatch = s.match(SIZE_PATTERN);
|
|
97
|
+
if (sizeMatch) {
|
|
98
|
+
sizeHint = sizeMatch[1];
|
|
99
|
+
}
|
|
100
|
+
let variantHint;
|
|
101
|
+
let channelHint;
|
|
102
|
+
const variantMatches = [...s.matchAll(VARIANT_PATTERN)];
|
|
103
|
+
if (variantMatches.length > 0) {
|
|
104
|
+
const semantics = [];
|
|
105
|
+
for (const m of variantMatches) {
|
|
106
|
+
const v = m[1];
|
|
107
|
+
if (CHANNEL_MARKERS.includes(v)) {
|
|
108
|
+
channelHint = v;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
semantics.push(v);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (semantics.length > 0) {
|
|
115
|
+
variantHint = semantics.sort((a, b) => (VARIANT_PRIORITY[b] ?? 0) - (VARIANT_PRIORITY[a] ?? 0))[0];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
let familyHint;
|
|
119
|
+
if (prefixKey)
|
|
120
|
+
familyHint = PREFIX_TO_FAMILY[prefixKey];
|
|
121
|
+
if (!familyHint) {
|
|
122
|
+
for (const [pattern, family] of FAMILY_PATTERNS) {
|
|
123
|
+
if (pattern.test(s)) {
|
|
124
|
+
familyHint = family;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
let kindHint;
|
|
130
|
+
for (const [pattern, kind] of KIND_SIGNALS) {
|
|
131
|
+
if (pattern.test(s)) {
|
|
132
|
+
kindHint = kind;
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const tokens = s.split('-').filter(t => t.length > 0);
|
|
137
|
+
return Object.assign({ raw, normalized: s, tokens }, pickDefined({ providerHint, familyHint, versionHint, sizeHint, variantHint, channelHint, dateHint, kindHint }));
|
|
138
|
+
}
|
|
139
|
+
export function stripDate(normalized) {
|
|
140
|
+
const compact = normalized.match(DATE_TRAILING_COMPACT);
|
|
141
|
+
if (compact)
|
|
142
|
+
return normalized.slice(0, -compact[0].length);
|
|
143
|
+
const hyphen = normalized.match(DATE_TRAILING_HYPHEN);
|
|
144
|
+
if (hyphen)
|
|
145
|
+
return normalized.slice(0, -hyphen[0].length);
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
const PROVIDER_REVISION = /-0\d{2}$|-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$|-(0[1-9]|1[0-2])-(\d{4})$/;
|
|
149
|
+
export function stripProviderRevision(normalized) {
|
|
150
|
+
const match = normalized.match(PROVIDER_REVISION);
|
|
151
|
+
if (match)
|
|
152
|
+
return normalized.slice(0, -match[0].length);
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
const QUANTIZATION = /-(q\d+(-\d+)?|fp16|fp32|int4|int8|gguf)$/;
|
|
156
|
+
export function stripQuantization(normalized) {
|
|
157
|
+
const match = normalized.match(QUANTIZATION);
|
|
158
|
+
if (match)
|
|
159
|
+
return normalized.slice(0, -match[0].length);
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
const CHANNEL_SUFFIX = /-(latest|preview)$/;
|
|
163
|
+
export function stripChannel(normalized) {
|
|
164
|
+
const match = normalized.match(CHANNEL_SUFFIX);
|
|
165
|
+
if (match)
|
|
166
|
+
return normalized.slice(0, -match[0].length);
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/matching/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAgBjD,MAAM,iBAAiB,GAAG;IACtB,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY;IACxE,SAAS,EAAE,WAAW,EAAE,OAAO;IAC/B,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ;IAC/C,SAAS;CACZ,CAAC;AAEF,MAAM,kBAAkB,GAA2B;IAC/C,WAAW,EAAE,WAAW;IACxB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,YAAY,EAAE,MAAM;IACpB,MAAM,EAAE,MAAM;IACd,WAAW,EAAE,SAAS;IACtB,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,UAAU;IACtB,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,UAAU;IACtB,YAAY,EAAE,YAAY;IAC1B,OAAO,EAAE,OAAO;CACnB,CAAC;AAEF,MAAM,gBAAgB,GAA2B;IAC7C,WAAW,EAAE,QAAQ;IACrB,QAAQ,EAAE,QAAQ;IAClB,YAAY,EAAE,OAAO;IACrB,MAAM,EAAE,OAAO;CAClB,CAAC;AAEF,MAAM,eAAe,GAA4B;IAC7C,CAAC,UAAU,EAAE,QAAQ,CAAC;IACtB,CAAC,UAAU,EAAE,QAAQ,CAAC;IACtB,CAAC,OAAO,EAAE,KAAK,CAAC;IAChB,CAAC,sBAAsB,EAAE,UAAU,CAAC;IACpC,CAAC,SAAS,EAAE,OAAO,CAAC;IACpB,CAAC,QAAQ,EAAE,MAAM,CAAC;IAClB,CAAC,cAAc,EAAE,SAAS,CAAC;IAC3B,CAAC,YAAY,EAAE,UAAU,CAAC;IAC1B,CAAC,UAAU,EAAE,QAAQ,CAAC;IACtB,CAAC,WAAW,EAAE,QAAQ,CAAC;IACvB,CAAC,OAAO,EAAE,KAAK,CAAC;IAChB,CAAC,SAAS,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACpH,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC9C,MAAM,kBAAkB,GAAG,CAAC,GAAG,iBAAiB,EAAE,GAAG,eAAe,CAAC,CAAC;AACtE,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEnF,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,CACvC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CACrE,CAAC;AAEF,MAAM,YAAY,GAAG,+BAA+B,CAAC;AACrD,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AACxD,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEzD,MAAM,YAAY,GAA4B;IAC1C,CAAC,SAAS,EAAE,WAAW,CAAC;IACxB,CAAC,SAAS,EAAE,KAAK,CAAC;IAClB,CAAC,aAAa,EAAE,eAAe,CAAC;IAChC,CAAC,YAAY,EAAE,QAAQ,CAAC;IACxB,CAAC,WAAW,EAAE,YAAY,CAAC;IAC3B,CAAC,6CAA6C,EAAE,OAAO,CAAC;CAC3D,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC5C,MAAM,GAAG,GAAG,KAAK,CAAC;IAClB,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEnC,IAAI,YAAgC,CAAC;IACrC,IAAI,SAA6B,CAAC;IAClC,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACrC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChC,YAAY,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAC7C,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3B,MAAM;QACV,CAAC;IACL,CAAC;IAED,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAE7F,IAAI,QAA4B,CAAC;IACjC,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACnD,IAAI,WAAW,EAAE,CAAC;QACd,QAAQ,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;SAAM,CAAC;QACJ,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACjD,IAAI,UAAU,EAAE,CAAC;YACb,QAAQ,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,CAAC;IACL,CAAC;IAED,IAAI,WAA+B,CAAC;IACpC,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAChD,IAAI,YAAY,EAAE,CAAC;QACf,WAAW,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,CAAC;SAAM,CAAC;QACJ,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE,CAAC;YACb,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IAED,IAAI,QAA4B,CAAC;IACjC,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxC,IAAI,SAAS,EAAE,CAAC;QACZ,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,WAA+B,CAAC;IACpC,IAAI,WAA+B,CAAC;IACpC,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IACxD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;YAChB,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9B,WAAW,GAAG,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACJ,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;QACL,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvG,CAAC;IACL,CAAC;IAED,IAAI,UAA8B,CAAC;IACnC,IAAI,SAAS;QAAE,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;YAC9C,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClB,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM;YACV,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,QAA4B,CAAC;IACjC,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM;QACV,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEtD,OAAO,MAAM,CAAC,MAAM,CAChB,EAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAoB,EAC/C,WAAW,CAAC,EAAC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAC,CAAC,CAC/G,CAAC;AACN,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,UAAkB;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACxD,IAAI,OAAO;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACtD,IAAI,MAAM;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,iBAAiB,GAAG,4EAA4E,CAAC;AAEvG,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACpD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAClD,IAAI,KAAK;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,YAAY,GAAG,0CAA0C,CAAC;AAEhE,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7C,IAAI,KAAK;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,cAAc,GAAG,oBAAoB,CAAC;AAE5C,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/C,IAAI,KAAK;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACxD,OAAO,SAAS,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notification/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notification/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const NotificationServiceToken: unique symbol;
|
|
2
|
+
export declare class NotificationTopic {
|
|
3
|
+
static userKey(orgId: string, userId: string): string;
|
|
4
|
+
static userApp(orgId: string, userId: string, appSlug?: string): string;
|
|
5
|
+
static publishKey(orgId: string, userId?: string, appSlug?: string): string;
|
|
6
|
+
static broadcastApp(orgId: string, appSlug: string): string;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/notification/service.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,eAAgC,CAAC;AAEtE,qBAAa,iBAAiB;IAE1B,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAI5C,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAY;IAInE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAc,EAAE,OAAO,GAAE,MAAc;IAIhF,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAGrD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const NotificationServiceToken = Symbol("NotificationService");
|
|
2
|
+
export class NotificationTopic {
|
|
3
|
+
static userKey(orgId, userId) {
|
|
4
|
+
return `${orgId}.${userId}`;
|
|
5
|
+
}
|
|
6
|
+
static userApp(orgId, userId, appSlug = '*') {
|
|
7
|
+
return `org.${orgId}.user.${userId}.app.${appSlug}`;
|
|
8
|
+
}
|
|
9
|
+
static publishKey(orgId, userId = 'all', appSlug = 'all') {
|
|
10
|
+
return `org.${orgId}.user.${userId}.app.${appSlug}`;
|
|
11
|
+
}
|
|
12
|
+
static broadcastApp(orgId, appSlug) {
|
|
13
|
+
return `org.${orgId}.user.all.app.${appSlug}`;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/notification/service.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAEtE,MAAM,OAAO,iBAAiB;IAE1B,MAAM,CAAC,OAAO,CAAC,KAAa,EAAE,MAAc;QACxC,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,KAAa,EAAE,MAAc,EAAE,UAAkB,GAAG;QAC/D,OAAO,OAAO,KAAK,SAAS,MAAM,QAAQ,OAAO,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,KAAa,EAAE,SAAiB,KAAK,EAAE,UAAkB,KAAK;QAC5E,OAAO,OAAO,KAAK,SAAS,MAAM,QAAQ,OAAO,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,KAAa,EAAE,OAAe;QAC9C,OAAO,OAAO,KAAK,iBAAiB,OAAO,EAAE,CAAC;IAClD,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/notification/store.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,eAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/notification/store.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { NotificationEvent, NotificationSeverity } from '@holokai/holo-types/notification';
|
|
2
|
+
import { NotificationEventType } from "@holokai/holo-types/notification";
|
|
3
|
+
import type { Auth } from '@holokai/holo-types/api';
|
|
4
|
+
import type { HoloWorkerRequest } from '@holokai/holo-types/worker';
|
|
5
|
+
import { ProviderDoneEvent, ProviderErrorEvent, WorkerResponseEnvelope } from "@holokai/holo-types";
|
|
6
|
+
export declare class NotificationEventFactory {
|
|
7
|
+
static fromAuthAndRequest(type: NotificationEventType, auth: Auth, request: HoloWorkerRequest, message: string, payload?: any, severity?: NotificationSeverity): NotificationEvent;
|
|
8
|
+
static fromRequest(type: NotificationEventType, request: HoloWorkerRequest, message: string, payload?: any, severity?: NotificationSeverity): NotificationEvent;
|
|
9
|
+
static fromProviderEvent(envelope: WorkerResponseEnvelope, event: ProviderDoneEvent | ProviderErrorEvent): NotificationEvent;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/notification/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAC,qBAAqB,EAAC,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAGlE,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAqB,sBAAsB,EAAC,MAAM,qBAAqB,CAAC;AAErH,qBAAa,wBAAwB;IACjC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAE,oBAA6B,GAAG,iBAAiB;IAoB1L,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAE,oBAA6B,GAAG,iBAAiB;IAkBvK,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,sBAAsB,EAAE,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,GAAG,iBAAiB;CAqB/H"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { NotificationEventType } from "@holokai/holo-types/notification";
|
|
2
|
+
import { pickDefined } from "../core";
|
|
3
|
+
import { v4 as uuidv4 } from "uuid";
|
|
4
|
+
import { ProviderEventType } from "@holokai/holo-types";
|
|
5
|
+
export class NotificationEventFactory {
|
|
6
|
+
static fromAuthAndRequest(type, auth, request, message, payload, severity = "info") {
|
|
7
|
+
const { organizationId, application, userId } = auth;
|
|
8
|
+
const { requestId, threadId, branchId } = request;
|
|
9
|
+
const appSlug = application?.url_slug;
|
|
10
|
+
return pickDefined({
|
|
11
|
+
id: uuidv4(),
|
|
12
|
+
ts: Date.now(),
|
|
13
|
+
organizationId,
|
|
14
|
+
userId,
|
|
15
|
+
appSlug,
|
|
16
|
+
type,
|
|
17
|
+
severity,
|
|
18
|
+
message,
|
|
19
|
+
requestId,
|
|
20
|
+
payload,
|
|
21
|
+
threadId: threadId,
|
|
22
|
+
branchId: branchId,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
static fromRequest(type, request, message, payload, severity = "info") {
|
|
26
|
+
const { organizationId, userId, appSlug, requestId, threadId, branchId } = request;
|
|
27
|
+
return pickDefined({
|
|
28
|
+
id: uuidv4(),
|
|
29
|
+
ts: Date.now(),
|
|
30
|
+
organizationId,
|
|
31
|
+
userId,
|
|
32
|
+
appSlug,
|
|
33
|
+
type,
|
|
34
|
+
severity,
|
|
35
|
+
message,
|
|
36
|
+
requestId,
|
|
37
|
+
payload,
|
|
38
|
+
threadId: threadId,
|
|
39
|
+
branchId: branchId,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
static fromProviderEvent(envelope, event) {
|
|
43
|
+
return pickDefined({
|
|
44
|
+
type: NotificationEventType.RESPONSE_COMPLETED,
|
|
45
|
+
id: uuidv4(),
|
|
46
|
+
ts: Date.now(),
|
|
47
|
+
organizationId: envelope.organization_id,
|
|
48
|
+
userId: envelope.user_id,
|
|
49
|
+
appSlug: envelope.application?.url_slug,
|
|
50
|
+
severity: event.type === ProviderEventType.ERROR ? 'error' : 'info',
|
|
51
|
+
message: NotificationEventType.RESPONSE_COMPLETED,
|
|
52
|
+
requestId: envelope.request_id,
|
|
53
|
+
payload: pickDefined({
|
|
54
|
+
status: event.type === ProviderEventType.DONE ? 'success' : 'error',
|
|
55
|
+
eventType: event.type,
|
|
56
|
+
error: event.type === ProviderEventType.ERROR ? event.error : undefined
|
|
57
|
+
}),
|
|
58
|
+
threadId: envelope.thread_id,
|
|
59
|
+
branchId: envelope.branch_id
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/notification/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,qBAAqB,EAAC,MAAM,kCAAkC,CAAC;AAGvE,OAAO,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AACpC,OAAO,EAAC,EAAE,IAAI,MAAM,EAAC,MAAM,MAAM,CAAC;AAClC,OAAO,EAAwC,iBAAiB,EAAyB,MAAM,qBAAqB,CAAC;AAErH,MAAM,OAAO,wBAAwB;IACjC,MAAM,CAAC,kBAAkB,CAAC,IAA2B,EAAE,IAAU,EAAE,OAA0B,EAAE,OAAe,EAAE,OAAa,EAAE,WAAiC,MAAM;QAClK,MAAM,EAAC,cAAc,EAAE,WAAW,EAAE,MAAM,EAAC,GAAG,IAAI,CAAC;QACnD,MAAM,EAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAC,GAAG,OAAO,CAAC;QAChD,MAAM,OAAO,GAAG,WAAW,EAAE,QAAQ,CAAC;QACtC,OAAO,WAAW,CAAC;YACf,EAAE,EAAE,MAAM,EAAE;YACZ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,cAAc;YACd,MAAM;YACN,OAAO;YACP,IAAI;YACJ,QAAQ;YACR,OAAO;YACP,SAAS;YACT,OAAO;YACP,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,QAAQ;SACrB,CAAsB,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAA2B,EAAE,OAA0B,EAAE,OAAe,EAAE,OAAa,EAAE,WAAiC,MAAM;QAC/I,MAAM,EAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAC,GAAG,OAAO,CAAC;QACjF,OAAO,WAAW,CAAC;YACf,EAAE,EAAE,MAAM,EAAE;YACZ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,cAAc;YACd,MAAM;YACN,OAAO;YACP,IAAI;YACJ,QAAQ;YACR,OAAO;YACP,SAAS;YACT,OAAO;YACP,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,QAAQ;SACrB,CAAsB,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,QAAgC,EAAE,KAA6C;QAEpG,OAAO,WAAW,CAAC;YACf,IAAI,EAAE,qBAAqB,CAAC,kBAAkB;YAC9C,EAAE,EAAE,MAAM,EAAE;YACZ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,cAAc,EAAE,QAAQ,CAAC,eAAe;YACxC,MAAM,EAAE,QAAQ,CAAC,OAAO;YACxB,OAAO,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ;YACvC,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YACnE,OAAO,EAAE,qBAAqB,CAAC,kBAAkB;YACjD,SAAS,EAAE,QAAQ,CAAC,UAAU;YAC9B,OAAO,EAAE,WAAW,CAAC;gBACjB,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;gBACnE,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aAC1E,CAAC;YACF,QAAQ,EAAE,QAAQ,CAAC,SAAS;YAC5B,QAAQ,EAAE,QAAQ,CAAC,SAAS;SAC/B,CAAsB,CAAC;IAC5B,CAAC;CACJ"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { IPlugin, PluginContext, PluginManifest, PluginState, PluginType } from "@holokai/holo-types/plugin";
|
|
2
|
+
import { ClassLogger } from "../core";
|
|
3
|
+
import type { CostResult, PricingSheetModel } from "@holokai/holo-types/entities";
|
|
4
|
+
export declare abstract class BasePlugin extends ClassLogger implements IPlugin {
|
|
5
|
+
id?: string;
|
|
6
|
+
abstract readonly manifest: PluginManifest;
|
|
7
|
+
private _context;
|
|
8
|
+
protected _state: PluginState;
|
|
9
|
+
get state(): PluginState;
|
|
10
|
+
get name(): string;
|
|
11
|
+
get type(): PluginType;
|
|
12
|
+
get family(): string;
|
|
13
|
+
get version(): string;
|
|
14
|
+
protected get pluginContext(): PluginContext;
|
|
15
|
+
getState(): PluginState;
|
|
16
|
+
initialize(context: PluginContext): Promise<void>;
|
|
17
|
+
destroy(): Promise<void>;
|
|
18
|
+
calculateCost(tokens: Record<string, number>, pricing: PricingSheetModel): CostResult;
|
|
19
|
+
protected abstract calculateExtraCosts(tokens: Record<string, number>, pricing: PricingSheetModel): {
|
|
20
|
+
total: number;
|
|
21
|
+
detail: Record<string, {
|
|
22
|
+
tokens: number;
|
|
23
|
+
cost: number;
|
|
24
|
+
}>;
|
|
25
|
+
};
|
|
26
|
+
protected abstract onInitialize(context: PluginContext): Promise<void>;
|
|
27
|
+
protected abstract onDestroy(): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/plugin/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAC,MAAM,4BAA4B,CAAC;AAE3G,OAAO,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAC,UAAU,EAAE,iBAAiB,EAAC,MAAM,8BAA8B,CAAC;AAGhF,8BAAsB,UAAW,SAAQ,WAAY,YAAW,OAAO;IACnE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAE3C,OAAO,CAAC,QAAQ,CAA4B;IAC5C,SAAS,CAAC,MAAM,EAAE,WAAW,CAA6B;IAE1D,IAAI,KAAK,IAAI,WAAW,CAEvB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,SAAS,KAAK,aAAa,IAAI,aAAa,CAS3C;IAED,QAAQ,IAAI,WAAW;IAIjB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC9B,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,iBAAiB,GAAG,UAAU;IA8BrF,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,EAAE,iBAAiB,GAC3B;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE;IAE9E,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtE,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;CAChD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { PluginState } from "@holokai/holo-types/plugin";
|
|
2
|
+
import { PluginError, PluginErrorCode } from "./errors";
|
|
3
|
+
import { ClassLogger } from "../core";
|
|
4
|
+
export class BasePlugin extends ClassLogger {
|
|
5
|
+
id;
|
|
6
|
+
_context;
|
|
7
|
+
_state = PluginState.UNINITIALIZED;
|
|
8
|
+
get state() {
|
|
9
|
+
return this._state;
|
|
10
|
+
}
|
|
11
|
+
get name() {
|
|
12
|
+
return this.manifest.name;
|
|
13
|
+
}
|
|
14
|
+
get type() {
|
|
15
|
+
return this.manifest.pluginType;
|
|
16
|
+
}
|
|
17
|
+
get family() {
|
|
18
|
+
return this.manifest.family ?? this.manifest.name;
|
|
19
|
+
}
|
|
20
|
+
get version() {
|
|
21
|
+
return this.manifest.version;
|
|
22
|
+
}
|
|
23
|
+
get pluginContext() {
|
|
24
|
+
if (!this._context) {
|
|
25
|
+
throw new PluginError('Plugin context is not available. Initialize the plugin first.', PluginErrorCode.INVALID_STATE, this.manifest.name);
|
|
26
|
+
}
|
|
27
|
+
return this._context;
|
|
28
|
+
}
|
|
29
|
+
getState() {
|
|
30
|
+
return this._state;
|
|
31
|
+
}
|
|
32
|
+
async initialize(context) {
|
|
33
|
+
const logger = this.mlog(this.initialize);
|
|
34
|
+
if (this._state !== PluginState.UNINITIALIZED) {
|
|
35
|
+
throw new PluginError(`Cannot initialize plugin in state ${this._state}`, PluginErrorCode.INITIALIZATION_FAILED, this.manifest.name);
|
|
36
|
+
}
|
|
37
|
+
this._state = PluginState.INITIALIZING;
|
|
38
|
+
this._context = context;
|
|
39
|
+
try {
|
|
40
|
+
logger.debug('Initializing plugin');
|
|
41
|
+
await this.onInitialize(context);
|
|
42
|
+
this._state = PluginState.READY;
|
|
43
|
+
logger.info('Plugin initialized successfully');
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
this._state = PluginState.ERROR;
|
|
47
|
+
logger.error('Plugin initialization failed', { error });
|
|
48
|
+
throw new PluginError('Failed to initialize plugin', PluginErrorCode.INITIALIZATION_FAILED, this.manifest.name, error);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async destroy() {
|
|
52
|
+
const logger = this.mlog(this.destroy);
|
|
53
|
+
if (this._state === PluginState.DESTROYED) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (this._state === PluginState.UNINITIALIZED) {
|
|
57
|
+
this._state = PluginState.DESTROYED;
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
this._state = PluginState.DESTROYING;
|
|
61
|
+
try {
|
|
62
|
+
logger.info('Destroying plugin');
|
|
63
|
+
await this.onDestroy();
|
|
64
|
+
this._state = PluginState.DESTROYED;
|
|
65
|
+
this._context = undefined;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
this._state = PluginState.ERROR;
|
|
69
|
+
try {
|
|
70
|
+
logger.error('Plugin destruction failed', { error });
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
console.error(`[${this.manifest.name}] Plugin destruction failed`, error);
|
|
74
|
+
}
|
|
75
|
+
throw new PluginError('Failed to destroy plugin', PluginErrorCode.DESTRUCTION_FAILED, this.manifest.name, error);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
calculateCost(tokens, pricing) {
|
|
79
|
+
let inputRate = Number(pricing.input_cost);
|
|
80
|
+
let outputRate = Number(pricing.output_cost);
|
|
81
|
+
if (pricing.context_threshold && pricing.extended_input_cost && pricing.extended_output_cost) {
|
|
82
|
+
const totalInput = Object.entries(tokens)
|
|
83
|
+
.filter(([k]) => k !== 'output')
|
|
84
|
+
.reduce((sum, [, v]) => sum + v, 0);
|
|
85
|
+
if (totalInput > pricing.context_threshold) {
|
|
86
|
+
inputRate = Number(pricing.extended_input_cost);
|
|
87
|
+
outputRate = Number(pricing.extended_output_cost);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const inputCost = (tokens.input ?? 0) * inputRate;
|
|
91
|
+
const outputCost = (tokens.output ?? 0) * outputRate;
|
|
92
|
+
const extraCosts = this.calculateExtraCosts(tokens, pricing);
|
|
93
|
+
return {
|
|
94
|
+
input_cost: inputCost,
|
|
95
|
+
output_cost: outputCost,
|
|
96
|
+
total_cost: inputCost + outputCost + extraCosts.total,
|
|
97
|
+
detail: {
|
|
98
|
+
input: { tokens: tokens.input ?? 0, cost: inputCost },
|
|
99
|
+
output: { tokens: tokens.output ?? 0, cost: outputCost },
|
|
100
|
+
...extraCosts.detail,
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/plugin/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PluginErrorCode } from "@holokai/holo-types/plugin";
|
|
2
|
+
export { PluginErrorCode };
|
|
3
|
+
export declare class PluginError extends Error {
|
|
4
|
+
readonly code: string;
|
|
5
|
+
readonly plugin?: string | undefined;
|
|
6
|
+
readonly details?: unknown | undefined;
|
|
7
|
+
constructor(message: string, code: string, plugin?: string | undefined, details?: unknown | undefined);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/plugin/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAC,eAAe,EAAC,CAAC;AAEzB,qBAAa,WAAY,SAAQ,KAAK;aAGd,IAAI,EAAE,MAAM;aACZ,MAAM,CAAC,EAAE,MAAM;aACf,OAAO,CAAC,EAAE,OAAO;gBAHjC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,OAAO,CAAC,EAAE,OAAO,YAAA;CAKxC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PluginErrorCode } from "@holokai/holo-types/plugin";
|
|
2
|
+
export { PluginErrorCode };
|
|
3
|
+
export class PluginError extends Error {
|
|
4
|
+
code;
|
|
5
|
+
plugin;
|
|
6
|
+
details;
|
|
7
|
+
constructor(message, code, plugin, details) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.plugin = plugin;
|
|
11
|
+
this.details = details;
|
|
12
|
+
this.name = 'PluginError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/plugin/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAC,eAAe,EAAC,CAAC;AAEzB,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGd;IACA;IACA;IAJpB,YACI,OAAe,EACC,IAAY,EACZ,MAAe,EACf,OAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAS;QACf,YAAO,GAAP,OAAO,CAAU;QAGjC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IProviderPlugin, PluginContext } from '@holokai/holo-types/plugin';
|
|
2
|
+
export interface LoadPluginOptions {
|
|
3
|
+
context?: PluginContext;
|
|
4
|
+
skipInitialize?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function createMockPluginContext(): PluginContext;
|
|
7
|
+
export declare function discoverPlugins(nodeModulesDir?: string): Promise<string[]>;
|
|
8
|
+
export declare function familyFromPackage(packageName: string): string;
|
|
9
|
+
export declare function loadPlugin(family: string, opts?: LoadPluginOptions): Promise<IProviderPlugin>;
|
|
10
|
+
export declare function loadPluginFromPackage(packageName: string, opts?: LoadPluginOptions): Promise<IProviderPlugin>;
|
|
11
|
+
export declare function loadAllPlugins(nodeModulesDir?: string, opts?: LoadPluginOptions): Promise<Map<string, IProviderPlugin>>;
|
|
12
|
+
export declare function getLoadedPlugins(): Map<string, IProviderPlugin>;
|
|
13
|
+
export declare function clearPluginCache(): void;
|
|
14
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugin/loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,eAAe,EAAE,aAAa,EAAC,MAAM,4BAA4B,CAAC;AAK/E,MAAM,WAAW,iBAAiB;IAC9B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,uBAAuB,IAAI,aAAa,CAavD;AAED,wBAAsB,eAAe,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAWhF;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAMnG;AAED,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC,CAcnH;AAED,wBAAsB,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAM7H;AAED,wBAAgB,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAE/D;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
const pluginCache = new Map();
|
|
4
|
+
export function createMockPluginContext() {
|
|
5
|
+
const noop = () => {
|
|
6
|
+
};
|
|
7
|
+
const noopLogger = {
|
|
8
|
+
level: 'silent',
|
|
9
|
+
info: noop,
|
|
10
|
+
warn: noop,
|
|
11
|
+
error: noop,
|
|
12
|
+
debug: noop,
|
|
13
|
+
verbose: noop,
|
|
14
|
+
child: () => noopLogger,
|
|
15
|
+
};
|
|
16
|
+
return { logger: noopLogger };
|
|
17
|
+
}
|
|
18
|
+
export async function discoverPlugins(nodeModulesDir) {
|
|
19
|
+
const scopePath = path.resolve(nodeModulesDir ?? 'node_modules', '@holokai');
|
|
20
|
+
try {
|
|
21
|
+
const entries = await fs.readdir(scopePath, { withFileTypes: true });
|
|
22
|
+
return entries
|
|
23
|
+
.filter(d => (d.isDirectory() || d.isSymbolicLink()) && d.name.startsWith('holo-provider-'))
|
|
24
|
+
.map(d => `@holokai/${d.name}`);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function familyFromPackage(packageName) {
|
|
31
|
+
const match = packageName.match(/@holokai\/holo-provider-(.+)/);
|
|
32
|
+
return match?.[1] ?? packageName;
|
|
33
|
+
}
|
|
34
|
+
export async function loadPlugin(family, opts) {
|
|
35
|
+
const cached = pluginCache.get(family);
|
|
36
|
+
if (cached)
|
|
37
|
+
return cached;
|
|
38
|
+
const packageName = `@holokai/holo-provider-${family}`;
|
|
39
|
+
return loadPluginFromPackage(packageName, opts);
|
|
40
|
+
}
|
|
41
|
+
export async function loadPluginFromPackage(packageName, opts) {
|
|
42
|
+
const family = familyFromPackage(packageName);
|
|
43
|
+
const cached = pluginCache.get(family);
|
|
44
|
+
if (cached)
|
|
45
|
+
return cached;
|
|
46
|
+
const mod = await import(packageName);
|
|
47
|
+
const plugin = mod.default;
|
|
48
|
+
if (!opts?.skipInitialize && plugin.getState() !== 'READY') {
|
|
49
|
+
await plugin.initialize(opts?.context ?? createMockPluginContext());
|
|
50
|
+
}
|
|
51
|
+
pluginCache.set(family, plugin);
|
|
52
|
+
return plugin;
|
|
53
|
+
}
|
|
54
|
+
export async function loadAllPlugins(nodeModulesDir, opts) {
|
|
55
|
+
const packages = await discoverPlugins(nodeModulesDir);
|
|
56
|
+
for (const pkg of packages) {
|
|
57
|
+
await loadPluginFromPackage(pkg, opts);
|
|
58
|
+
}
|
|
59
|
+
return getLoadedPlugins();
|
|
60
|
+
}
|
|
61
|
+
export function getLoadedPlugins() {
|
|
62
|
+
return new Map(pluginCache);
|
|
63
|
+
}
|
|
64
|
+
export function clearPluginCache() {
|
|
65
|
+
pluginCache.clear();
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugin/loader.ts"],"names":[],"mappings":"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"}
|