@alpic-ai/sdk 0.0.0-dev.gc47cbb1 → 0.0.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.
Files changed (41) hide show
  1. package/package.json +4 -49
  2. package/dist/api/client.d.ts +0 -7
  3. package/dist/api/client.js +0 -22
  4. package/dist/api/client.js.map +0 -1
  5. package/dist/auth/constants.d.ts +0 -2
  6. package/dist/auth/constants.js +0 -3
  7. package/dist/auth/constants.js.map +0 -1
  8. package/dist/auth/index.d.ts +0 -12
  9. package/dist/auth/index.js +0 -21
  10. package/dist/auth/index.js.map +0 -1
  11. package/dist/auth/login.d.ts +0 -7
  12. package/dist/auth/login.js +0 -21
  13. package/dist/auth/login.js.map +0 -1
  14. package/dist/auth/oauth-client.d.ts +0 -28
  15. package/dist/auth/oauth-client.js +0 -116
  16. package/dist/auth/oauth-client.js.map +0 -1
  17. package/dist/auth/server/assets/alpic-mountain.png +0 -0
  18. package/dist/auth/server/assets/authorize.html +0 -234
  19. package/dist/auth/server/assets/callback.html +0 -88
  20. package/dist/auth/server/index.d.ts +0 -14
  21. package/dist/auth/server/index.js +0 -128
  22. package/dist/auth/server/index.js.map +0 -1
  23. package/dist/auth/store.d.ts +0 -30
  24. package/dist/auth/store.js +0 -76
  25. package/dist/auth/store.js.map +0 -1
  26. package/dist/client.d.ts +0 -13
  27. package/dist/client.js +0 -32
  28. package/dist/client.js.map +0 -1
  29. package/dist/env.d.ts +0 -4
  30. package/dist/env.js +0 -10
  31. package/dist/env.js.map +0 -1
  32. package/dist/index.d.ts +0 -8
  33. package/dist/index.js +0 -5
  34. package/dist/index.js.map +0 -1
  35. package/dist/tunnel/tunnel.d.ts +0 -40
  36. package/dist/tunnel/tunnel.js +0 -52
  37. package/dist/tunnel/tunnel.js.map +0 -1
  38. package/dist/vendor/pipenet.d.ts +0 -1
  39. package/dist/vendor/pipenet.js +0 -16877
  40. package/dist/vendor/pipenet.js.LEGAL.txt +0 -17
  41. package/dist/vendor/pipenet.js.map +0 -7
@@ -1,128 +0,0 @@
1
- import { readFile } from "node:fs/promises";
2
- import { createServer } from "node:http";
3
- import path from "node:path";
4
- import { fileURLToPath } from "node:url";
5
- import { LOOPBACK_HOST, LOOPBACK_PORT } from "../constants.js";
6
- import { getOAuthClient } from "../oauth-client.js";
7
- const noopLogger = { log: () => { }, error: () => { } };
8
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
- const ASSETS_DIR = path.join(__dirname, "assets");
10
- const createCallbackServer = ({ state, nonce, codeVerifier, authorizeUrl, onSuccess, onError, logger = noopLogger, }) => createServer(async (req, res) => {
11
- const url = req.url ?? "/";
12
- const pathname = url.split("?")[0] ?? "/";
13
- if (pathname === "/login") {
14
- try {
15
- const htmlPath = path.join(ASSETS_DIR, "authorize.html");
16
- let html = await readFile(htmlPath, "utf-8");
17
- if (authorizeUrl) {
18
- html = html.replace(/%AUTH_BASE_URL%/g, authorizeUrl);
19
- }
20
- res.writeHead(200, {
21
- "Content-Type": "text/html",
22
- Connection: "close",
23
- });
24
- res.end(html);
25
- return;
26
- }
27
- catch (e) {
28
- const msg = e instanceof Error ? e.message : String(e);
29
- logger.error(msg);
30
- res.writeHead(500).end();
31
- return;
32
- }
33
- }
34
- if (pathname === "/assets/alpic-mountain.png") {
35
- const filePath = path.join(ASSETS_DIR, "alpic-mountain.png");
36
- const content = await readFile(filePath);
37
- res.writeHead(200, { "Content-Type": "image/png", Connection: "close" });
38
- res.end(content);
39
- return;
40
- }
41
- if (!url.startsWith("/callback")) {
42
- res.writeHead(404).end();
43
- return;
44
- }
45
- try {
46
- const tokens = await getOAuthClient().exchangeAuthorizationCode({
47
- url: new URL(url, `http://${req.headers.host}`),
48
- codeVerifier,
49
- state,
50
- nonce,
51
- });
52
- const sub = tokens.claims()?.sub;
53
- if (!sub || !tokens.refresh_token) {
54
- throw new Error("ID token did not contain sub");
55
- }
56
- const stored = {
57
- access_token: tokens.access_token,
58
- refresh_token: tokens.refresh_token,
59
- expires_at: getOAuthClient().getExpiresAt(tokens.expires_in ?? 0),
60
- sub,
61
- };
62
- const msg = "Authentication successful";
63
- logger.log(msg);
64
- const successHtmlPath = path.join(ASSETS_DIR, "callback.html");
65
- let html = await readFile(successHtmlPath, "utf-8");
66
- html = html
67
- .replace(/__CALLBACK_STATUS__/g, "success")
68
- .replace(/__CALLBACK_TITLE__/g, "You are logged in")
69
- .replace(/__CALLBACK_SUB__/g, "You can close this page.");
70
- res.writeHead(200, { "Content-Type": "text/html", Connection: "close" });
71
- res.end(html);
72
- onSuccess(stored);
73
- }
74
- catch (e) {
75
- const msg = e instanceof Error ? e.message : String(e);
76
- logger.error(msg);
77
- const callbackHtmlPath = path.join(ASSETS_DIR, "callback.html");
78
- let html = await readFile(callbackHtmlPath, "utf-8");
79
- html = html
80
- .replace(/__CALLBACK_STATUS__/g, "error")
81
- .replace(/__CALLBACK_TITLE__/g, "An error occurred. You can close this page.")
82
- .replace(/__CALLBACK_SUB__/g, "");
83
- res.writeHead(500, { "Content-Type": "text/html", Connection: "close" });
84
- res.end(html);
85
- onError(e instanceof Error ? e : new Error(String(e)));
86
- }
87
- });
88
- export const getLoginPageUrl = () => `http://${LOOPBACK_HOST}:${LOOPBACK_PORT}/login`;
89
- const LOGIN_TIMEOUT_MS = 5 * 60 * 1000;
90
- export const listenToOAuthCallback = ({ state, nonce, codeVerifier, authorizeUrl, logger = noopLogger, }) => {
91
- return new Promise((resolve, reject) => {
92
- let timeoutHandle;
93
- const callbackServer = createCallbackServer({
94
- state,
95
- nonce,
96
- codeVerifier,
97
- authorizeUrl,
98
- logger,
99
- onSuccess: (storedToken) => {
100
- clearTimeout(timeoutHandle);
101
- callbackServer.close();
102
- resolve(storedToken);
103
- },
104
- onError: (err) => {
105
- clearTimeout(timeoutHandle);
106
- callbackServer.close();
107
- reject(err);
108
- },
109
- });
110
- callbackServer.on("error", (err) => {
111
- clearTimeout(timeoutHandle);
112
- callbackServer.close();
113
- if (err.code === "EADDRINUSE") {
114
- reject(new Error(`Port ${LOOPBACK_PORT} is already in use. Another login may be in progress. Please try again.`));
115
- }
116
- else {
117
- reject(err);
118
- }
119
- });
120
- timeoutHandle = setTimeout(() => {
121
- callbackServer.close();
122
- reject(new Error("Login timed out after 5 minutes. Please try again."));
123
- }, LOGIN_TIMEOUT_MS);
124
- timeoutHandle.unref();
125
- callbackServer.listen(LOOPBACK_PORT, LOOPBACK_HOST);
126
- });
127
- };
128
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/server/index.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- export interface Credentials {
2
- access_token: string;
3
- refresh_token: string;
4
- expires_at: number;
5
- sub: string;
6
- }
7
- export interface Config {
8
- machineId: string;
9
- telemetry: {
10
- enabled: boolean;
11
- };
12
- }
13
- export declare class GlobalStore {
14
- private readonly configDir;
15
- constructor(opts?: {
16
- configDir?: string;
17
- });
18
- getCredentials(): Credentials | null;
19
- saveCredentials(credentials: Credentials): void;
20
- clearCredentials(): void;
21
- getConfig(): Config;
22
- saveConfig(config: Config): void;
23
- clearConfig(): void;
24
- private getCredentialsFilePath;
25
- private getConfigFilePath;
26
- private parseJsonFile;
27
- private saveJsonFile;
28
- private clear;
29
- }
30
- export declare const globalStore: GlobalStore;
@@ -1,76 +0,0 @@
1
- import crypto from "node:crypto";
2
- import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
3
- import { join } from "node:path";
4
- import envPaths from "env-paths";
5
- export class GlobalStore {
6
- configDir;
7
- constructor(opts) {
8
- const configDirOverride = opts?.configDir ?? process.env.ALPIC_GLOBAL_CONFIG_DIR;
9
- this.configDir = configDirOverride ?? envPaths("alpic", { suffix: "" }).config;
10
- }
11
- getCredentials() {
12
- const token = this.parseJsonFile(this.getCredentialsFilePath());
13
- if (!token) {
14
- return null;
15
- }
16
- return token;
17
- }
18
- saveCredentials(credentials) {
19
- this.saveJsonFile(this.getCredentialsFilePath(), credentials);
20
- }
21
- clearCredentials() {
22
- this.clear(this.getCredentialsFilePath());
23
- }
24
- getConfig() {
25
- const existing = this.parseJsonFile(this.getConfigFilePath());
26
- if (existing?.machineId && existing?.telemetry !== undefined) {
27
- return existing;
28
- }
29
- const config = {
30
- machineId: existing?.machineId ?? crypto.randomUUID(),
31
- telemetry: {
32
- enabled: existing?.telemetry?.enabled ?? true,
33
- },
34
- };
35
- this.saveConfig(config);
36
- return config;
37
- }
38
- saveConfig(config) {
39
- this.saveJsonFile(this.getConfigFilePath(), config);
40
- }
41
- clearConfig() {
42
- this.clear(this.getConfigFilePath());
43
- }
44
- getCredentialsFilePath() {
45
- return join(this.configDir, "credentials.json");
46
- }
47
- getConfigFilePath() {
48
- return join(this.configDir, "config.json");
49
- }
50
- parseJsonFile(filePath) {
51
- if (!existsSync(filePath)) {
52
- return null;
53
- }
54
- try {
55
- return JSON.parse(readFileSync(filePath, "utf-8"));
56
- }
57
- catch {
58
- this.clear(filePath);
59
- return null;
60
- }
61
- }
62
- saveJsonFile(filePath, data) {
63
- mkdirSync(this.configDir, { recursive: true });
64
- writeFileSync(filePath, JSON.stringify(data, null, 2), {
65
- encoding: "utf-8",
66
- mode: 0o600,
67
- });
68
- }
69
- clear(filePath) {
70
- if (existsSync(filePath)) {
71
- unlinkSync(filePath);
72
- }
73
- }
74
- }
75
- export const globalStore = new GlobalStore();
76
- //# sourceMappingURL=store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/auth/store.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts DELETED
@@ -1,13 +0,0 @@
1
- import { type AlpicApi } from "./api/client.js";
2
- import { AlpicAuth } from "./auth/index.js";
3
- import { createTunnel, type TunnelHandle } from "./tunnel/tunnel.js";
4
- export type AlpicClientOptions = {
5
- apiBaseUrl?: string;
6
- };
7
- export declare class AlpicClient {
8
- readonly auth: AlpicAuth;
9
- readonly api: AlpicApi;
10
- readonly tunnel: ReturnType<typeof createTunnel>;
11
- constructor(opts?: AlpicClientOptions);
12
- }
13
- export type { TunnelHandle };
package/dist/client.js DELETED
@@ -1,32 +0,0 @@
1
- import { createApiClient } from "./api/client.js";
2
- import { AlpicAuth } from "./auth/index.js";
3
- import { env } from "./env.js";
4
- import { createTunnel } from "./tunnel/tunnel.js";
5
- export class AlpicClient {
6
- auth;
7
- api;
8
- tunnel;
9
- constructor(opts) {
10
- const apiBaseUrl = opts?.apiBaseUrl ?? env.ALPIC_API_BASE_URL;
11
- this.auth = new AlpicAuth();
12
- this.api = createApiClient({
13
- apiBaseUrl,
14
- getToken: () => this.auth.getToken(),
15
- });
16
- this.tunnel = createTunnel({
17
- api: this.api,
18
- ensureToken: async ({ autoLogin = true, onLoginUrl }) => {
19
- let token = await this.auth.getValidAccessToken();
20
- if (!token && autoLogin) {
21
- await this.auth.login({ onLoginUrl });
22
- token = await this.auth.getValidAccessToken();
23
- }
24
- if (!token) {
25
- throw new Error("Not authenticated. Run `alpic login` first.");
26
- }
27
- return token.access_token;
28
- },
29
- });
30
- }
31
- }
32
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAqB,MAAM,oBAAoB,CAAC;AAMrE,MAAM,OAAO,WAAW;IACb,IAAI,CAAY;IAChB,GAAG,CAAW;IACd,MAAM,CAAkC;IAEjD,YAAY,IAAyB;QACnC,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,GAAG,CAAC,kBAAkB,CAAC;QAE9D,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,GAAG,eAAe,CAAC;YACzB,UAAU;YACV,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;SACrC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;YACzB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,WAAW,EAAE,KAAK,EAAE,EAAE,SAAS,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;gBACtD,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAClD,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;oBACxB,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;oBACtC,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAChD,CAAC;gBACD,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBACjE,CAAC;gBACD,OAAO,KAAK,CAAC,YAAY,CAAC;YAC5B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF"}
package/dist/env.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export declare const env: Readonly<{
2
- ALPIC_API_BASE_URL: string;
3
- ALPIC_COGNITO_CLIENT_ID: string;
4
- }>;
package/dist/env.js DELETED
@@ -1,10 +0,0 @@
1
- import { createEnv } from "@t3-oss/env-core";
2
- import { z } from "zod";
3
- export const env = createEnv({
4
- server: {
5
- ALPIC_API_BASE_URL: z.string().default("https://api.alpic.ai"),
6
- ALPIC_COGNITO_CLIENT_ID: z.string().default("h9nqsttp8ddb40ddi1aoni91h"),
7
- },
8
- runtimeEnv: process.env,
9
- });
10
- //# sourceMappingURL=env.js.map
package/dist/env.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,GAAG,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE;QACN,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC;QAC9D,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC;KACzE;IACD,UAAU,EAAE,OAAO,CAAC,GAAG;CACxB,CAAC,CAAC"}
package/dist/index.d.ts DELETED
@@ -1,8 +0,0 @@
1
- export type { AlpicApi } from "./api/client.js";
2
- export type { Credentials, LoginOptions } from "./auth/index.js";
3
- export { AlpicAuth } from "./auth/index.js";
4
- export { getOAuthClient } from "./auth/oauth-client.js";
5
- export { GlobalStore, globalStore } from "./auth/store.js";
6
- export type { AlpicClientOptions, TunnelHandle } from "./client.js";
7
- export { AlpicClient } from "./client.js";
8
- export type { OpenTunnelOptions, TunnelRequest } from "./tunnel/tunnel.js";
package/dist/index.js DELETED
@@ -1,5 +0,0 @@
1
- export { AlpicAuth } from "./auth/index.js";
2
- export { getOAuthClient } from "./auth/oauth-client.js";
3
- export { GlobalStore, globalStore } from "./auth/store.js";
4
- export { AlpicClient } from "./client.js";
5
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -1,40 +0,0 @@
1
- import type { AlpicApi } from "../api/client.js";
2
- export type TunnelRequest = {
3
- method: string;
4
- path: string;
5
- };
6
- export type TunnelHandle = {
7
- readonly url: string;
8
- on(event: "request", listener: (req: TunnelRequest) => void): void;
9
- on(event: "error", listener: (err: Error) => void): void;
10
- on(event: "close", listener: () => void): void;
11
- close(): void;
12
- };
13
- export type OpenTunnelOptions = {
14
- port: number;
15
- autoLogin?: boolean;
16
- onLoginUrl?: (url: string) => void;
17
- };
18
- type PipenetSocket = {
19
- on(event: string, listener: (...args: unknown[]) => void): void;
20
- close(): void;
21
- };
22
- type Pipenet = (opts: {
23
- port: number;
24
- host: string;
25
- subdomain: string;
26
- headers: Record<string, string>;
27
- keepAliveDelayMs: number;
28
- offlineTimeoutMs: number;
29
- }) => Promise<PipenetSocket>;
30
- export declare function createTunnel(deps: {
31
- api: AlpicApi;
32
- ensureToken: (opts: {
33
- autoLogin?: boolean;
34
- onLoginUrl?: (url: string) => void;
35
- }) => Promise<string>;
36
- pipenet?: Pipenet;
37
- }): {
38
- open(opts: OpenTunnelOptions): Promise<TunnelHandle>;
39
- };
40
- export {};
@@ -1,52 +0,0 @@
1
- const CONNECT_TIMEOUT_MS = 10_000;
2
- const KEEPALIVE_DELAY_MS = 30_000;
3
- const OFFLINE_TIMEOUT_MS = 30_000;
4
- export function createTunnel(deps) {
5
- return {
6
- async open(opts) {
7
- // Load the patched pipenet bundle lazily so non-tunnel consumers (every
8
- // `alpic` command, the skybridge dev server) don't pay its ~500KB load
9
- // cost at startup — only when a tunnel is actually opened.
10
- const pipenet = deps.pipenet ?? (await import("../vendor/pipenet.js")).pipenet;
11
- const accessToken = await deps.ensureToken({
12
- autoLogin: opts.autoLogin,
13
- onLoginUrl: opts.onLoginUrl,
14
- });
15
- const ticket = await deps.api.tunnels.getTicket.v1(undefined, {
16
- context: {
17
- request: { headers: { Authorization: `Bearer ${accessToken}` } },
18
- },
19
- });
20
- const proto = ticket.tunnelHost.startsWith("localhost") ? "http" : "https";
21
- let timeoutId;
22
- const socket = await Promise.race([
23
- pipenet({
24
- port: opts.port,
25
- host: `${proto}://${ticket.tunnelHost}`,
26
- subdomain: ticket.subdomain,
27
- headers: { Authorization: `Bearer ${ticket.ticket}` },
28
- keepAliveDelayMs: KEEPALIVE_DELAY_MS,
29
- offlineTimeoutMs: OFFLINE_TIMEOUT_MS,
30
- }).then((socket) => {
31
- clearTimeout(timeoutId);
32
- return socket;
33
- }),
34
- new Promise((_, reject) => {
35
- timeoutId = setTimeout(() => reject(new Error("Failed to connect to tunnel server")), CONNECT_TIMEOUT_MS);
36
- timeoutId.unref?.();
37
- }),
38
- ]);
39
- const url = `${proto}://${ticket.subdomain}.${ticket.tunnelHost}`;
40
- return {
41
- url,
42
- on(event, listener) {
43
- socket.on(event, listener);
44
- },
45
- close() {
46
- socket.close();
47
- },
48
- };
49
- },
50
- };
51
- }
52
- //# sourceMappingURL=tunnel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/tunnel/tunnel.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAgClC,MAAM,UAAU,YAAY,CAAC,IAI5B;IACC,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,IAAuB;YAChC,wEAAwE;YACxE,uEAAuE;YACvE,2DAA2D;YAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAK,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAA8B,CAAC;YAEvG,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;gBACzC,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE;gBAC5D,OAAO,EAAE;oBACP,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE,EAAE;iBACjE;aACF,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAE3E,IAAI,SAAoD,CAAC;YACzD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAChC,OAAO,CAAC;oBACN,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,GAAG,KAAK,MAAM,MAAM,CAAC,UAAU,EAAE;oBACvC,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE;oBACrD,gBAAgB,EAAE,kBAAkB;oBACpC,gBAAgB,EAAE,kBAAkB;iBACrC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oBACjB,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,OAAO,MAAM,CAAC;gBAChB,CAAC,CAAC;gBACF,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;oBAC/B,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;oBAC1G,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;gBACtB,CAAC,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,GAAG,KAAK,MAAM,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAElE,OAAO;gBACL,GAAG;gBACH,EAAE,CAAC,KAAK,EAAE,QAAQ;oBAChB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,QAAwC,CAAC,CAAC;gBAC7D,CAAC;gBACD,KAAK;oBACH,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- export { pipenet } from "pipenet";