experimental-agent 0.2.1 → 0.3.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.
- package/README.md +55 -254
- package/dist/adapter-BigchkkI.d.mts +201 -0
- package/dist/adapter-BigchkkI.d.ts +201 -0
- package/dist/chunk-BFFNCESS.mjs +302 -0
- package/dist/chunk-C4VSUEY2.mjs +72 -0
- package/dist/chunk-DOD4MC5D.mjs +196 -0
- package/dist/chunk-ELWIUJUK.mjs +96 -0
- package/dist/chunk-GKASMIBR.mjs +50 -0
- package/dist/chunk-JO3JDCH5.mjs +107 -0
- package/dist/chunk-MSWINCCM.mjs +128 -0
- package/dist/chunk-RT72C52I.mjs +324 -0
- package/dist/chunk-ZUFJJYC4.mjs +150 -0
- package/dist/{handler-FRUPZ4LX.mjs → docker-QPCLWLYR.mjs} +3 -4
- package/dist/entry-BmQ8FO-5.d.ts +36 -0
- package/dist/entry-CZd9aAwn.d.mts +36 -0
- package/dist/index.d.mts +415 -18
- package/dist/index.d.ts +415 -18
- package/dist/index.js +3036 -5494
- package/dist/index.mjs +3264 -1142
- package/dist/lifecycle-workflow-steps.d.mts +5 -0
- package/dist/lifecycle-workflow-steps.d.ts +5 -0
- package/dist/lifecycle-workflow-steps.js +263 -0
- package/dist/lifecycle-workflow-steps.mjs +9 -0
- package/dist/lifecycle-workflow.d.mts +6 -6
- package/dist/lifecycle-workflow.d.ts +6 -6
- package/dist/lifecycle-workflow.js +192 -905
- package/dist/lifecycle-workflow.mjs +3 -1
- package/dist/local-KJ3BSIFJ.mjs +8 -0
- package/dist/next/loader.d.mts +1 -0
- package/dist/next/loader.d.ts +1 -0
- package/dist/next/loader.js +44 -18
- package/dist/next/loader.mjs +18 -13
- package/dist/next.js +32 -9
- package/dist/next.mjs +6 -4
- package/dist/{process-manager-JDUJDYGU.mjs → process-manager-WQHAIVRB.mjs} +1 -1
- package/dist/sandbox.d.mts +6 -0
- package/dist/sandbox.d.ts +6 -0
- package/dist/sandbox.js +1070 -0
- package/dist/sandbox.mjs +19 -0
- package/dist/steps-BnkRQKlc.d.ts +173 -0
- package/dist/steps-u-mGDbP_.d.mts +173 -0
- package/dist/storage.d.mts +11 -0
- package/dist/storage.d.ts +11 -0
- package/dist/storage.js +234 -0
- package/dist/storage.mjs +12 -0
- package/dist/vercel-QZ6INPMV.mjs +11 -0
- package/package.json +26 -5
- package/dist/agent-workflow.d.mts +0 -30
- package/dist/agent-workflow.d.ts +0 -30
- package/dist/agent-workflow.js +0 -5433
- package/dist/agent-workflow.mjs +0 -14
- package/dist/chunk-AML2VCQS.mjs +0 -1287
- package/dist/chunk-FQ67QZOI.mjs +0 -75
- package/dist/chunk-NO7RHGTH.mjs +0 -2367
- package/dist/chunk-NXDVNJRS.mjs +0 -106
- package/dist/chunk-OZZVS6L5.mjs +0 -139
- package/dist/chunk-QRWGDFFY.mjs +0 -75
- package/dist/chunk-SJVFFE5D.mjs +0 -402
- package/dist/chunk-TAXLUVIC.mjs +0 -1
- package/dist/chunk-TGNVXSMX.mjs +0 -399
- package/dist/chunk-YRYXN7W4.mjs +0 -48
- package/dist/chunk-ZIAHPXOJ.mjs +0 -595
- package/dist/client-BKA7XBGW.mjs +0 -15
- package/dist/client-CEeSFGva.d.mts +0 -2376
- package/dist/client-CEeSFGva.d.ts +0 -2376
- package/dist/docker-FB2MJTHJ.mjs +0 -12
- package/dist/local-fs-handlers-SYOCKTPN.mjs +0 -447
- package/dist/sandbox-UENKQV3T.mjs +0 -21
- package/dist/storage-LSDMRW73.mjs +0 -20
- package/dist/vercel-SD3JTECG.mjs +0 -20
- package/dist/vercel-sdk-I6A4MVAN.mjs +0 -8
package/dist/sandbox.mjs
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
vercelSandbox
|
|
3
|
+
} from "./chunk-RT72C52I.mjs";
|
|
4
|
+
import {
|
|
5
|
+
dockerSandbox
|
|
6
|
+
} from "./chunk-BFFNCESS.mjs";
|
|
7
|
+
import {
|
|
8
|
+
localSandbox
|
|
9
|
+
} from "./chunk-ZUFJJYC4.mjs";
|
|
10
|
+
import "./chunk-GKASMIBR.mjs";
|
|
11
|
+
import "./chunk-JO3JDCH5.mjs";
|
|
12
|
+
import "./chunk-MSWINCCM.mjs";
|
|
13
|
+
import "./chunk-BJTO5JO5.mjs";
|
|
14
|
+
export {
|
|
15
|
+
dockerSandbox,
|
|
16
|
+
localSandbox,
|
|
17
|
+
vercelSandbox
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import * as _vercel_sandbox from '@vercel/sandbox';
|
|
2
|
+
import { e as Storage, a as Sandbox } from './adapter-BigchkkI.js';
|
|
3
|
+
|
|
4
|
+
type LogLevel = "info" | "warn" | "error" | "silent";
|
|
5
|
+
type LogContext = {
|
|
6
|
+
sessionId?: string;
|
|
7
|
+
messageId?: string;
|
|
8
|
+
sandboxId?: string;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
};
|
|
11
|
+
type LoggingConfig = {
|
|
12
|
+
level?: LogLevel;
|
|
13
|
+
/**
|
|
14
|
+
* Top-level label for all log lines.
|
|
15
|
+
* @default "agent"
|
|
16
|
+
* @example "my-app" → [my-app:default:workflow]
|
|
17
|
+
*/
|
|
18
|
+
prefix?: string;
|
|
19
|
+
name?: string;
|
|
20
|
+
};
|
|
21
|
+
declare class Logger {
|
|
22
|
+
readonly subsystem: string;
|
|
23
|
+
private readonly config;
|
|
24
|
+
private readonly context;
|
|
25
|
+
constructor({ subsystem, config, context, }: {
|
|
26
|
+
subsystem: string;
|
|
27
|
+
config: LoggingConfig;
|
|
28
|
+
context?: LogContext;
|
|
29
|
+
});
|
|
30
|
+
child({ subsystem, context, }: {
|
|
31
|
+
subsystem?: string;
|
|
32
|
+
context?: LogContext;
|
|
33
|
+
}): Logger;
|
|
34
|
+
withContext(context: LogContext): Logger;
|
|
35
|
+
info(message: string, data?: Record<string, unknown>): void;
|
|
36
|
+
warn(message: string, data?: Record<string, unknown>): void;
|
|
37
|
+
error(message: string, data?: Record<string, unknown>): void;
|
|
38
|
+
/**
|
|
39
|
+
* Returns a function that, when called, logs the elapsed time at info level.
|
|
40
|
+
* Pass `logOnStart: true` to also log when the timer begins.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* const done = log.time("sandbox setup", { sandboxId }, { logOnStart: true });
|
|
44
|
+
* await setup();
|
|
45
|
+
* done(); // start: [agent:default:sandbox] sandbox setup { sandboxId: '...' }
|
|
46
|
+
* // end: [agent:default:sandbox] sandbox setup { sandboxId: '...', durationMs: 123 }
|
|
47
|
+
*/
|
|
48
|
+
time(message: string, data?: Record<string, unknown>, opts?: {
|
|
49
|
+
logOnStart?: boolean;
|
|
50
|
+
}): (endData?: Record<string, unknown>) => void;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
type ExecResult = {
|
|
54
|
+
commandId: string;
|
|
55
|
+
logs: () => AsyncIterable<{
|
|
56
|
+
stream: "stdout" | "stderr";
|
|
57
|
+
data: string;
|
|
58
|
+
}>;
|
|
59
|
+
result: Promise<{
|
|
60
|
+
stdout: string;
|
|
61
|
+
stderr: string;
|
|
62
|
+
exitCode: number;
|
|
63
|
+
}>;
|
|
64
|
+
};
|
|
65
|
+
type UploadableFile = {
|
|
66
|
+
path: string;
|
|
67
|
+
content: string | Buffer;
|
|
68
|
+
};
|
|
69
|
+
interface SandboxInstance {
|
|
70
|
+
readonly cwd: string;
|
|
71
|
+
exec(opts: {
|
|
72
|
+
command: string;
|
|
73
|
+
args?: string[];
|
|
74
|
+
cwd?: string;
|
|
75
|
+
env?: Record<string, string>;
|
|
76
|
+
sudo?: boolean;
|
|
77
|
+
signal?: AbortSignal;
|
|
78
|
+
}): Promise<ExecResult>;
|
|
79
|
+
readFile(opts: {
|
|
80
|
+
path: string;
|
|
81
|
+
signal?: AbortSignal;
|
|
82
|
+
}): Promise<Buffer | null>;
|
|
83
|
+
writeFiles(opts: {
|
|
84
|
+
files: UploadableFile[];
|
|
85
|
+
destPath: string;
|
|
86
|
+
signal?: AbortSignal;
|
|
87
|
+
}): Promise<void>;
|
|
88
|
+
getDomain(opts: {
|
|
89
|
+
port: number;
|
|
90
|
+
signal?: AbortSignal;
|
|
91
|
+
}): Promise<string>;
|
|
92
|
+
updateNetworkPolicy(opts: {
|
|
93
|
+
policy: _vercel_sandbox.NetworkPolicy;
|
|
94
|
+
signal?: AbortSignal;
|
|
95
|
+
}): Promise<_vercel_sandbox.NetworkPolicy>;
|
|
96
|
+
start(opts?: {
|
|
97
|
+
signal?: AbortSignal;
|
|
98
|
+
}): Promise<void>;
|
|
99
|
+
stop(opts?: {
|
|
100
|
+
signal?: AbortSignal;
|
|
101
|
+
}): Promise<void>;
|
|
102
|
+
snapshot(opts?: {
|
|
103
|
+
signal?: AbortSignal;
|
|
104
|
+
}): Promise<{
|
|
105
|
+
snapshotId: string;
|
|
106
|
+
}>;
|
|
107
|
+
kill(opts: {
|
|
108
|
+
commandId: string;
|
|
109
|
+
signal?: AbortSignal;
|
|
110
|
+
}): Promise<void>;
|
|
111
|
+
getStatus(opts?: {
|
|
112
|
+
signal?: AbortSignal;
|
|
113
|
+
}): Promise<"pending" | "running" | "stopping" | "stopped" | "failed">;
|
|
114
|
+
}
|
|
115
|
+
type SandboxAgentRef = {
|
|
116
|
+
name: string;
|
|
117
|
+
storage: Storage;
|
|
118
|
+
options: {
|
|
119
|
+
logging?: Omit<LoggingConfig, "name">;
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
type WithConfig<TConfig> = unknown extends TConfig ? {
|
|
123
|
+
config?: Record<string, unknown>;
|
|
124
|
+
} : Partial<TConfig> extends TConfig ? {
|
|
125
|
+
config?: TConfig;
|
|
126
|
+
} : {
|
|
127
|
+
config: TConfig;
|
|
128
|
+
};
|
|
129
|
+
type SandboxSetupFields = Omit<Sandbox["setup"], "binding" | "completedAt">;
|
|
130
|
+
type SandboxBinding<TType extends string = string, TConfig = any, TMetadata = any> = {
|
|
131
|
+
type: TType;
|
|
132
|
+
create(opts: {
|
|
133
|
+
cwd: string;
|
|
134
|
+
agent: SandboxAgentRef;
|
|
135
|
+
setup: SandboxSetupFields & {
|
|
136
|
+
run?: (sandbox: SandboxInstance) => Promise<void>;
|
|
137
|
+
} & WithConfig<TConfig>;
|
|
138
|
+
record?: Sandbox;
|
|
139
|
+
signal?: AbortSignal;
|
|
140
|
+
log: Logger;
|
|
141
|
+
}): Promise<{
|
|
142
|
+
instance: SandboxInstance;
|
|
143
|
+
metadata: TMetadata;
|
|
144
|
+
}>;
|
|
145
|
+
connect(opts: {
|
|
146
|
+
agent: SandboxAgentRef;
|
|
147
|
+
metadata: TMetadata;
|
|
148
|
+
signal?: AbortSignal;
|
|
149
|
+
log: Logger;
|
|
150
|
+
}): Promise<SandboxInstance>;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
type LifecycleStepResult = {
|
|
154
|
+
action: "continue";
|
|
155
|
+
nextPollMs: number;
|
|
156
|
+
} | {
|
|
157
|
+
action: "exit";
|
|
158
|
+
reason: "sandboxId_changed" | "idle" | "timeout" | "not_found";
|
|
159
|
+
};
|
|
160
|
+
type LifecycleConfig = {
|
|
161
|
+
pollIntervalMs?: number;
|
|
162
|
+
stopAfterInactiveMs?: number;
|
|
163
|
+
snapshotBeforeTimeoutMs?: number;
|
|
164
|
+
};
|
|
165
|
+
type LifecycleInput = {
|
|
166
|
+
agent: SandboxAgentRef;
|
|
167
|
+
sandboxId: string;
|
|
168
|
+
vercelSandboxId: string;
|
|
169
|
+
config?: LifecycleConfig;
|
|
170
|
+
};
|
|
171
|
+
declare function checkAndSnapshotStep(input: LifecycleInput): Promise<Error | LifecycleStepResult>;
|
|
172
|
+
|
|
173
|
+
export { type ExecResult as E, type LifecycleInput as L, type SandboxBinding as S, type UploadableFile as U, type WithConfig as W, type SandboxSetupFields as a, type SandboxInstance as b, type LoggingConfig as c, type SandboxAgentRef as d, type LifecycleConfig as e, type LifecycleStepResult as f, checkAndSnapshotStep as g };
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import * as _vercel_sandbox from '@vercel/sandbox';
|
|
2
|
+
import { e as Storage, a as Sandbox } from './adapter-BigchkkI.mjs';
|
|
3
|
+
|
|
4
|
+
type LogLevel = "info" | "warn" | "error" | "silent";
|
|
5
|
+
type LogContext = {
|
|
6
|
+
sessionId?: string;
|
|
7
|
+
messageId?: string;
|
|
8
|
+
sandboxId?: string;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
};
|
|
11
|
+
type LoggingConfig = {
|
|
12
|
+
level?: LogLevel;
|
|
13
|
+
/**
|
|
14
|
+
* Top-level label for all log lines.
|
|
15
|
+
* @default "agent"
|
|
16
|
+
* @example "my-app" → [my-app:default:workflow]
|
|
17
|
+
*/
|
|
18
|
+
prefix?: string;
|
|
19
|
+
name?: string;
|
|
20
|
+
};
|
|
21
|
+
declare class Logger {
|
|
22
|
+
readonly subsystem: string;
|
|
23
|
+
private readonly config;
|
|
24
|
+
private readonly context;
|
|
25
|
+
constructor({ subsystem, config, context, }: {
|
|
26
|
+
subsystem: string;
|
|
27
|
+
config: LoggingConfig;
|
|
28
|
+
context?: LogContext;
|
|
29
|
+
});
|
|
30
|
+
child({ subsystem, context, }: {
|
|
31
|
+
subsystem?: string;
|
|
32
|
+
context?: LogContext;
|
|
33
|
+
}): Logger;
|
|
34
|
+
withContext(context: LogContext): Logger;
|
|
35
|
+
info(message: string, data?: Record<string, unknown>): void;
|
|
36
|
+
warn(message: string, data?: Record<string, unknown>): void;
|
|
37
|
+
error(message: string, data?: Record<string, unknown>): void;
|
|
38
|
+
/**
|
|
39
|
+
* Returns a function that, when called, logs the elapsed time at info level.
|
|
40
|
+
* Pass `logOnStart: true` to also log when the timer begins.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* const done = log.time("sandbox setup", { sandboxId }, { logOnStart: true });
|
|
44
|
+
* await setup();
|
|
45
|
+
* done(); // start: [agent:default:sandbox] sandbox setup { sandboxId: '...' }
|
|
46
|
+
* // end: [agent:default:sandbox] sandbox setup { sandboxId: '...', durationMs: 123 }
|
|
47
|
+
*/
|
|
48
|
+
time(message: string, data?: Record<string, unknown>, opts?: {
|
|
49
|
+
logOnStart?: boolean;
|
|
50
|
+
}): (endData?: Record<string, unknown>) => void;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
type ExecResult = {
|
|
54
|
+
commandId: string;
|
|
55
|
+
logs: () => AsyncIterable<{
|
|
56
|
+
stream: "stdout" | "stderr";
|
|
57
|
+
data: string;
|
|
58
|
+
}>;
|
|
59
|
+
result: Promise<{
|
|
60
|
+
stdout: string;
|
|
61
|
+
stderr: string;
|
|
62
|
+
exitCode: number;
|
|
63
|
+
}>;
|
|
64
|
+
};
|
|
65
|
+
type UploadableFile = {
|
|
66
|
+
path: string;
|
|
67
|
+
content: string | Buffer;
|
|
68
|
+
};
|
|
69
|
+
interface SandboxInstance {
|
|
70
|
+
readonly cwd: string;
|
|
71
|
+
exec(opts: {
|
|
72
|
+
command: string;
|
|
73
|
+
args?: string[];
|
|
74
|
+
cwd?: string;
|
|
75
|
+
env?: Record<string, string>;
|
|
76
|
+
sudo?: boolean;
|
|
77
|
+
signal?: AbortSignal;
|
|
78
|
+
}): Promise<ExecResult>;
|
|
79
|
+
readFile(opts: {
|
|
80
|
+
path: string;
|
|
81
|
+
signal?: AbortSignal;
|
|
82
|
+
}): Promise<Buffer | null>;
|
|
83
|
+
writeFiles(opts: {
|
|
84
|
+
files: UploadableFile[];
|
|
85
|
+
destPath: string;
|
|
86
|
+
signal?: AbortSignal;
|
|
87
|
+
}): Promise<void>;
|
|
88
|
+
getDomain(opts: {
|
|
89
|
+
port: number;
|
|
90
|
+
signal?: AbortSignal;
|
|
91
|
+
}): Promise<string>;
|
|
92
|
+
updateNetworkPolicy(opts: {
|
|
93
|
+
policy: _vercel_sandbox.NetworkPolicy;
|
|
94
|
+
signal?: AbortSignal;
|
|
95
|
+
}): Promise<_vercel_sandbox.NetworkPolicy>;
|
|
96
|
+
start(opts?: {
|
|
97
|
+
signal?: AbortSignal;
|
|
98
|
+
}): Promise<void>;
|
|
99
|
+
stop(opts?: {
|
|
100
|
+
signal?: AbortSignal;
|
|
101
|
+
}): Promise<void>;
|
|
102
|
+
snapshot(opts?: {
|
|
103
|
+
signal?: AbortSignal;
|
|
104
|
+
}): Promise<{
|
|
105
|
+
snapshotId: string;
|
|
106
|
+
}>;
|
|
107
|
+
kill(opts: {
|
|
108
|
+
commandId: string;
|
|
109
|
+
signal?: AbortSignal;
|
|
110
|
+
}): Promise<void>;
|
|
111
|
+
getStatus(opts?: {
|
|
112
|
+
signal?: AbortSignal;
|
|
113
|
+
}): Promise<"pending" | "running" | "stopping" | "stopped" | "failed">;
|
|
114
|
+
}
|
|
115
|
+
type SandboxAgentRef = {
|
|
116
|
+
name: string;
|
|
117
|
+
storage: Storage;
|
|
118
|
+
options: {
|
|
119
|
+
logging?: Omit<LoggingConfig, "name">;
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
type WithConfig<TConfig> = unknown extends TConfig ? {
|
|
123
|
+
config?: Record<string, unknown>;
|
|
124
|
+
} : Partial<TConfig> extends TConfig ? {
|
|
125
|
+
config?: TConfig;
|
|
126
|
+
} : {
|
|
127
|
+
config: TConfig;
|
|
128
|
+
};
|
|
129
|
+
type SandboxSetupFields = Omit<Sandbox["setup"], "binding" | "completedAt">;
|
|
130
|
+
type SandboxBinding<TType extends string = string, TConfig = any, TMetadata = any> = {
|
|
131
|
+
type: TType;
|
|
132
|
+
create(opts: {
|
|
133
|
+
cwd: string;
|
|
134
|
+
agent: SandboxAgentRef;
|
|
135
|
+
setup: SandboxSetupFields & {
|
|
136
|
+
run?: (sandbox: SandboxInstance) => Promise<void>;
|
|
137
|
+
} & WithConfig<TConfig>;
|
|
138
|
+
record?: Sandbox;
|
|
139
|
+
signal?: AbortSignal;
|
|
140
|
+
log: Logger;
|
|
141
|
+
}): Promise<{
|
|
142
|
+
instance: SandboxInstance;
|
|
143
|
+
metadata: TMetadata;
|
|
144
|
+
}>;
|
|
145
|
+
connect(opts: {
|
|
146
|
+
agent: SandboxAgentRef;
|
|
147
|
+
metadata: TMetadata;
|
|
148
|
+
signal?: AbortSignal;
|
|
149
|
+
log: Logger;
|
|
150
|
+
}): Promise<SandboxInstance>;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
type LifecycleStepResult = {
|
|
154
|
+
action: "continue";
|
|
155
|
+
nextPollMs: number;
|
|
156
|
+
} | {
|
|
157
|
+
action: "exit";
|
|
158
|
+
reason: "sandboxId_changed" | "idle" | "timeout" | "not_found";
|
|
159
|
+
};
|
|
160
|
+
type LifecycleConfig = {
|
|
161
|
+
pollIntervalMs?: number;
|
|
162
|
+
stopAfterInactiveMs?: number;
|
|
163
|
+
snapshotBeforeTimeoutMs?: number;
|
|
164
|
+
};
|
|
165
|
+
type LifecycleInput = {
|
|
166
|
+
agent: SandboxAgentRef;
|
|
167
|
+
sandboxId: string;
|
|
168
|
+
vercelSandboxId: string;
|
|
169
|
+
config?: LifecycleConfig;
|
|
170
|
+
};
|
|
171
|
+
declare function checkAndSnapshotStep(input: LifecycleInput): Promise<Error | LifecycleStepResult>;
|
|
172
|
+
|
|
173
|
+
export { type ExecResult as E, type LifecycleInput as L, type SandboxBinding as S, type UploadableFile as U, type WithConfig as W, type SandboxSetupFields as a, type SandboxInstance as b, type LoggingConfig as c, type SandboxAgentRef as d, type LifecycleConfig as e, type LifecycleStepResult as f, checkAndSnapshotStep as g };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { S as StorageHandlers } from './adapter-BigchkkI.mjs';
|
|
2
|
+
export { M as Message, P as Part, a as Sandbox, b as Session, c as Setup, d as SetupSnapshot, e as Storage, f as StorageCall, g as StorageStep, h as StorageStepFunction, t as toStorage } from './adapter-BigchkkI.mjs';
|
|
3
|
+
import '@workflow/serde';
|
|
4
|
+
import '@vercel/sandbox';
|
|
5
|
+
import 'ai';
|
|
6
|
+
|
|
7
|
+
declare function localStorage(opts?: {
|
|
8
|
+
dir?: string;
|
|
9
|
+
}): StorageHandlers;
|
|
10
|
+
|
|
11
|
+
export { StorageHandlers, localStorage };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { S as StorageHandlers } from './adapter-BigchkkI.js';
|
|
2
|
+
export { M as Message, P as Part, a as Sandbox, b as Session, c as Setup, d as SetupSnapshot, e as Storage, f as StorageCall, g as StorageStep, h as StorageStepFunction, t as toStorage } from './adapter-BigchkkI.js';
|
|
3
|
+
import '@workflow/serde';
|
|
4
|
+
import '@vercel/sandbox';
|
|
5
|
+
import 'ai';
|
|
6
|
+
|
|
7
|
+
declare function localStorage(opts?: {
|
|
8
|
+
dir?: string;
|
|
9
|
+
}): StorageHandlers;
|
|
10
|
+
|
|
11
|
+
export { StorageHandlers, localStorage };
|
package/dist/storage.js
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/storage/entry.ts
|
|
31
|
+
var entry_exports = {};
|
|
32
|
+
__export(entry_exports, {
|
|
33
|
+
StorageStep: () => StorageStep,
|
|
34
|
+
localStorage: () => localStorage,
|
|
35
|
+
toStorage: () => toStorage
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(entry_exports);
|
|
38
|
+
|
|
39
|
+
// src/storage/adapter.ts
|
|
40
|
+
var import_serde = require("@workflow/serde");
|
|
41
|
+
var StorageStep = class _StorageStep {
|
|
42
|
+
event;
|
|
43
|
+
constructor(event) {
|
|
44
|
+
this.event = event;
|
|
45
|
+
}
|
|
46
|
+
static [import_serde.WORKFLOW_SERIALIZE](instance) {
|
|
47
|
+
return { event: instance.event };
|
|
48
|
+
}
|
|
49
|
+
static [import_serde.WORKFLOW_DESERIALIZE](data) {
|
|
50
|
+
return new _StorageStep(data.event);
|
|
51
|
+
}
|
|
52
|
+
// biome-ignore lint/suspicious/noExplicitAny: safe dispatch — event.method selects the matching handler
|
|
53
|
+
on(handlers) {
|
|
54
|
+
return handlers[this.event.method](this.event);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
function isStepFunction(h) {
|
|
58
|
+
return typeof h === "function";
|
|
59
|
+
}
|
|
60
|
+
function fromStepFunction(fn) {
|
|
61
|
+
return {
|
|
62
|
+
session: {
|
|
63
|
+
get: (id) => fn(new StorageStep({ method: "session.get", id })),
|
|
64
|
+
set: (id, value) => fn(new StorageStep({ method: "session.set", id, value })),
|
|
65
|
+
update: (id, updates) => fn(new StorageStep({ method: "session.update", id, updates }))
|
|
66
|
+
},
|
|
67
|
+
message: {
|
|
68
|
+
get: (id) => fn(new StorageStep({ method: "message.get", id })),
|
|
69
|
+
set: (id, value) => fn(new StorageStep({ method: "message.set", id, value })),
|
|
70
|
+
update: (id, updates) => fn(new StorageStep({ method: "message.update", id, updates })),
|
|
71
|
+
listBySession: (sessionId) => fn(new StorageStep({ method: "message.listBySession", sessionId }))
|
|
72
|
+
},
|
|
73
|
+
part: {
|
|
74
|
+
get: (id) => fn(new StorageStep({ method: "part.get", id })),
|
|
75
|
+
set: (id, value) => fn(new StorageStep({ method: "part.set", id, value })),
|
|
76
|
+
listBySession: (sessionId) => fn(new StorageStep({ method: "part.listBySession", sessionId }))
|
|
77
|
+
},
|
|
78
|
+
sandbox: {
|
|
79
|
+
get: (id) => fn(new StorageStep({ method: "sandbox.get", id })),
|
|
80
|
+
set: (id, value) => fn(new StorageStep({ method: "sandbox.set", id, value })),
|
|
81
|
+
update: (id, updates) => fn(new StorageStep({ method: "sandbox.update", id, updates }))
|
|
82
|
+
},
|
|
83
|
+
setup: {
|
|
84
|
+
get: (id) => fn(new StorageStep({ method: "setup.get", id })),
|
|
85
|
+
set: (id, value) => fn(new StorageStep({ method: "setup.set", id, value }))
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function fromHandlers(h) {
|
|
90
|
+
return {
|
|
91
|
+
session: {
|
|
92
|
+
get: (id) => h["session.get"]({ id }),
|
|
93
|
+
set: (id, value) => h["session.set"]({ id, value }),
|
|
94
|
+
update: (id, updates) => h["session.update"]({ id, updates })
|
|
95
|
+
},
|
|
96
|
+
message: {
|
|
97
|
+
get: (id) => h["message.get"]({ id }),
|
|
98
|
+
set: (id, value) => h["message.set"]({ id, value }),
|
|
99
|
+
update: (id, updates) => h["message.update"]({ id, updates }),
|
|
100
|
+
listBySession: (sessionId) => h["message.listBySession"]({ sessionId })
|
|
101
|
+
},
|
|
102
|
+
part: {
|
|
103
|
+
get: (id) => h["part.get"]({ id }),
|
|
104
|
+
set: (id, value) => h["part.set"]({ id, value }),
|
|
105
|
+
listBySession: (sessionId) => h["part.listBySession"]({ sessionId })
|
|
106
|
+
},
|
|
107
|
+
sandbox: {
|
|
108
|
+
get: (id) => h["sandbox.get"]({ id }),
|
|
109
|
+
set: (id, value) => h["sandbox.set"]({ id, value }),
|
|
110
|
+
update: (id, updates) => h["sandbox.update"]({ id, updates })
|
|
111
|
+
},
|
|
112
|
+
setup: {
|
|
113
|
+
get: (id) => h["setup.get"]({ id }),
|
|
114
|
+
set: (id, value) => h["setup.set"]({ id, value })
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function toStorage(h) {
|
|
119
|
+
return isStepFunction(h) ? fromStepFunction(h) : fromHandlers(h);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// src/storage/bindings/local.ts
|
|
123
|
+
var _fs;
|
|
124
|
+
var _path;
|
|
125
|
+
async function fs() {
|
|
126
|
+
if (!_fs) {
|
|
127
|
+
_fs = await import("fs/promises");
|
|
128
|
+
}
|
|
129
|
+
return _fs;
|
|
130
|
+
}
|
|
131
|
+
async function path() {
|
|
132
|
+
if (!_path) {
|
|
133
|
+
_path = await import("path");
|
|
134
|
+
}
|
|
135
|
+
return _path;
|
|
136
|
+
}
|
|
137
|
+
function createStore(dir) {
|
|
138
|
+
const filePath = async (key) => (await path()).join(dir, `${key}.json`);
|
|
139
|
+
return {
|
|
140
|
+
async get(key) {
|
|
141
|
+
try {
|
|
142
|
+
const data = await (await fs()).readFile(await filePath(key), "utf-8");
|
|
143
|
+
return JSON.parse(data);
|
|
144
|
+
} catch {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
async set(key, value) {
|
|
149
|
+
const p = await filePath(key);
|
|
150
|
+
const { mkdir, writeFile } = await fs();
|
|
151
|
+
const { dirname } = await path();
|
|
152
|
+
await mkdir(dirname(p), { recursive: true });
|
|
153
|
+
await writeFile(p, JSON.stringify(value, null, 2));
|
|
154
|
+
},
|
|
155
|
+
async update(key, updates) {
|
|
156
|
+
const p = await filePath(key);
|
|
157
|
+
const { readFile, mkdir, writeFile } = await fs();
|
|
158
|
+
const { dirname } = await path();
|
|
159
|
+
let existing;
|
|
160
|
+
try {
|
|
161
|
+
const data = await readFile(p, "utf-8");
|
|
162
|
+
existing = JSON.parse(data);
|
|
163
|
+
} catch {
|
|
164
|
+
throw new Error(`Not found: ${key}`);
|
|
165
|
+
}
|
|
166
|
+
const updated = { ...existing, ...updates };
|
|
167
|
+
await mkdir(dirname(p), { recursive: true });
|
|
168
|
+
await writeFile(p, JSON.stringify(updated, null, 2));
|
|
169
|
+
return updated;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
async function readAllFromDir(dir) {
|
|
174
|
+
const { readdir, readFile } = await fs();
|
|
175
|
+
const { join } = await path();
|
|
176
|
+
let files;
|
|
177
|
+
try {
|
|
178
|
+
files = await readdir(dir);
|
|
179
|
+
} catch {
|
|
180
|
+
return [];
|
|
181
|
+
}
|
|
182
|
+
const result = [];
|
|
183
|
+
for (const file of files) {
|
|
184
|
+
if (!file.endsWith(".json")) {
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
const data = await readFile(join(dir, file), "utf-8");
|
|
189
|
+
result.push(JSON.parse(data));
|
|
190
|
+
} catch {
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
function localStorage(opts) {
|
|
196
|
+
const dir = opts?.dir ?? ".agent";
|
|
197
|
+
const sessionStore = createStore(`${dir}/session`);
|
|
198
|
+
const messageStore = createStore(`${dir}/message`);
|
|
199
|
+
const partStore = createStore(`${dir}/part`);
|
|
200
|
+
const sandboxStore = createStore(`${dir}/sandbox`);
|
|
201
|
+
const setupStore = createStore(`${dir}/setup`);
|
|
202
|
+
const messageDir = `${dir}/message`;
|
|
203
|
+
const partDir = `${dir}/part`;
|
|
204
|
+
return {
|
|
205
|
+
"session.get": ({ id }) => sessionStore.get(id),
|
|
206
|
+
"session.set": ({ id, value }) => sessionStore.set(id, value),
|
|
207
|
+
"session.update": ({ id, updates }) => sessionStore.update(id, updates),
|
|
208
|
+
"message.get": ({ id }) => messageStore.get(id),
|
|
209
|
+
"message.set": ({ id, value }) => messageStore.set(id, value),
|
|
210
|
+
"message.update": ({ id, updates }) => messageStore.update(id, updates),
|
|
211
|
+
"message.listBySession": async ({ sessionId }) => {
|
|
212
|
+
const all = await readAllFromDir(messageDir);
|
|
213
|
+
return all.filter((m) => m.sessionId === sessionId);
|
|
214
|
+
},
|
|
215
|
+
"part.get": ({ id }) => partStore.get(id),
|
|
216
|
+
"part.set": ({ id, value }) => partStore.set(id, value),
|
|
217
|
+
"part.listBySession": async ({ sessionId }) => {
|
|
218
|
+
const all = await readAllFromDir(partDir);
|
|
219
|
+
return all.filter((p) => p.sessionId === sessionId);
|
|
220
|
+
},
|
|
221
|
+
"sandbox.get": ({ id }) => sandboxStore.get(id),
|
|
222
|
+
"sandbox.set": ({ id, value }) => sandboxStore.set(id, value),
|
|
223
|
+
"sandbox.update": ({ id, updates }) => sandboxStore.update(id, updates),
|
|
224
|
+
"setup.get": ({ id }) => setupStore.get(id),
|
|
225
|
+
"setup.set": ({ id, value }) => setupStore.set(id, value)
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
229
|
+
0 && (module.exports = {
|
|
230
|
+
StorageStep,
|
|
231
|
+
localStorage,
|
|
232
|
+
toStorage
|
|
233
|
+
});
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvZW50cnkudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYWRhcHRlci50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9sb2NhbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IHR5cGUgeyBTdG9yYWdlLCBTdG9yYWdlQ2FsbCwgU3RvcmFnZUhhbmRsZXJzLCBTdG9yYWdlU3RlcEZ1bmN0aW9uIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0IHsgU3RvcmFnZVN0ZXAsIHRvU3RvcmFnZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCB7IGxvY2FsU3RvcmFnZSB9IGZyb20gXCIuL2JpbmRpbmdzL2xvY2FsXCI7XG5leHBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQsIFNhbmRib3gsIFNlc3Npb24sIFNldHVwLCBTZXR1cFNuYXBzaG90IH0gZnJvbSBcIi4vdHlwZXNcIjtcbiIsICJpbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSBcIkB3b3JrZmxvdy9zZXJkZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlSGFuZGxlcnMgKHB1YmxpYywgZmxhdCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VIYW5kbGVycyA9IHtcbiAgXCJzZXNzaW9uLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gIFwic2Vzc2lvbi5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTZXNzaW9uIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNlc3Npb24udXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTZXNzaW9uPjtcbiAgfSk6IFByb21pc2U8U2Vzc2lvbj47XG5cbiAgXCJtZXNzYWdlLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlIHwgbnVsbD47XG4gIFwibWVzc2FnZS5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBNZXNzYWdlIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcIm1lc3NhZ2UudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPjtcbiAgfSk6IFByb21pc2U8TWVzc2FnZT47XG4gIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCIocDogeyBzZXNzaW9uSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlW10+O1xuXG4gIFwicGFydC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICBcInBhcnQuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogUGFydCB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIihwOiB7IHNlc3Npb25JZDogc3RyaW5nIH0pOiBQcm9taXNlPFBhcnRbXT47XG5cbiAgXCJzYW5kYm94LmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTYW5kYm94IHwgbnVsbD47XG4gIFwic2FuZGJveC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTYW5kYm94IH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNhbmRib3gudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTYW5kYm94PjtcbiAgfSk6IFByb21pc2U8U2FuZGJveD47XG5cbiAgXCJzZXR1cC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgXCJzZXR1cC5zZXRcIihwOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB2YWx1ZTogU2V0dXA7XG4gIH0pOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VDYWxsIChkZXJpdmVkIGZyb20gU3RvcmFnZUhhbmRsZXJzKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgU3RvcmFnZUNhbGwgPSB7XG4gIFtLIGluIGtleW9mIFN0b3JhZ2VIYW5kbGVyc106IHsgbWV0aG9kOiBLIH0gJiBQYXJhbWV0ZXJzPFxuICAgIFN0b3JhZ2VIYW5kbGVyc1tLXVxuICA+WzBdO1xufVtrZXlvZiBTdG9yYWdlSGFuZGxlcnNdO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZVN0ZXAgKHNlcmlhbGl6YWJsZSBhY3Jvc3Mgd29ya2Zsb3cgYm91bmRhcnkpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgY2xhc3MgU3RvcmFnZVN0ZXAge1xuICBldmVudDogU3RvcmFnZUNhbGw7XG5cbiAgY29uc3RydWN0b3IoZXZlbnQ6IFN0b3JhZ2VDYWxsKSB7XG4gICAgdGhpcy5ldmVudCA9IGV2ZW50O1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlOiBTdG9yYWdlU3RlcCkge1xuICAgIHJldHVybiB7IGV2ZW50OiBpbnN0YW5jZS5ldmVudCB9O1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19ERVNFUklBTElaRV0oZGF0YTogeyBldmVudDogU3RvcmFnZUNhbGwgfSkge1xuICAgIHJldHVybiBuZXcgU3RvcmFnZVN0ZXAoZGF0YS5ldmVudCk7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHNhZmUgZGlzcGF0Y2ggXHUyMDE0IGV2ZW50Lm1ldGhvZCBzZWxlY3RzIHRoZSBtYXRjaGluZyBoYW5kbGVyXG4gIG9uKGhhbmRsZXJzOiBTdG9yYWdlSGFuZGxlcnMpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc2VlIGFib3ZlXG4gICAgcmV0dXJuIChoYW5kbGVyc1t0aGlzLmV2ZW50Lm1ldGhvZF0gYXMgYW55KSh0aGlzLmV2ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc2luZ2xlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhbGwgc3RvcmFnZSBvcGVyYXRpb25zLiBJbnRlbmRlZCB0byBiZVxuICogbWFya2VkIHdpdGggYFwidXNlIHN0ZXBcImAgc28gdGhhdCBpdHMgYm9keSAoYW5kIE5vZGUuanMtZGVwZW5kZW50XG4gKiBpbXBvcnRzIGxpa2UgZGF0YWJhc2UgY2xpZW50cykgaXMgZXh0cmFjdGVkIGJ5IHRoZSB3b3JrZmxvdyBidW5kbGVyXG4gKiBhbmQgcnVucyBzZXJ2ZXItc2lkZS5cbiAqXG4gKiBUaGUgc3RlcCByZWNlaXZlcyBhIGBTdG9yYWdlU3RlcGAgaW5zdGFuY2UgKHNlcmlhbGl6YWJsZSB2aWFcbiAqIGBAd29ya2Zsb3cvc2VyZGVgKSBhbmQgc2hvdWxkIGNhbGwgYHN0ZXAuaGFuZGxlKHsgLi4uIH0pYCB3aXRoIGFcbiAqIGBTdG9yYWdlSGFuZGxlcnNgIG1hcC5cbiAqL1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzdGVwIGZ1bmN0aW9uIGlzIGEgZGlzcGF0Y2hlcjsgdHlwZSBzYWZldHkgaXMgYXQgdGhlIGhhbmRsZXJzIGxldmVsXG5leHBvcnQgdHlwZSBTdG9yYWdlU3RlcEZ1bmN0aW9uID0gKHN0b3JlOiBTdG9yYWdlU3RlcCkgPT4gUHJvbWlzZTxhbnk+O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZSAoaW50ZXJuYWwsIG5lc3RlZCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZSB7XG4gIHNlc3Npb246IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNlc3Npb24gfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXNzaW9uKTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8U2Vzc2lvbj4pOiBQcm9taXNlPFNlc3Npb24+O1xuICB9O1xuICBtZXNzYWdlOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogTWVzc2FnZSk6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPE1lc3NhZ2U+KTogUHJvbWlzZTxNZXNzYWdlPjtcbiAgICBsaXN0QnlTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlW10+O1xuICB9O1xuICBwYXJ0OiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxQYXJ0IHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogUGFydCk6IFByb21pc2U8dm9pZD47XG4gICAgbGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8UGFydFtdPjtcbiAgfTtcbiAgc2FuZGJveDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2FuZGJveCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFNhbmRib3gpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxTYW5kYm94Pik6IFByb21pc2U8U2FuZGJveD47XG4gIH07XG4gIHNldHVwOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTZXR1cCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFNldHVwKTogUHJvbWlzZTx2b2lkPjtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU3RvcmFnZUlucHV0ID0gU3RvcmFnZUhhbmRsZXJzIHwgU3RvcmFnZVN0ZXBGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNTdGVwRnVuY3Rpb24oaDogU3RvcmFnZUlucHV0KTogaCBpcyBTdG9yYWdlU3RlcEZ1bmN0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiBoID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmZ1bmN0aW9uIGZyb21TdGVwRnVuY3Rpb24oZm46IFN0b3JhZ2VTdGVwRnVuY3Rpb24pOiBTdG9yYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24uZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24uc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24udXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiLCBzZXNzaW9uSWQgfSkpLFxuICAgIH0sXG4gICAgcGFydDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0LmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0LnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInBhcnQubGlzdEJ5U2Vzc2lvblwiLCBzZXNzaW9uSWQgfSkpLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgfSxcbiAgICBzZXR1cDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXR1cC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2V0dXAuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZnJvbUhhbmRsZXJzKGg6IFN0b3JhZ2VIYW5kbGVycyk6IFN0b3JhZ2Uge1xuICByZXR1cm4ge1xuICAgIHNlc3Npb246IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2Vzc2lvbi5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNlc3Npb24uc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJzZXNzaW9uLnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgIH0sXG4gICAgbWVzc2FnZToge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJtZXNzYWdlLmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wibWVzc2FnZS5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT4gaFtcIm1lc3NhZ2UudXBkYXRlXCJdKHsgaWQsIHVwZGF0ZXMgfSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PiBoW1wibWVzc2FnZS5saXN0QnlTZXNzaW9uXCJdKHsgc2Vzc2lvbklkIH0pLFxuICAgIH0sXG4gICAgcGFydDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJwYXJ0LmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wicGFydC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PiBoW1wicGFydC5saXN0QnlTZXNzaW9uXCJdKHsgc2Vzc2lvbklkIH0pLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJzYW5kYm94LmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wic2FuZGJveC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT4gaFtcInNhbmRib3gudXBkYXRlXCJdKHsgaWQsIHVwZGF0ZXMgfSksXG4gICAgfSxcbiAgICBzZXR1cDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJzZXR1cC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNldHVwLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TdG9yYWdlKGg6IFN0b3JhZ2VJbnB1dCk6IFN0b3JhZ2Uge1xuICByZXR1cm4gaXNTdGVwRnVuY3Rpb24oaCkgPyBmcm9tU3RlcEZ1bmN0aW9uKGgpIDogZnJvbUhhbmRsZXJzKGgpO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgTWVzc2FnZSxcbiAgUGFydCxcbiAgU2FuZGJveCxcbiAgU2Vzc2lvbixcbiAgU2V0dXAsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTdG9yYWdlSGFuZGxlcnMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5sZXQgX2ZzOiB0eXBlb2YgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKSB8IHVuZGVmaW5lZDtcbmxldCBfcGF0aDogdHlwZW9mIGltcG9ydChcIm5vZGU6cGF0aFwiKSB8IHVuZGVmaW5lZDtcblxuYXN5bmMgZnVuY3Rpb24gZnMoKSB7XG4gIGlmICghX2ZzKSB7XG4gICAgX2ZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgfVxuICByZXR1cm4gX2ZzO1xufVxuYXN5bmMgZnVuY3Rpb24gcGF0aCgpIHtcbiAgaWYgKCFfcGF0aCkge1xuICAgIF9wYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICB9XG4gIHJldHVybiBfcGF0aDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RvcmU8VD4oZGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgZmlsZVBhdGggPSBhc3luYyAoa2V5OiBzdHJpbmcpID0+XG4gICAgKGF3YWl0IHBhdGgoKSkuam9pbihkaXIsIGAke2tleX0uanNvbmApO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IChhd2FpdCBmcygpKS5yZWFkRmlsZShhd2FpdCBmaWxlUGF0aChrZXkpLCBcInV0Zi04XCIpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGZpbGVQYXRoKGtleSk7XG4gICAgICBjb25zdCB7IG1rZGlyLCB3cml0ZUZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gICAgICBjb25zdCB7IGRpcm5hbWUgfSA9IGF3YWl0IHBhdGgoKTtcbiAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHAsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSk7XG4gICAgfSxcbiAgICBhc3luYyB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgIGNvbnN0IHAgPSBhd2FpdCBmaWxlUGF0aChrZXkpO1xuICAgICAgY29uc3QgeyByZWFkRmlsZSwgbWtkaXIsIHdyaXRlRmlsZSB9ID0gYXdhaXQgZnMoKTtcbiAgICAgIGNvbnN0IHsgZGlybmFtZSB9ID0gYXdhaXQgcGF0aCgpO1xuICAgICAgbGV0IGV4aXN0aW5nOiBUO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKHAsIFwidXRmLThcIik7XG4gICAgICAgIGV4aXN0aW5nID0gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGZvdW5kOiAke2tleX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi51cGRhdGVzIH07XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKHApLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShwLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkLCBudWxsLCAyKSk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsRnJvbURpcjxUPihkaXI6IHN0cmluZyk6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHsgcmVhZGRpciwgcmVhZEZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgcGF0aCgpO1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdO1xuICB0cnkge1xuICAgIGZpbGVzID0gYXdhaXQgcmVhZGRpcihkaXIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcmVzdWx0OiBUW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcbiAgICAgIHJlc3VsdC5wdXNoKEpTT04ucGFyc2UoZGF0YSkgYXMgVCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBza2lwIGNvcnJ1cHQgZmlsZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsU3RvcmFnZShvcHRzPzogeyBkaXI/OiBzdHJpbmcgfSk6IFN0b3JhZ2VIYW5kbGVycyB7XG4gIGNvbnN0IGRpciA9IG9wdHM/LmRpciA/PyBcIi5hZ2VudFwiO1xuXG4gIGNvbnN0IHNlc3Npb25TdG9yZSA9IGNyZWF0ZVN0b3JlPFNlc3Npb24+KGAke2Rpcn0vc2Vzc2lvbmApO1xuICBjb25zdCBtZXNzYWdlU3RvcmUgPSBjcmVhdGVTdG9yZTxNZXNzYWdlPihgJHtkaXJ9L21lc3NhZ2VgKTtcbiAgY29uc3QgcGFydFN0b3JlID0gY3JlYXRlU3RvcmU8UGFydD4oYCR7ZGlyfS9wYXJ0YCk7XG4gIGNvbnN0IHNhbmRib3hTdG9yZSA9IGNyZWF0ZVN0b3JlPFNhbmRib3g+KGAke2Rpcn0vc2FuZGJveGApO1xuICBjb25zdCBzZXR1cFN0b3JlID0gY3JlYXRlU3RvcmU8U2V0dXA+KGAke2Rpcn0vc2V0dXBgKTtcbiAgY29uc3QgbWVzc2FnZURpciA9IGAke2Rpcn0vbWVzc2FnZWA7XG4gIGNvbnN0IHBhcnREaXIgPSBgJHtkaXJ9L3BhcnRgO1xuXG4gIHJldHVybiB7XG4gICAgXCJzZXNzaW9uLmdldFwiOiAoeyBpZCB9KSA9PiBzZXNzaW9uU3RvcmUuZ2V0KGlkKSxcbiAgICBcInNlc3Npb24uc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBzZXNzaW9uU3RvcmUuc2V0KGlkLCB2YWx1ZSksXG4gICAgXCJzZXNzaW9uLnVwZGF0ZVwiOiAoeyBpZCwgdXBkYXRlcyB9KSA9PiBzZXNzaW9uU3RvcmUudXBkYXRlKGlkLCB1cGRhdGVzKSxcblxuICAgIFwibWVzc2FnZS5nZXRcIjogKHsgaWQgfSkgPT4gbWVzc2FnZVN0b3JlLmdldChpZCksXG4gICAgXCJtZXNzYWdlLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gbWVzc2FnZVN0b3JlLnNldChpZCwgdmFsdWUpLFxuICAgIFwibWVzc2FnZS51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT4gbWVzc2FnZVN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcyksXG4gICAgXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPE1lc3NhZ2U+KG1lc3NhZ2VEaXIpO1xuICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoKG0pID0+IG0uc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgIH0sXG5cbiAgICBcInBhcnQuZ2V0XCI6ICh7IGlkIH0pID0+IHBhcnRTdG9yZS5nZXQoaWQpLFxuICAgIFwicGFydC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IHBhcnRTdG9yZS5zZXQoaWQsIHZhbHVlKSxcbiAgICBcInBhcnQubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8UGFydD4ocGFydERpcik7XG4gICAgICByZXR1cm4gYWxsLmZpbHRlcigocCkgPT4gcC5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5nZXRcIjogKHsgaWQgfSkgPT4gc2FuZGJveFN0b3JlLmdldChpZCksXG4gICAgXCJzYW5kYm94LnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gc2FuZGJveFN0b3JlLnNldChpZCwgdmFsdWUpLFxuICAgIFwic2FuZGJveC51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT4gc2FuZGJveFN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcyksXG5cbiAgICBcInNldHVwLmdldFwiOiAoeyBpZCB9KSA9PiBzZXR1cFN0b3JlLmdldChpZCksXG4gICAgXCJzZXR1cC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IHNldHVwU3RvcmUuc2V0KGlkLCB2YWx1ZSksXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUEsbUJBQXlEO0FBaURsRCxJQUFNLGNBQU4sTUFBTSxhQUFZO0FBQUEsRUFDdkI7QUFBQSxFQUVBLFlBQVksT0FBb0I7QUFDOUIsU0FBSyxRQUFRO0FBQUEsRUFDZjtBQUFBLEVBRUEsUUFBUSwrQkFBa0IsRUFBRSxVQUF1QjtBQUNqRCxXQUFPLEVBQUUsT0FBTyxTQUFTLE1BQU07QUFBQSxFQUNqQztBQUFBLEVBRUEsUUFBUSxpQ0FBb0IsRUFBRSxNQUE4QjtBQUMxRCxXQUFPLElBQUksYUFBWSxLQUFLLEtBQUs7QUFBQSxFQUNuQztBQUFBO0FBQUEsRUFHQSxHQUFHLFVBQXlDO0FBRTFDLFdBQVEsU0FBUyxLQUFLLE1BQU0sTUFBTSxFQUFVLEtBQUssS0FBSztBQUFBLEVBQ3hEO0FBQ0Y7QUErQ0EsU0FBUyxlQUFlLEdBQTJDO0FBQ2pFLFNBQU8sT0FBTyxNQUFNO0FBQ3RCO0FBRUEsU0FBUyxpQkFBaUIsSUFBa0M7QUFDMUQsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLE1BQ1AsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFBQSxNQUM5RCxLQUFLLENB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
|
package/dist/storage.mjs
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
StorageStep,
|
|
3
|
+
localStorage,
|
|
4
|
+
toStorage
|
|
5
|
+
} from "./chunk-DOD4MC5D.mjs";
|
|
6
|
+
import "./chunk-BJTO5JO5.mjs";
|
|
7
|
+
export {
|
|
8
|
+
StorageStep,
|
|
9
|
+
localStorage,
|
|
10
|
+
toStorage
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
|