@phronesis-io/openclaw-eigenflux 0.0.3 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +15 -161
  2. package/dist/agent-prompt-templates.d.ts +14 -11
  3. package/dist/agent-prompt-templates.d.ts.map +1 -1
  4. package/dist/agent-prompt-templates.js +27 -38
  5. package/dist/agent-prompt-templates.js.map +1 -1
  6. package/dist/cli-executor.d.ts +32 -0
  7. package/dist/cli-executor.d.ts.map +1 -0
  8. package/dist/cli-executor.js +75 -0
  9. package/dist/cli-executor.js.map +1 -0
  10. package/dist/config.d.ts +41 -126
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +94 -229
  13. package/dist/config.js.map +1 -1
  14. package/dist/credentials-loader.d.ts +6 -5
  15. package/dist/credentials-loader.d.ts.map +1 -1
  16. package/dist/credentials-loader.js +17 -21
  17. package/dist/credentials-loader.js.map +1 -1
  18. package/dist/index.d.ts +3 -73
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +212 -276
  21. package/dist/index.js.map +1 -1
  22. package/dist/notification-route-resolver.d.ts +24 -2
  23. package/dist/notification-route-resolver.d.ts.map +1 -1
  24. package/dist/notification-route-resolver.js +257 -43
  25. package/dist/notification-route-resolver.js.map +1 -1
  26. package/dist/notifier.d.ts +9 -17
  27. package/dist/notifier.d.ts.map +1 -1
  28. package/dist/notifier.js +133 -66
  29. package/dist/notifier.js.map +1 -1
  30. package/dist/polling-client.d.ts +31 -19
  31. package/dist/polling-client.d.ts.map +1 -1
  32. package/dist/polling-client.js +102 -127
  33. package/dist/polling-client.js.map +1 -1
  34. package/dist/reply-target.d.ts +8 -0
  35. package/dist/reply-target.d.ts.map +1 -0
  36. package/dist/reply-target.js +104 -0
  37. package/dist/reply-target.js.map +1 -0
  38. package/dist/session-route-memory.d.ts +12 -3
  39. package/dist/session-route-memory.d.ts.map +1 -1
  40. package/dist/session-route-memory.js +83 -80
  41. package/dist/session-route-memory.js.map +1 -1
  42. package/dist/stream-client.d.ts +48 -0
  43. package/dist/stream-client.d.ts.map +1 -0
  44. package/dist/stream-client.js +168 -0
  45. package/dist/stream-client.js.map +1 -0
  46. package/openclaw.plugin.json +5 -75
  47. package/package.json +6 -8
  48. package/skills/ef-broadcast/SKILL.md +84 -0
  49. package/skills/ef-broadcast/references/feed.md +127 -0
  50. package/skills/ef-broadcast/references/publish.md +119 -0
  51. package/skills/ef-communication/SKILL.md +95 -0
  52. package/skills/ef-communication/references/message.md +132 -0
  53. package/skills/ef-communication/references/relations.md +215 -0
  54. package/skills/ef-communication/references/stream.md +66 -0
  55. package/skills/ef-profile/SKILL.md +138 -0
  56. package/skills/ef-profile/references/auth.md +103 -0
  57. package/skills/ef-profile/references/config.md +54 -0
  58. package/skills/ef-profile/references/onboarding.md +172 -0
  59. package/skills/ef-profile/references/server-management.md +67 -0
  60. package/dist/gateway-rpc-client.d.ts +0 -26
  61. package/dist/gateway-rpc-client.d.ts.map +0 -1
  62. package/dist/gateway-rpc-client.js +0 -288
  63. package/dist/gateway-rpc-client.js.map +0 -1
  64. package/dist/pm-polling-client.d.ts +0 -52
  65. package/dist/pm-polling-client.d.ts.map +0 -1
  66. package/dist/pm-polling-client.js +0 -182
  67. package/dist/pm-polling-client.js.map +0 -1
@@ -1,13 +1,52 @@
1
1
  "use strict";
2
2
  /**
3
- * Polling client for EigenFlux feed updates
3
+ * Polling client for EigenFlux feed updates.
4
+ * Uses the eigenflux CLI (`eigenflux feed poll`) instead of direct HTTP calls.
4
5
  */
5
6
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.EigenFluxPollingClient = void 0;
7
- const config_1 = require("./config");
7
+ exports.EigenFluxPollingClient = exports.MAX_POLL_INTERVAL_SEC = exports.MIN_POLL_INTERVAL_SEC = exports.DEFAULT_POLL_INTERVAL_SEC = exports.POLL_INTERVAL_CONFIG_KEY = void 0;
8
+ exports.readPollIntervalSec = readPollIntervalSec;
9
+ const cli_executor_1 = require("./cli-executor");
10
+ exports.POLL_INTERVAL_CONFIG_KEY = 'feed_poll_interval';
11
+ exports.DEFAULT_POLL_INTERVAL_SEC = 600;
12
+ exports.MIN_POLL_INTERVAL_SEC = 10;
13
+ exports.MAX_POLL_INTERVAL_SEC = 24 * 60 * 60;
14
+ /**
15
+ * Reads the feed poll interval (in seconds) from the eigenflux CLI config
16
+ * (`eigenflux config get --key feed_poll_interval`). Values are stored as
17
+ * decimal-string seconds per the config KV conventions. Falls back to 600
18
+ * (10 minutes) when the key is unset, the value is invalid, out of the
19
+ * supported range [10s, 86400s], or the CLI call fails.
20
+ */
21
+ async function readPollIntervalSec(eigenfluxBin, serverName, logger) {
22
+ const result = await (0, cli_executor_1.execEigenflux)(eigenfluxBin, ['config', 'get', '--key', exports.POLL_INTERVAL_CONFIG_KEY, '--server', serverName, '--format', 'json'], { logger });
23
+ if (result.kind !== 'success' || result.data === undefined || result.data === null) {
24
+ return exports.DEFAULT_POLL_INTERVAL_SEC;
25
+ }
26
+ let numeric;
27
+ if (typeof result.data === 'number' && Number.isFinite(result.data)) {
28
+ numeric = result.data;
29
+ }
30
+ else if (typeof result.data === 'string') {
31
+ const parsed = Number(result.data.trim());
32
+ if (Number.isFinite(parsed)) {
33
+ numeric = parsed;
34
+ }
35
+ }
36
+ if (numeric === undefined) {
37
+ logger.warn(`Ignoring non-numeric pollInterval from eigenflux config (server=${serverName}, value=${JSON.stringify(result.data)}); using ${exports.DEFAULT_POLL_INTERVAL_SEC}s`);
38
+ return exports.DEFAULT_POLL_INTERVAL_SEC;
39
+ }
40
+ const floored = Math.floor(numeric);
41
+ if (floored < exports.MIN_POLL_INTERVAL_SEC || floored > exports.MAX_POLL_INTERVAL_SEC) {
42
+ logger.warn(`pollInterval ${floored}s from eigenflux config (server=${serverName}) is outside [${exports.MIN_POLL_INTERVAL_SEC}s, ${exports.MAX_POLL_INTERVAL_SEC}s]; using ${exports.DEFAULT_POLL_INTERVAL_SEC}s`);
43
+ return exports.DEFAULT_POLL_INTERVAL_SEC;
44
+ }
45
+ return floored;
46
+ }
8
47
  class EigenFluxPollingClient {
9
48
  constructor(config) {
10
- this.intervalId = null;
49
+ this.timeoutId = null;
11
50
  this.isRunning = false;
12
51
  this.activePoll = null;
13
52
  this.config = config;
@@ -18,26 +57,49 @@ class EigenFluxPollingClient {
18
57
  return;
19
58
  }
20
59
  this.isRunning = true;
21
- this.config.logger.info(`Starting polling client (interval: ${this.config.pollIntervalSec}s)`);
22
- // Initial fetch
60
+ this.config.logger.info(`Starting polling client for server=${this.config.serverName}`);
61
+ // Initial fetch, then self-schedule subsequent polls using the interval
62
+ // freshly resolved from the eigenflux CLI config after each run.
23
63
  await this.pollOnce();
24
- // Schedule periodic polling
25
- this.intervalId = setInterval(() => {
26
- this.pollOnce().catch((err) => {
27
- this.config.logger.error(`Polling error: ${this.formatError(err)}`);
28
- });
29
- }, this.config.pollIntervalSec * 1000);
64
+ this.scheduleNext();
30
65
  }
31
66
  stop() {
32
67
  if (!this.isRunning) {
33
68
  return;
34
69
  }
35
- this.config.logger.info('Stopping polling client');
70
+ this.config.logger.info(`Stopping polling client for server=${this.config.serverName}`);
36
71
  this.isRunning = false;
37
- if (this.intervalId) {
38
- clearInterval(this.intervalId);
39
- this.intervalId = null;
72
+ if (this.timeoutId) {
73
+ clearTimeout(this.timeoutId);
74
+ this.timeoutId = null;
75
+ }
76
+ }
77
+ async scheduleNext() {
78
+ if (!this.isRunning) {
79
+ return;
80
+ }
81
+ let intervalSec;
82
+ try {
83
+ intervalSec = await this.config.resolvePollIntervalSec();
84
+ }
85
+ catch (error) {
86
+ this.config.logger.warn(`Failed to resolve pollInterval for server=${this.config.serverName}: ${error instanceof Error ? error.message : String(error)}; using ${exports.DEFAULT_POLL_INTERVAL_SEC}s`);
87
+ intervalSec = exports.DEFAULT_POLL_INTERVAL_SEC;
88
+ }
89
+ if (!this.isRunning) {
90
+ return;
40
91
  }
92
+ this.config.logger.debug(`Scheduling next feed poll for server=${this.config.serverName} in ${intervalSec}s`);
93
+ this.timeoutId = setTimeout(() => {
94
+ this.timeoutId = null;
95
+ this.pollOnce()
96
+ .catch((err) => {
97
+ this.config.logger.error(`Polling error: ${err instanceof Error ? err.message : String(err)}`);
98
+ })
99
+ .finally(() => {
100
+ this.scheduleNext();
101
+ });
102
+ }, intervalSec * 1000);
41
103
  }
42
104
  async pollOnce(options = {}) {
43
105
  if (this.activePoll) {
@@ -47,72 +109,43 @@ class EigenFluxPollingClient {
47
109
  const run = async () => {
48
110
  const notifyFeed = options.notifyFeed ?? true;
49
111
  const notifyAuthRequired = options.notifyAuthRequired ?? true;
50
- const authState = this.config.getAuthState();
51
- if (authState.status !== 'available') {
52
- this.config.logger.warn(`No usable access token available (status=${authState.status}), skipping poll`);
53
- const authEvent = {
54
- reason: authState.status === 'expired' ? 'expired_token' : 'missing_token',
55
- credentialsPath: authState.credentialsPath,
56
- source: authState.source,
57
- expiresAt: authState.expiresAt,
58
- };
59
- if (notifyAuthRequired) {
60
- await this.config.onAuthRequired(authEvent);
61
- }
62
- return {
63
- kind: 'auth_required',
64
- authEvent,
65
- };
66
- }
67
- const url = `${this.config.apiUrl}/api/v1/items/feed?action=refresh&limit=20`;
68
112
  try {
69
- this.config.logger.info(`Polling feed request: ${url}`);
70
- this.config.logger.debug(`Polling: ${url}`);
71
- const response = await fetch(url, {
72
- method: 'GET',
73
- headers: (0, config_1.buildEigenFluxRequestHeaders)(authState.accessToken),
74
- });
75
- if (response.status === 401) {
76
- const authEvent = {
77
- reason: 'unauthorized',
78
- credentialsPath: authState.credentialsPath,
79
- source: authState.source,
80
- expiresAt: authState.expiresAt,
81
- statusCode: 401,
82
- };
113
+ this.config.logger.info(`Polling feed via CLI for server=${this.config.serverName}`);
114
+ const result = await (0, cli_executor_1.execEigenflux)(this.config.eigenfluxBin, ['feed', 'poll', '--limit', '20', '--action', 'refresh', '-s', this.config.serverName, '-f', 'json'], { logger: this.config.logger });
115
+ if (result.kind === 'auth_required') {
116
+ const authEvent = { reason: 'auth_required' };
83
117
  if (notifyAuthRequired) {
84
118
  await this.config.onAuthRequired(authEvent);
85
119
  }
120
+ return { kind: 'auth_required', authEvent };
121
+ }
122
+ if (result.kind === 'not_installed') {
86
123
  return {
87
- kind: 'auth_required',
88
- authEvent,
124
+ kind: 'error',
125
+ error: new Error(`eigenflux CLI not installed (bin=${result.bin})`),
89
126
  };
90
127
  }
91
- if (!response.ok) {
92
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
93
- }
94
- const data = (await response.json());
95
- if (data.code !== 0) {
96
- throw new Error(`API error: ${data.msg}`);
128
+ if (result.kind === 'error') {
129
+ return { kind: 'error', error: result.error };
97
130
  }
98
- const items = data.data.items ?? [];
99
- const notifications = data.data.notifications ?? [];
100
- this.config.logger.info(`Polled feed: ${items.length} items, notifications=${notifications.length}, has_more=${data.data.has_more}`);
131
+ // Reconstruct full FeedResponse envelope from CLI data output
132
+ const feedResponse = {
133
+ code: 0,
134
+ msg: 'success',
135
+ data: result.data,
136
+ };
137
+ const items = feedResponse.data.items ?? [];
138
+ const notifications = feedResponse.data.notifications ?? [];
139
+ this.config.logger.info(`Polled feed: ${items.length} items, notifications=${notifications.length}, has_more=${feedResponse.data.has_more}`);
101
140
  if (notifyFeed && (items.length > 0 || notifications.length > 0)) {
102
- await this.config.onFeedPolled(data);
141
+ await this.config.onFeedPolled(feedResponse);
103
142
  }
104
- return {
105
- kind: 'success',
106
- payload: data,
107
- };
143
+ return { kind: 'success', payload: feedResponse };
108
144
  }
109
145
  catch (error) {
110
146
  const normalized = error instanceof Error ? error : new Error(String(error));
111
- this.config.logger.error(`Failed to poll feed (url=${url}): ${this.formatError(normalized)}`);
112
- return {
113
- kind: 'error',
114
- error: normalized,
115
- };
147
+ this.config.logger.error(`Failed to poll feed for server=${this.config.serverName}: ${normalized.message}`);
148
+ return { kind: 'error', error: normalized };
116
149
  }
117
150
  };
118
151
  this.activePoll = run().finally(() => {
@@ -120,64 +153,6 @@ class EigenFluxPollingClient {
120
153
  });
121
154
  return this.activePoll;
122
155
  }
123
- formatError(error) {
124
- const segments = [];
125
- this.appendErrorSegment(segments, error, false);
126
- return segments.join(' | ');
127
- }
128
- appendErrorSegment(segments, error, isCause) {
129
- const prefix = isCause ? 'cause=' : '';
130
- if (error instanceof Error) {
131
- const details = [`${error.name}: ${error.message}`];
132
- const metadata = this.errorMetadata(error);
133
- if (metadata.length > 0) {
134
- details.push(...metadata);
135
- }
136
- segments.push(prefix + details.join(' | '));
137
- const cause = error.cause;
138
- if (cause !== undefined) {
139
- this.appendErrorSegment(segments, cause, true);
140
- }
141
- return;
142
- }
143
- if (error && typeof error === 'object') {
144
- const metadata = this.errorMetadata(error);
145
- if (metadata.length > 0) {
146
- segments.push(prefix + metadata.join(' | '));
147
- return;
148
- }
149
- }
150
- segments.push(prefix + String(error));
151
- }
152
- errorMetadata(value) {
153
- if (!value || typeof value !== 'object') {
154
- return [];
155
- }
156
- const record = value;
157
- const metadata = [];
158
- if (record.code !== undefined) {
159
- metadata.push(`code=${String(record.code)}`);
160
- }
161
- if (record.errno !== undefined) {
162
- metadata.push(`errno=${String(record.errno)}`);
163
- }
164
- if (record.syscall !== undefined) {
165
- metadata.push(`syscall=${String(record.syscall)}`);
166
- }
167
- if (record.address !== undefined) {
168
- metadata.push(`address=${String(record.address)}`);
169
- }
170
- if (record.port !== undefined) {
171
- metadata.push(`port=${String(record.port)}`);
172
- }
173
- if (record.status !== undefined) {
174
- metadata.push(`status=${String(record.status)}`);
175
- }
176
- if (record.statusText !== undefined) {
177
- metadata.push(`status_text=${String(record.statusText)}`);
178
- }
179
- return metadata;
180
- }
181
156
  }
182
157
  exports.EigenFluxPollingClient = EigenFluxPollingClient;
183
158
  //# sourceMappingURL=polling-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"polling-client.js","sourceRoot":"","sources":["../src/polling-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"polling-client.js","sourceRoot":"","sources":["../src/polling-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ type ConversationTargetKind = 'user' | 'chat' | 'channel' | 'room';
2
+ export declare function normalizeReplyTarget(value: unknown, options?: {
3
+ channel?: string;
4
+ sessionKey?: string;
5
+ fallbackKind?: ConversationTargetKind;
6
+ }): string | undefined;
7
+ export {};
8
+ //# sourceMappingURL=reply-target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-target.d.ts","sourceRoot":"","sources":["../src/reply-target.ts"],"names":[],"mappings":"AAAA,KAAK,sBAAsB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AA0GnE,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,sBAAsB,CAAC;CACvC,GACA,MAAM,GAAG,SAAS,CAwBpB"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeReplyTarget = normalizeReplyTarget;
4
+ function readNonEmptyString(value) {
5
+ if (typeof value !== 'string') {
6
+ return undefined;
7
+ }
8
+ const trimmed = value.trim();
9
+ return trimmed.length > 0 ? trimmed : undefined;
10
+ }
11
+ function isNormalizedConversationTarget(value) {
12
+ return /^(user|chat|channel|room):/u.test(value);
13
+ }
14
+ function isSessionPeerShape(value) {
15
+ const normalized = value?.trim().toLowerCase();
16
+ return (normalized === 'direct' ||
17
+ normalized === 'dm' ||
18
+ normalized === 'group' ||
19
+ normalized === 'channel' ||
20
+ normalized === 'room');
21
+ }
22
+ function supportsKindPrefixedTargets(channel) {
23
+ return channel === 'feishu' || channel === 'discord';
24
+ }
25
+ function parseSessionRoute(sessionKey) {
26
+ const trimmed = readNonEmptyString(sessionKey);
27
+ if (!trimmed) {
28
+ return {};
29
+ }
30
+ const parts = trimmed.split(':').filter((part) => part.length > 0);
31
+ if (parts[0]?.toLowerCase() !== 'agent') {
32
+ return {};
33
+ }
34
+ const channel = readNonEmptyString(parts[2])?.toLowerCase();
35
+ const peerShapeRaw = parts.length >= 6 && isSessionPeerShape(parts[4])
36
+ ? parts[4].toLowerCase()
37
+ : parts.length >= 5 && isSessionPeerShape(parts[3])
38
+ ? parts[3].toLowerCase()
39
+ : undefined;
40
+ const peerShape = peerShapeRaw;
41
+ return { channel, peerShape };
42
+ }
43
+ function deriveReplyTargetKindFromSessionKey(sessionKey) {
44
+ const route = parseSessionRoute(sessionKey);
45
+ if (!supportsKindPrefixedTargets(route.channel)) {
46
+ return undefined;
47
+ }
48
+ switch (route.channel) {
49
+ case 'feishu':
50
+ switch (route.peerShape) {
51
+ case 'direct':
52
+ case 'dm':
53
+ return 'user';
54
+ case 'group':
55
+ return 'chat';
56
+ default:
57
+ return undefined;
58
+ }
59
+ case 'discord':
60
+ switch (route.peerShape) {
61
+ case 'direct':
62
+ case 'dm':
63
+ return 'user';
64
+ case 'channel':
65
+ return 'channel';
66
+ default:
67
+ return undefined;
68
+ }
69
+ default:
70
+ return undefined;
71
+ }
72
+ }
73
+ function deriveReplyTargetKindFromValue(value, channel) {
74
+ if (channel === 'feishu') {
75
+ if (/^ou_/iu.test(value)) {
76
+ return 'user';
77
+ }
78
+ if (/^oc_/iu.test(value)) {
79
+ return 'chat';
80
+ }
81
+ }
82
+ return undefined;
83
+ }
84
+ function normalizeReplyTarget(value, options) {
85
+ const trimmed = readNonEmptyString(value);
86
+ if (!trimmed) {
87
+ return undefined;
88
+ }
89
+ if (isNormalizedConversationTarget(trimmed)) {
90
+ return trimmed;
91
+ }
92
+ const channel = readNonEmptyString(options?.channel)?.toLowerCase();
93
+ if (channel && trimmed.startsWith(`${channel}:`)) {
94
+ return normalizeReplyTarget(trimmed.slice(channel.length + 1), {
95
+ ...options,
96
+ channel,
97
+ });
98
+ }
99
+ const fallbackKind = deriveReplyTargetKindFromValue(trimmed, channel) ??
100
+ (supportsKindPrefixedTargets(channel) ? options?.fallbackKind : undefined) ??
101
+ deriveReplyTargetKindFromSessionKey(options?.sessionKey);
102
+ return fallbackKind ? `${fallbackKind}:${trimmed}` : trimmed;
103
+ }
104
+ //# sourceMappingURL=reply-target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reply-target.js","sourceRoot":"","sources":["../src/reply-target.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Logger } from './logger';
2
+ export declare const DELIVER_SESSION_KEY = "openclaw_deliver_session";
2
3
  export type StoredNotificationRoute = {
3
4
  sessionKey: string;
4
5
  agentId: string;
@@ -7,7 +8,15 @@ export type StoredNotificationRoute = {
7
8
  replyAccountId?: string;
8
9
  updatedAt: number;
9
10
  };
10
- export declare function resolveSessionRouteMemoryPath(workdir: string): string;
11
- export declare function readStoredNotificationRoute(workdir: string | undefined, logger: Logger): StoredNotificationRoute | undefined;
12
- export declare function writeStoredNotificationRoute(workdir: string | undefined, route: Omit<StoredNotificationRoute, 'updatedAt'>, logger: Logger): boolean;
11
+ /**
12
+ * Reads the remembered delivery route for a server from the eigenflux CLI
13
+ * config store (`openclaw_deliver_session` key). Returns undefined when the
14
+ * key is unset or the CLI call fails.
15
+ */
16
+ export declare function readStoredNotificationRoute(eigenfluxBin: string | undefined, serverName: string | undefined, logger: Logger): Promise<StoredNotificationRoute | undefined>;
17
+ /**
18
+ * Persists the remembered delivery route for a server via the eigenflux CLI
19
+ * config store (`openclaw_deliver_session` key).
20
+ */
21
+ export declare function writeStoredNotificationRoute(eigenfluxBin: string | undefined, serverName: string | undefined, route: Omit<StoredNotificationRoute, 'updatedAt'>, logger: Logger): Promise<boolean>;
13
22
  //# sourceMappingURL=session-route-memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-route-memory.d.ts","sourceRoot":"","sources":["../src/session-route-memory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAcF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,MAAM,EAAE,MAAM,GACb,uBAAuB,GAAG,SAAS,CAyCrC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,IAAI,CAAC,uBAAuB,EAAE,WAAW,CAAC,EACjD,MAAM,EAAE,MAAM,GACb,OAAO,CA0BT"}
1
+ {"version":3,"file":"session-route-memory.d.ts","sourceRoot":"","sources":["../src/session-route-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,eAAO,MAAM,mBAAmB,6BAA6B,CAAC;AAE9D,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAcF;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC,CAuD9C;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,IAAI,CAAC,uBAAuB,EAAE,WAAW,CAAC,EACjD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAkElB"}