dpth 0.1.0

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.
@@ -0,0 +1,510 @@
1
+ /**
2
+ * dpth.io Economics Engine
3
+ *
4
+ * The credit system that makes agents want to contribute.
5
+ * Every contribution earns credits, every query costs credits.
6
+ * Designed for future token migration without rebuilding.
7
+ *
8
+ * Core concepts:
9
+ * - Credits are minted on contribution (storage, compute, GPU)
10
+ * - Credits are burned on consumption (queries, inference)
11
+ * - Tier multipliers reward long-term contributors
12
+ * - Rate limits prevent abuse without killing free access
13
+ * - Migration snapshots enable future token claims
14
+ */
15
+ import { randomUUID } from 'crypto';
16
+ // ─── Default Configuration ───────────────────────────
17
+ export const DEFAULT_RATES = {
18
+ // Earning
19
+ storagePerMbPerDay: 1,
20
+ computePerTask: 10,
21
+ gpuPerInferenceTask: 25,
22
+ gpuPer1kTokens: 5,
23
+ gpuPerImage: 15,
24
+ storageProofBonus: 5,
25
+ trainingRoundBonus: 50,
26
+ // Spending
27
+ queryBaseCost: 1,
28
+ inferenceBaseCost: 10,
29
+ inferencePer1kTokens: 2,
30
+ // Tier multipliers
31
+ tierMultipliers: {
32
+ newcomer: 1.0,
33
+ contributor: 1.2,
34
+ trusted: 1.5,
35
+ elite: 2.0,
36
+ legendary: 3.0,
37
+ },
38
+ };
39
+ export const TIER_LIMITS = {
40
+ newcomer: {
41
+ queriesPerHour: 10,
42
+ inferencePerHour: 5,
43
+ maxTransactionSize: 100,
44
+ canTrain: false,
45
+ canTransfer: false,
46
+ },
47
+ contributor: {
48
+ queriesPerHour: 50,
49
+ inferencePerHour: 20,
50
+ maxTransactionSize: 500,
51
+ canTrain: false,
52
+ canTransfer: false,
53
+ },
54
+ trusted: {
55
+ queriesPerHour: 200,
56
+ inferencePerHour: 100,
57
+ maxTransactionSize: 2000,
58
+ canTrain: true,
59
+ canTransfer: true,
60
+ },
61
+ elite: {
62
+ queriesPerHour: 1000,
63
+ inferencePerHour: 500,
64
+ maxTransactionSize: 10000,
65
+ canTrain: true,
66
+ canTransfer: true,
67
+ },
68
+ legendary: {
69
+ queriesPerHour: Infinity,
70
+ inferencePerHour: Infinity,
71
+ maxTransactionSize: Infinity,
72
+ canTrain: true,
73
+ canTransfer: true,
74
+ },
75
+ };
76
+ const ledger = {
77
+ transactions: [],
78
+ balances: new Map(),
79
+ supply: {
80
+ totalMinted: 0,
81
+ totalBurned: 0,
82
+ totalCirculating: 0,
83
+ totalTransactions: 0,
84
+ velocity24h: 0,
85
+ giniCoefficient: 0,
86
+ },
87
+ rates: { ...DEFAULT_RATES },
88
+ recentTimestamps: [],
89
+ };
90
+ // ─── Balance Management ──────────────────────────────
91
+ function ensureBalance(agentId) {
92
+ let balance = ledger.balances.get(agentId);
93
+ if (!balance) {
94
+ const now = new Date().toISOString();
95
+ balance = {
96
+ agentId,
97
+ balance: 0,
98
+ totalEarned: 0,
99
+ totalSpent: 0,
100
+ earningsByCategory: {},
101
+ spendingByCategory: {},
102
+ transactionCount: 0,
103
+ claimableCredits: 0,
104
+ rateLimit: {
105
+ queriesRemaining: TIER_LIMITS.newcomer.queriesPerHour,
106
+ inferenceRemaining: TIER_LIMITS.newcomer.inferencePerHour,
107
+ windowResetAt: new Date(Date.now() + 3600000).toISOString(),
108
+ tier: 'newcomer',
109
+ },
110
+ lastActivity: now,
111
+ createdAt: now,
112
+ };
113
+ ledger.balances.set(agentId, balance);
114
+ }
115
+ return balance;
116
+ }
117
+ function updateVelocity() {
118
+ const cutoff = Date.now() - 24 * 60 * 60 * 1000;
119
+ ledger.recentTimestamps = ledger.recentTimestamps.filter(t => t > cutoff);
120
+ ledger.supply.velocity24h = ledger.recentTimestamps.length;
121
+ }
122
+ function updateGini() {
123
+ const balances = Array.from(ledger.balances.values())
124
+ .map(b => b.balance)
125
+ .sort((a, b) => a - b);
126
+ const n = balances.length;
127
+ if (n === 0) {
128
+ ledger.supply.giniCoefficient = 0;
129
+ return;
130
+ }
131
+ const sum = balances.reduce((a, b) => a + b, 0);
132
+ if (sum === 0) {
133
+ ledger.supply.giniCoefficient = 0;
134
+ return;
135
+ }
136
+ let cumulativeSum = 0;
137
+ let giniNumerator = 0;
138
+ for (let i = 0; i < n; i++) {
139
+ cumulativeSum += balances[i];
140
+ giniNumerator += (2 * (i + 1) - n - 1) * balances[i];
141
+ }
142
+ ledger.supply.giniCoefficient = Math.round((giniNumerator / (n * sum)) * 1000) / 1000;
143
+ }
144
+ // ─── Core Operations ─────────────────────────────────
145
+ /**
146
+ * Earn credits for a contribution.
147
+ * Amount is multiplied by the agent's tier multiplier.
148
+ */
149
+ export function earnCredits(agentId, amount, reason, category, options) {
150
+ if (amount <= 0)
151
+ throw new Error('Earn amount must be positive');
152
+ const balance = ensureBalance(agentId);
153
+ const multiplier = options?.tier
154
+ ? (ledger.rates.tierMultipliers[options.tier] || 1)
155
+ : 1;
156
+ const finalAmount = Math.round(amount * multiplier * 100) / 100;
157
+ balance.balance += finalAmount;
158
+ balance.totalEarned += finalAmount;
159
+ balance.claimableCredits += finalAmount;
160
+ balance.earningsByCategory[category] = (balance.earningsByCategory[category] || 0) + finalAmount;
161
+ balance.transactionCount++;
162
+ balance.lastActivity = new Date().toISOString();
163
+ ledger.supply.totalMinted += finalAmount;
164
+ ledger.supply.totalCirculating += finalAmount;
165
+ const tx = {
166
+ id: randomUUID(),
167
+ agentId,
168
+ action: 'earn',
169
+ amount: finalAmount,
170
+ reason,
171
+ category,
172
+ reference: options?.reference,
173
+ balanceAfter: balance.balance,
174
+ timestamp: new Date().toISOString(),
175
+ };
176
+ ledger.transactions.push(tx);
177
+ ledger.supply.totalTransactions++;
178
+ ledger.recentTimestamps.push(Date.now());
179
+ return tx;
180
+ }
181
+ /**
182
+ * Spend credits for a service (query, inference, etc).
183
+ * Throws if insufficient balance.
184
+ */
185
+ export function spendCredits(agentId, amount, reason, category, options) {
186
+ if (amount <= 0)
187
+ throw new Error('Spend amount must be positive');
188
+ const balance = ensureBalance(agentId);
189
+ if (balance.balance < amount) {
190
+ throw new InsufficientCreditsError(agentId, balance.balance, amount);
191
+ }
192
+ balance.balance -= amount;
193
+ balance.totalSpent += amount;
194
+ balance.spendingByCategory[category] = (balance.spendingByCategory[category] || 0) + amount;
195
+ balance.transactionCount++;
196
+ balance.lastActivity = new Date().toISOString();
197
+ ledger.supply.totalBurned += amount;
198
+ ledger.supply.totalCirculating -= amount;
199
+ const tx = {
200
+ id: randomUUID(),
201
+ agentId,
202
+ action: 'spend',
203
+ amount,
204
+ reason,
205
+ category,
206
+ reference: options?.reference,
207
+ balanceAfter: balance.balance,
208
+ timestamp: new Date().toISOString(),
209
+ };
210
+ ledger.transactions.push(tx);
211
+ ledger.supply.totalTransactions++;
212
+ ledger.recentTimestamps.push(Date.now());
213
+ return tx;
214
+ }
215
+ /**
216
+ * Transfer credits between agents.
217
+ * Requires trusted tier or above.
218
+ */
219
+ export function transferCredits(fromAgentId, toAgentId, amount, reason, fromTier = 'newcomer') {
220
+ const limits = TIER_LIMITS[fromTier] || TIER_LIMITS.newcomer;
221
+ if (!limits.canTransfer) {
222
+ throw new Error(`Tier '${fromTier}' cannot transfer credits. Requires trusted or above.`);
223
+ }
224
+ if (amount > limits.maxTransactionSize) {
225
+ throw new Error(`Transfer exceeds max transaction size for tier '${fromTier}': ${limits.maxTransactionSize}`);
226
+ }
227
+ const fromBalance = ensureBalance(fromAgentId);
228
+ if (fromBalance.balance < amount) {
229
+ throw new InsufficientCreditsError(fromAgentId, fromBalance.balance, amount);
230
+ }
231
+ // Debit sender
232
+ fromBalance.balance -= amount;
233
+ fromBalance.totalSpent += amount;
234
+ fromBalance.spendingByCategory['transfer'] = (fromBalance.spendingByCategory['transfer'] || 0) + amount;
235
+ fromBalance.transactionCount++;
236
+ fromBalance.lastActivity = new Date().toISOString();
237
+ const fromTx = {
238
+ id: randomUUID(),
239
+ agentId: fromAgentId,
240
+ action: 'transfer',
241
+ amount,
242
+ reason,
243
+ category: 'transfer',
244
+ toAgentId,
245
+ balanceAfter: fromBalance.balance,
246
+ timestamp: new Date().toISOString(),
247
+ };
248
+ // Credit receiver
249
+ const toBalance = ensureBalance(toAgentId);
250
+ toBalance.balance += amount;
251
+ toBalance.totalEarned += amount;
252
+ toBalance.earningsByCategory['transfer'] = (toBalance.earningsByCategory['transfer'] || 0) + amount;
253
+ toBalance.transactionCount++;
254
+ toBalance.lastActivity = new Date().toISOString();
255
+ const toTx = {
256
+ id: randomUUID(),
257
+ agentId: toAgentId,
258
+ action: 'earn',
259
+ amount,
260
+ reason: `Transfer from ${fromAgentId}: ${reason}`,
261
+ category: 'transfer',
262
+ reference: fromTx.id,
263
+ balanceAfter: toBalance.balance,
264
+ timestamp: new Date().toISOString(),
265
+ };
266
+ ledger.transactions.push(fromTx, toTx);
267
+ ledger.supply.totalTransactions += 2;
268
+ ledger.recentTimestamps.push(Date.now(), Date.now());
269
+ return { fromTx, toTx };
270
+ }
271
+ /**
272
+ * Apply a penalty (bad behavior, failed proofs, etc).
273
+ */
274
+ export function penalizeAgent(agentId, amount, reason, reference) {
275
+ const balance = ensureBalance(agentId);
276
+ const actualPenalty = Math.min(amount, balance.balance);
277
+ balance.balance -= actualPenalty;
278
+ balance.claimableCredits = Math.max(0, balance.claimableCredits - amount);
279
+ balance.transactionCount++;
280
+ balance.lastActivity = new Date().toISOString();
281
+ ledger.supply.totalBurned += actualPenalty;
282
+ ledger.supply.totalCirculating -= actualPenalty;
283
+ const tx = {
284
+ id: randomUUID(),
285
+ agentId,
286
+ action: 'penalty',
287
+ amount,
288
+ reason,
289
+ category: 'penalty',
290
+ reference,
291
+ balanceAfter: balance.balance,
292
+ timestamp: new Date().toISOString(),
293
+ };
294
+ ledger.transactions.push(tx);
295
+ ledger.supply.totalTransactions++;
296
+ return tx;
297
+ }
298
+ // ─── Rate Limiting ───────────────────────────────────
299
+ /**
300
+ * Check if an agent can perform an action under rate limits.
301
+ * Automatically resets windows and adjusts by tier.
302
+ */
303
+ export function checkRateLimit(agentId, action, tier = 'newcomer') {
304
+ const balance = ensureBalance(agentId);
305
+ const limits = TIER_LIMITS[tier] || TIER_LIMITS.newcomer;
306
+ const rl = balance.rateLimit;
307
+ // Reset window if expired
308
+ if (new Date(rl.windowResetAt).getTime() <= Date.now()) {
309
+ rl.queriesRemaining = limits.queriesPerHour;
310
+ rl.inferenceRemaining = limits.inferencePerHour;
311
+ rl.windowResetAt = new Date(Date.now() + 3600000).toISOString();
312
+ rl.tier = tier;
313
+ }
314
+ // Update tier if changed
315
+ if (rl.tier !== tier) {
316
+ rl.queriesRemaining = limits.queriesPerHour;
317
+ rl.inferenceRemaining = limits.inferencePerHour;
318
+ rl.tier = tier;
319
+ }
320
+ if (action === 'query') {
321
+ const allowed = rl.queriesRemaining > 0;
322
+ if (allowed)
323
+ rl.queriesRemaining--;
324
+ return { allowed, remaining: rl.queriesRemaining, resetAt: rl.windowResetAt };
325
+ }
326
+ else {
327
+ const allowed = rl.inferenceRemaining > 0;
328
+ if (allowed)
329
+ rl.inferenceRemaining--;
330
+ return { allowed, remaining: rl.inferenceRemaining, resetAt: rl.windowResetAt };
331
+ }
332
+ }
333
+ // ─── Dynamic Pricing ─────────────────────────────────
334
+ /**
335
+ * Calculate current pricing based on network conditions.
336
+ * High demand → higher prices → incentivizes more supply.
337
+ * Low demand → lower prices → encourages usage.
338
+ */
339
+ export function getPricingSignal() {
340
+ updateVelocity();
341
+ const agentCount = ledger.balances.size;
342
+ if (agentCount === 0) {
343
+ return {
344
+ demandMultiplier: 1,
345
+ utilization: 0,
346
+ queryPrice: ledger.rates.queryBaseCost,
347
+ inferencePrice: ledger.rates.inferenceBaseCost,
348
+ timestamp: new Date().toISOString(),
349
+ };
350
+ }
351
+ // Utilization: ratio of transactions to agent capacity
352
+ // Assume each agent can handle ~100 requests/hour
353
+ const maxCapacity = agentCount * 100 * 24;
354
+ const utilization = Math.min(1, ledger.supply.velocity24h / maxCapacity);
355
+ // Demand curve: sigmoid around 0.7 utilization
356
+ // Below 0.5 → discount (0.5x-1x)
357
+ // 0.5-0.8 → normal (1x)
358
+ // Above 0.8 → premium (1x-3x)
359
+ let demandMultiplier;
360
+ if (utilization < 0.5) {
361
+ demandMultiplier = 0.5 + utilization;
362
+ }
363
+ else if (utilization < 0.8) {
364
+ demandMultiplier = 1;
365
+ }
366
+ else {
367
+ demandMultiplier = 1 + (utilization - 0.8) * 10; // Up to 3x at 100%
368
+ }
369
+ demandMultiplier = Math.round(demandMultiplier * 100) / 100;
370
+ return {
371
+ demandMultiplier,
372
+ utilization: Math.round(utilization * 1000) / 1000,
373
+ queryPrice: Math.round(ledger.rates.queryBaseCost * demandMultiplier * 100) / 100,
374
+ inferencePrice: Math.round(ledger.rates.inferenceBaseCost * demandMultiplier * 100) / 100,
375
+ timestamp: new Date().toISOString(),
376
+ };
377
+ }
378
+ // ─── Auto-Earn Hooks ─────────────────────────────────
379
+ /**
380
+ * Auto-calculate and award credits for a storage contribution.
381
+ */
382
+ export function rewardStorage(agentId, megabytes, tier) {
383
+ const amount = megabytes * ledger.rates.storagePerMbPerDay;
384
+ return earnCredits(agentId, amount, `Storage contribution: ${megabytes}MB`, 'storage', { tier });
385
+ }
386
+ /**
387
+ * Auto-calculate and award credits for a compute task.
388
+ */
389
+ export function rewardCompute(agentId, taskId, tier) {
390
+ return earnCredits(agentId, ledger.rates.computePerTask, `Compute task: ${taskId}`, 'compute', { reference: taskId, tier });
391
+ }
392
+ /**
393
+ * Auto-calculate and award credits for GPU inference.
394
+ */
395
+ export function rewardGpuInference(agentId, tokensGenerated, taskId, tier) {
396
+ const baseReward = ledger.rates.gpuPerInferenceTask;
397
+ const tokenReward = (tokensGenerated / 1000) * ledger.rates.gpuPer1kTokens;
398
+ const total = baseReward + tokenReward;
399
+ return earnCredits(agentId, total, `GPU inference: ${tokensGenerated} tokens`, 'gpu', { reference: taskId, tier });
400
+ }
401
+ /**
402
+ * Auto-calculate and award credits for a training round.
403
+ */
404
+ export function rewardTraining(agentId, roundId, tier) {
405
+ return earnCredits(agentId, ledger.rates.trainingRoundBonus, `Training round: ${roundId}`, 'training', { reference: roundId, tier });
406
+ }
407
+ /**
408
+ * Charge for an inference request based on token count.
409
+ */
410
+ export function chargeInference(agentId, tokensUsed, requestId) {
411
+ const cost = ledger.rates.inferenceBaseCost + (tokensUsed / 1000) * ledger.rates.inferencePer1kTokens;
412
+ return spendCredits(agentId, Math.round(cost * 100) / 100, `Inference: ${tokensUsed} tokens`, 'inference', { reference: requestId });
413
+ }
414
+ // ─── Migration ───────────────────────────────────────
415
+ /**
416
+ * Create a migration snapshot of all balances.
417
+ * Used when transitioning from credits to tokens.
418
+ * Returns snapshot metadata.
419
+ */
420
+ export function createMigrationSnapshot() {
421
+ const snapshotId = randomUUID();
422
+ const timestamp = new Date().toISOString();
423
+ let totalClaimable = 0;
424
+ for (const balance of ledger.balances.values()) {
425
+ balance.migrationSnapshot = {
426
+ balance: balance.claimableCredits,
427
+ timestamp,
428
+ snapshotId,
429
+ };
430
+ totalClaimable += balance.claimableCredits;
431
+ }
432
+ return {
433
+ snapshotId,
434
+ timestamp,
435
+ agentsSnapshotted: ledger.balances.size,
436
+ totalClaimable,
437
+ };
438
+ }
439
+ // ─── Queries ─────────────────────────────────────────
440
+ export function getBalance(agentId) {
441
+ return ledger.balances.get(agentId);
442
+ }
443
+ export function getSupply() {
444
+ updateVelocity();
445
+ updateGini();
446
+ return { ...ledger.supply };
447
+ }
448
+ export function getLeaderboard(limit = 10, sortBy = 'earned') {
449
+ return Array.from(ledger.balances.values())
450
+ .sort((a, b) => {
451
+ if (sortBy === 'balance')
452
+ return b.balance - a.balance;
453
+ if (sortBy === 'spent')
454
+ return b.totalSpent - a.totalSpent;
455
+ return b.totalEarned - a.totalEarned;
456
+ })
457
+ .slice(0, limit)
458
+ .map((b, i) => ({
459
+ rank: i + 1,
460
+ agentId: b.agentId,
461
+ balance: b.balance,
462
+ totalEarned: b.totalEarned,
463
+ totalSpent: b.totalSpent,
464
+ }));
465
+ }
466
+ export function getTransactionHistory(agentId, limit = 20) {
467
+ return ledger.transactions
468
+ .filter(tx => tx.agentId === agentId)
469
+ .slice(-limit)
470
+ .reverse();
471
+ }
472
+ export function getRates() {
473
+ return { ...ledger.rates };
474
+ }
475
+ export function updateRates(updates) {
476
+ Object.assign(ledger.rates, updates);
477
+ return { ...ledger.rates };
478
+ }
479
+ export function getTierLimits(tier) {
480
+ return TIER_LIMITS[tier] || TIER_LIMITS.newcomer;
481
+ }
482
+ // ─── Reset (Testing) ────────────────────────────────
483
+ export function clearEconomics() {
484
+ ledger.transactions = [];
485
+ ledger.balances.clear();
486
+ ledger.supply = {
487
+ totalMinted: 0,
488
+ totalBurned: 0,
489
+ totalCirculating: 0,
490
+ totalTransactions: 0,
491
+ velocity24h: 0,
492
+ giniCoefficient: 0,
493
+ };
494
+ ledger.rates = { ...DEFAULT_RATES };
495
+ ledger.recentTimestamps = [];
496
+ }
497
+ // ─── Error Types ─────────────────────────────────────
498
+ export class InsufficientCreditsError extends Error {
499
+ agentId;
500
+ balance;
501
+ required;
502
+ constructor(agentId, balance, required) {
503
+ super(`Insufficient credits for agent '${agentId}': have ${balance}, need ${required}`);
504
+ this.name = 'InsufficientCreditsError';
505
+ this.agentId = agentId;
506
+ this.balance = balance;
507
+ this.required = required;
508
+ }
509
+ }
510
+ //# sourceMappingURL=economics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"economics.js","sourceRoot":"","sources":["../src/economics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * dpth.io Embedding System
3
+ *
4
+ * Everything in dpth.io can be embedded for semantic search.
5
+ * Find similar entities, metrics, and patterns without explicit joins.
6
+ *
7
+ * "What metrics behave like churn?"
8
+ * "Find entities similar to our best customers"
9
+ * "What patterns look like this anomaly?"
10
+ */
11
+ import { Embedding, Entity, Metric, Pattern, SimilarityQuery } from './types.js';
12
+ /**
13
+ * Generate text representation of an entity for embedding
14
+ */
15
+ export declare function entityToText(entity: Entity): string;
16
+ /**
17
+ * Generate text representation of a metric for embedding
18
+ */
19
+ export declare function metricToText(metric: Metric): string;
20
+ /**
21
+ * Generate text representation of a pattern for embedding
22
+ */
23
+ export declare function patternToText(pattern: Pattern): string;
24
+ /**
25
+ * Embed an entity
26
+ */
27
+ export declare function embedEntity(entity: Entity): Embedding;
28
+ /**
29
+ * Embed a metric
30
+ */
31
+ export declare function embedMetric(metric: Metric): Embedding;
32
+ /**
33
+ * Embed a pattern
34
+ */
35
+ export declare function embedPattern(pattern: Pattern): Embedding;
36
+ /**
37
+ * Embed arbitrary text (for queries)
38
+ */
39
+ export declare function embedText(text: string): number[];
40
+ /**
41
+ * Calculate cosine similarity between two vectors
42
+ */
43
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
44
+ export interface SimilarityResult {
45
+ id: string;
46
+ type: 'entity' | 'metric' | 'pattern';
47
+ score: number;
48
+ text: string;
49
+ }
50
+ /**
51
+ * Find similar items by ID
52
+ */
53
+ export declare function findSimilar(query: SimilarityQuery): SimilarityResult[];
54
+ /**
55
+ * Find similar items by text query
56
+ */
57
+ export declare function searchByText(text: string, type?: 'entity' | 'metric' | 'pattern', minScore?: number, limit?: number): SimilarityResult[];
58
+ /**
59
+ * Get embedding by key
60
+ */
61
+ export declare function getEmbedding(type: 'entity' | 'metric' | 'pattern', id: string): Embedding | undefined;
62
+ /**
63
+ * Get embedding stats
64
+ */
65
+ export declare function getEmbeddingStats(): {
66
+ total: number;
67
+ byType: Record<string, number>;
68
+ };
69
+ /**
70
+ * Clear all embeddings (for testing)
71
+ */
72
+ export declare function clearEmbeddings(): void;
73
+ /**
74
+ * Re-embed all entities (useful after model upgrade)
75
+ */
76
+ export declare function reembedAllEntities(entities: Entity[], onProgress?: (done: number, total: number) => void): Promise<void>;
77
+ /**
78
+ * Re-embed all metrics
79
+ */
80
+ export declare function reembedAllMetrics(metrics: Metric[], onProgress?: (done: number, total: number) => void): Promise<void>;
81
+ //# sourceMappingURL=embed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../src/embed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAQjF;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkBnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAoBnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEtD;AA2DD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAcrD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAcrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAcxD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEhD;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAiBjE;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,EAAE,CAatE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,EACtC,QAAQ,GAAE,MAAY,EACtB,KAAK,GAAE,MAAW,GACjB,gBAAgB,EAAE,CAGpB;AAuCD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAErG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAWrF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAID;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACjD,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACjD,OAAO,CAAC,IAAI,CAAC,CAKf"}