@tloncorp/openclaw 0.4.3 → 0.6.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 +130 -141
- package/dist/index.js +147 -138
- package/dist/index.js.map +1 -1
- package/dist/setup-api.js +2 -2
- package/dist/setup-entry.js +2 -2
- package/dist/setup-entry.js.map +1 -1
- package/dist/src/account-fields.js +7 -3
- package/dist/src/account-fields.js.map +1 -1
- package/dist/src/actions.js +73 -52
- package/dist/src/actions.js.map +1 -1
- package/dist/src/channel.js +51 -39
- package/dist/src/channel.js.map +1 -1
- package/dist/src/channel.runtime.js +61 -32
- package/dist/src/channel.runtime.js.map +1 -1
- package/dist/src/config-schema.js +24 -4
- package/dist/src/config-schema.js.map +1 -1
- package/dist/src/effective-owner.js.map +1 -1
- package/dist/src/gateway-status.js +55 -7
- package/dist/src/gateway-status.js.map +1 -1
- package/dist/src/monitor/approval.js +71 -62
- package/dist/src/monitor/approval.js.map +1 -1
- package/dist/src/monitor/command-auth.js +7 -7
- package/dist/src/monitor/command-auth.js.map +1 -1
- package/dist/src/monitor/command-bridge.js +3 -2
- package/dist/src/monitor/command-bridge.js.map +1 -1
- package/dist/src/monitor/computing-presence.js +76 -12
- package/dist/src/monitor/computing-presence.js.map +1 -1
- package/dist/src/monitor/discovery.js +16 -9
- package/dist/src/monitor/discovery.js.map +1 -1
- package/dist/src/monitor/history.js +58 -26
- package/dist/src/monitor/history.js.map +1 -1
- package/dist/src/monitor/index.js +2771 -2483
- package/dist/src/monitor/index.js.map +1 -1
- package/dist/src/monitor/media.js +106 -78
- package/dist/src/monitor/media.js.map +1 -1
- package/dist/src/monitor/nudge-runner.js +36 -27
- package/dist/src/monitor/nudge-runner.js.map +1 -1
- package/dist/src/monitor/nudge-state.js +7 -11
- package/dist/src/monitor/nudge-state.js.map +1 -1
- package/dist/src/monitor/owner-reply-persistence.js +27 -26
- package/dist/src/monitor/owner-reply-persistence.js.map +1 -1
- package/dist/src/monitor/processed-messages.js.map +1 -1
- package/dist/src/monitor/settings-sync.js +1 -8
- package/dist/src/monitor/settings-sync.js.map +1 -1
- package/dist/src/monitor/utils.js +77 -71
- package/dist/src/monitor/utils.js.map +1 -1
- package/dist/src/nudge-decision.js +40 -43
- package/dist/src/nudge-decision.js.map +1 -1
- package/dist/src/nudge-messages.js +9 -9
- package/dist/src/nudge-scheduler.js.map +1 -1
- package/dist/src/owner-listen-command.js +38 -28
- package/dist/src/owner-listen-command.js.map +1 -1
- package/dist/src/pending-nudge.js.map +1 -1
- package/dist/src/runtime.js +10 -6
- package/dist/src/runtime.js.map +1 -1
- package/dist/src/session-roles.js +2 -1
- package/dist/src/session-roles.js.map +1 -1
- package/dist/src/settings.js +233 -102
- package/dist/src/settings.js.map +1 -1
- package/dist/src/setup-core.js +32 -32
- package/dist/src/setup-core.js.map +1 -1
- package/dist/src/setup-surface.js +19 -19
- package/dist/src/setup-surface.js.map +1 -1
- package/dist/src/shared-state.js +46 -0
- package/dist/src/shared-state.js.map +1 -0
- package/dist/src/targets.js +17 -10
- package/dist/src/targets.js.map +1 -1
- package/dist/src/telemetry.js +17 -14
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/tlon-binary.js +20 -12
- package/dist/src/tlon-binary.js.map +1 -1
- package/dist/src/tlon-tool-guard.js +5 -5
- package/dist/src/tool-trace.js +17 -13
- package/dist/src/tool-trace.js.map +1 -1
- package/dist/src/types.js +30 -12
- package/dist/src/types.js.map +1 -1
- package/dist/src/urbit/api-client.js +16 -12
- package/dist/src/urbit/api-client.js.map +1 -1
- package/dist/src/urbit/auth.js +9 -9
- package/dist/src/urbit/auth.js.map +1 -1
- package/dist/src/urbit/base-url.js +11 -11
- package/dist/src/urbit/base-url.js.map +1 -1
- package/dist/src/urbit/channel-ops.js +25 -19
- package/dist/src/urbit/channel-ops.js.map +1 -1
- package/dist/src/urbit/context.js +8 -8
- package/dist/src/urbit/context.js.map +1 -1
- package/dist/src/urbit/errors.js +33 -7
- package/dist/src/urbit/errors.js.map +1 -1
- package/dist/src/urbit/fetch.js +3 -3
- package/dist/src/urbit/fetch.js.map +1 -1
- package/dist/src/urbit/http-poke.js +10 -10
- package/dist/src/urbit/http-poke.js.map +1 -1
- package/dist/src/urbit/send.js +27 -23
- package/dist/src/urbit/send.js.map +1 -1
- package/dist/src/urbit/sse-client.js +45 -41
- package/dist/src/urbit/sse-client.js.map +1 -1
- package/dist/src/urbit/story.js +31 -30
- package/dist/src/urbit/story.js.map +1 -1
- package/dist/src/urbit/upload.js +8 -8
- package/dist/src/urbit/upload.js.map +1 -1
- package/dist/src/version.generated.js +2 -1
- package/dist/src/version.generated.js.map +1 -1
- package/openclaw.plugin.json +37 -0
- package/package.json +35 -15
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* compatibility — clubs are deprecated and slated for removal audit.
|
|
7
7
|
*/
|
|
8
8
|
/** DM sub-operations that are send actions (not management). */
|
|
9
|
-
const DM_SEND_ACTIONS = new Set([
|
|
9
|
+
const DM_SEND_ACTIONS = new Set(['send', 'reply']);
|
|
10
10
|
/**
|
|
11
11
|
* Check whether a parsed tlon command is a blocked send operation.
|
|
12
12
|
*
|
|
@@ -18,7 +18,7 @@ export function checkBlockedSendOperation(args) {
|
|
|
18
18
|
return null;
|
|
19
19
|
const subcommand = args[0]?.toLowerCase();
|
|
20
20
|
const action = args[1]?.toLowerCase();
|
|
21
|
-
if (subcommand !==
|
|
21
|
+
if (subcommand !== 'dms' || !DM_SEND_ACTIONS.has(action)) {
|
|
22
22
|
return null;
|
|
23
23
|
}
|
|
24
24
|
// dms send/reply require a target as the next argument
|
|
@@ -26,13 +26,13 @@ export function checkBlockedSendOperation(args) {
|
|
|
26
26
|
if (!target)
|
|
27
27
|
return null;
|
|
28
28
|
// Allow legacy club targets (0v...) for backward compatibility
|
|
29
|
-
if (target.startsWith(
|
|
29
|
+
if (target.startsWith('0v')) {
|
|
30
30
|
return null;
|
|
31
31
|
}
|
|
32
32
|
// Non-club target — this is a wrong-path send that should use `message`
|
|
33
33
|
// For replies, preserve the messageId (args[3]) so the redirect includes replyTo
|
|
34
|
-
if (action ===
|
|
35
|
-
const messageId = args[3] ??
|
|
34
|
+
if (action === 'reply') {
|
|
35
|
+
const messageId = args[3] ?? '<messageId>';
|
|
36
36
|
return (`Blocked: 'dms reply' with a ship target should use the \`message\` tool instead. ` +
|
|
37
37
|
`Use: message action=send, channel=tlon, target=${target}, replyTo=${messageId}, message=<text>. ` +
|
|
38
38
|
`The \`message\` tool handles threading, bot profile, rate limiting, and reply routing correctly.`);
|
package/dist/src/tool-trace.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
const TOOL_TRACE_CONTENT_ENV_VARS = [
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
'TEST_LIVE_TOOL_TRACE_CONTENTS',
|
|
3
|
+
'CI_LIVE_TOOL_TRACE_CONTENTS',
|
|
4
4
|
];
|
|
5
|
-
const REDACTED =
|
|
5
|
+
const REDACTED = '[REDACTED]';
|
|
6
6
|
const MAX_DEPTH = 4;
|
|
7
7
|
const MAX_STRING_LENGTH = 300;
|
|
8
8
|
const MAX_ARRAY_ITEMS = 20;
|
|
9
9
|
const MAX_OBJECT_KEYS = 30;
|
|
10
10
|
const SENSITIVE_KEY_RE = /^(?:authorization|auth|password|secret|token|accesstoken|refreshtoken|apikey|api_key|cookie|set-cookie|code)$/i;
|
|
11
11
|
function isPlainObject(value) {
|
|
12
|
-
return typeof value ===
|
|
12
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
13
13
|
}
|
|
14
14
|
function truncateString(value) {
|
|
15
|
-
if (value.startsWith(
|
|
15
|
+
if (value.startsWith('data:')) {
|
|
16
16
|
const prefix = value.slice(0, 48);
|
|
17
17
|
return `${prefix}… [data-url ${value.length} chars]`;
|
|
18
18
|
}
|
|
@@ -22,17 +22,19 @@ function truncateString(value) {
|
|
|
22
22
|
return `${value.slice(0, MAX_STRING_LENGTH)}… [${value.length} chars]`;
|
|
23
23
|
}
|
|
24
24
|
function sanitizeValue(value, depth = 0) {
|
|
25
|
-
if (value == null ||
|
|
25
|
+
if (value == null ||
|
|
26
|
+
typeof value === 'number' ||
|
|
27
|
+
typeof value === 'boolean') {
|
|
26
28
|
return value;
|
|
27
29
|
}
|
|
28
|
-
if (typeof value ===
|
|
30
|
+
if (typeof value === 'string') {
|
|
29
31
|
return truncateString(value);
|
|
30
32
|
}
|
|
31
|
-
if (typeof value ===
|
|
33
|
+
if (typeof value === 'bigint') {
|
|
32
34
|
return value.toString();
|
|
33
35
|
}
|
|
34
|
-
if (typeof value ===
|
|
35
|
-
return `[Function ${value.name ||
|
|
36
|
+
if (typeof value === 'function') {
|
|
37
|
+
return `[Function ${value.name || 'anonymous'}]`;
|
|
36
38
|
}
|
|
37
39
|
if (value instanceof Error) {
|
|
38
40
|
return {
|
|
@@ -50,7 +52,9 @@ function sanitizeValue(value, depth = 0) {
|
|
|
50
52
|
return String(value);
|
|
51
53
|
}
|
|
52
54
|
if (Array.isArray(value)) {
|
|
53
|
-
const items = value
|
|
55
|
+
const items = value
|
|
56
|
+
.slice(0, MAX_ARRAY_ITEMS)
|
|
57
|
+
.map((item) => sanitizeValue(item, depth + 1));
|
|
54
58
|
if (value.length > MAX_ARRAY_ITEMS) {
|
|
55
59
|
items.push(`[+${value.length - MAX_ARRAY_ITEMS} more items]`);
|
|
56
60
|
}
|
|
@@ -73,7 +77,7 @@ function sanitizeValue(value, depth = 0) {
|
|
|
73
77
|
return String(value);
|
|
74
78
|
}
|
|
75
79
|
export function liveToolTraceContentsEnabled(env = process.env) {
|
|
76
|
-
return TOOL_TRACE_CONTENT_ENV_VARS.some((name) => /^(1|true|yes|on)$/i.test(env[name] ??
|
|
80
|
+
return TOOL_TRACE_CONTENT_ENV_VARS.some((name) => /^(1|true|yes|on)$/i.test(env[name] ?? ''));
|
|
77
81
|
}
|
|
78
82
|
export function formatToolTraceEvent(params) {
|
|
79
83
|
const body = {
|
|
@@ -85,7 +89,7 @@ export function formatToolTraceEvent(params) {
|
|
|
85
89
|
return `tooltrace ${params.phase}: ${JSON.stringify(body)}`;
|
|
86
90
|
}
|
|
87
91
|
export function shouldLogAfterToolTrace(event) {
|
|
88
|
-
if (typeof event.durationMs ===
|
|
92
|
+
if (typeof event.durationMs === 'number') {
|
|
89
93
|
return true;
|
|
90
94
|
}
|
|
91
95
|
if (event.error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-trace.js","sourceRoot":"","sources":["../../src/tool-trace.ts"],"names":[],"mappings":"AAAA,MAAM,2BAA2B,GAAG;IAClC,+BAA+B;IAC/B,6BAA6B;CACrB,CAAC;AAEX,MAAM,QAAQ,GAAG,YAAY,CAAC;AAC9B,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"tool-trace.js","sourceRoot":"","sources":["../../src/tool-trace.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.js
CHANGED
|
@@ -9,7 +9,7 @@ export function resolveTlonAccount(cfg, accountId) {
|
|
|
9
9
|
const base = cfg.channels?.tlon;
|
|
10
10
|
if (!base) {
|
|
11
11
|
return {
|
|
12
|
-
accountId: accountId ||
|
|
12
|
+
accountId: accountId || 'default',
|
|
13
13
|
name: null,
|
|
14
14
|
enabled: false,
|
|
15
15
|
configured: false,
|
|
@@ -37,36 +37,54 @@ export function resolveTlonAccount(cfg, accountId) {
|
|
|
37
37
|
ownerListenDisabledChannels: [],
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
|
-
const useDefault = !accountId || accountId ===
|
|
40
|
+
const useDefault = !accountId || accountId === 'default';
|
|
41
41
|
const account = useDefault ? base : base.accounts?.[accountId];
|
|
42
42
|
const ship = (account?.ship ?? base.ship ?? null);
|
|
43
43
|
const url = (account?.url ?? base.url ?? null);
|
|
44
44
|
const code = (account?.code ?? base.code ?? null);
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
const
|
|
45
|
+
const accountNetwork = account?.network;
|
|
46
|
+
const accountAllowPrivateNetwork = account?.allowPrivateNetwork;
|
|
47
|
+
const allowPrivateNetwork = (accountNetwork?.dangerouslyAllowPrivateNetwork ??
|
|
48
|
+
accountAllowPrivateNetwork ??
|
|
49
|
+
base.network?.dangerouslyAllowPrivateNetwork ??
|
|
50
|
+
base.allowPrivateNetwork ??
|
|
51
|
+
null);
|
|
52
|
+
const groupChannels = (account?.groupChannels ??
|
|
53
|
+
base.groupChannels ??
|
|
54
|
+
[]);
|
|
55
|
+
const dmAllowlist = (account?.dmAllowlist ??
|
|
56
|
+
base.dmAllowlist ??
|
|
57
|
+
[]);
|
|
48
58
|
const groupInviteAllowlist = (account?.groupInviteAllowlist ??
|
|
49
59
|
base.groupInviteAllowlist ??
|
|
50
60
|
[]);
|
|
51
61
|
const autoDiscoverChannels = (account?.autoDiscoverChannels ??
|
|
52
62
|
base.autoDiscoverChannels ??
|
|
53
63
|
null);
|
|
54
|
-
const showModelSignature = (account?.showModelSignature ??
|
|
55
|
-
|
|
64
|
+
const showModelSignature = (account?.showModelSignature ??
|
|
65
|
+
base.showModelSignature ??
|
|
66
|
+
null);
|
|
67
|
+
const autoAcceptDmInvites = (account?.autoAcceptDmInvites ??
|
|
68
|
+
base.autoAcceptDmInvites ??
|
|
69
|
+
null);
|
|
56
70
|
const autoAcceptGroupInvites = (account?.autoAcceptGroupInvites ??
|
|
57
71
|
base.autoAcceptGroupInvites ??
|
|
58
72
|
null);
|
|
59
73
|
const ownerShip = (account?.ownerShip ?? base.ownerShip ?? null);
|
|
60
|
-
const reactionLevel = (account?.reactionLevel ??
|
|
74
|
+
const reactionLevel = (account?.reactionLevel ??
|
|
75
|
+
base.reactionLevel ??
|
|
76
|
+
null);
|
|
61
77
|
const maxConsecutiveBotResponses = (account
|
|
62
78
|
?.maxConsecutiveBotResponses ??
|
|
63
79
|
base.maxConsecutiveBotResponses ??
|
|
64
80
|
null);
|
|
65
81
|
const telemetry = resolveTelemetryConfig(base.telemetry, account?.telemetry);
|
|
66
|
-
const defaultAuthorizedShips = (account
|
|
82
|
+
const defaultAuthorizedShips = (account
|
|
83
|
+
?.defaultAuthorizedShips ??
|
|
67
84
|
base?.defaultAuthorizedShips ??
|
|
68
85
|
[]);
|
|
69
|
-
const ownerListenEnabled = (account
|
|
86
|
+
const ownerListenEnabled = (account
|
|
87
|
+
?.ownerListenEnabled ??
|
|
70
88
|
base?.ownerListenEnabled ??
|
|
71
89
|
null);
|
|
72
90
|
const ownerListenDisabledChannels = (account
|
|
@@ -75,7 +93,7 @@ export function resolveTlonAccount(cfg, accountId) {
|
|
|
75
93
|
[]);
|
|
76
94
|
const configured = Boolean(ship && url && code);
|
|
77
95
|
return {
|
|
78
|
-
accountId: accountId ||
|
|
96
|
+
accountId: accountId || 'default',
|
|
79
97
|
name: (account?.name ?? base.name ?? null),
|
|
80
98
|
enabled: (account?.enabled ?? base.enabled ?? true) !== false,
|
|
81
99
|
configured,
|
|
@@ -105,7 +123,7 @@ export function listTlonAccountIds(cfg) {
|
|
|
105
123
|
return [];
|
|
106
124
|
}
|
|
107
125
|
const accounts = base.accounts ?? {};
|
|
108
|
-
return [...(base.ship ? [
|
|
126
|
+
return [...(base.ship ? ['default'] : []), ...Object.keys(accounts)];
|
|
109
127
|
}
|
|
110
128
|
/**
|
|
111
129
|
* Like `listTlonAccountIds`, but only includes accounts that are both
|
package/dist/src/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AA6CA,SAAS,sBAAsB,CAC7B,IAA2C,EAC3C,OAA8C;IAE9C,OAAO;QACL,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,IAAI,KAAK;QACnD,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,IAAI,IAAI;QAC/C,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,GAAmB,EACnB,SAAyB;IAEzB,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { configureClient } from
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { configureClient } from '@tloncorp/api';
|
|
2
|
+
import { authenticate } from './auth.js';
|
|
3
|
+
import { ssrfPolicyFromAllowPrivateNetwork } from './context.js';
|
|
4
|
+
import { urbitFetch } from './fetch.js';
|
|
5
|
+
import { createHttpPokeApi } from './http-poke.js';
|
|
6
6
|
/**
|
|
7
7
|
* Create a minimal Urbit-compatible shim that delegates poke() to the given function.
|
|
8
8
|
* The @tloncorp/api configureClient accepts a `client` that looks like an Urbit instance.
|
|
@@ -22,14 +22,18 @@ function createClientShim(pokeFn, shipUrl, scryFn) {
|
|
|
22
22
|
scryWithInfo: scryFn
|
|
23
23
|
? async (params) => {
|
|
24
24
|
const result = await scryFn(params);
|
|
25
|
-
return {
|
|
25
|
+
return {
|
|
26
|
+
result: result,
|
|
27
|
+
responseSizeInBytes: 0,
|
|
28
|
+
responseStatus: 200,
|
|
29
|
+
};
|
|
26
30
|
}
|
|
27
31
|
: async () => {
|
|
28
|
-
throw new Error(
|
|
32
|
+
throw new Error('Scry not supported on this client shim');
|
|
29
33
|
},
|
|
30
34
|
// Properties configureClient may access
|
|
31
35
|
verbose: false,
|
|
32
|
-
nodeId:
|
|
36
|
+
nodeId: '',
|
|
33
37
|
url: shipUrl,
|
|
34
38
|
};
|
|
35
39
|
}
|
|
@@ -40,7 +44,7 @@ function createClientShim(pokeFn, shipUrl, scryFn) {
|
|
|
40
44
|
export function configureTlonApiWithPoke(pokeFn, ship, shipUrl, scryFn) {
|
|
41
45
|
const shim = createClientShim(pokeFn, shipUrl, scryFn);
|
|
42
46
|
configureClient({
|
|
43
|
-
shipName: ship.replace(/^~/,
|
|
47
|
+
shipName: ship.replace(/^~/, ''),
|
|
44
48
|
shipUrl,
|
|
45
49
|
client: shim,
|
|
46
50
|
});
|
|
@@ -66,12 +70,12 @@ export async function withAuthenticatedTlonApi(params, fn) {
|
|
|
66
70
|
baseUrl: params.url,
|
|
67
71
|
path: scryPath,
|
|
68
72
|
init: {
|
|
69
|
-
method:
|
|
73
|
+
method: 'GET',
|
|
70
74
|
headers: { Cookie: cookie },
|
|
71
75
|
},
|
|
72
76
|
ssrfPolicy,
|
|
73
77
|
timeoutMs: 30_000,
|
|
74
|
-
auditContext:
|
|
78
|
+
auditContext: 'tlon-api-scry',
|
|
75
79
|
});
|
|
76
80
|
try {
|
|
77
81
|
if (!response.ok) {
|
|
@@ -85,7 +89,7 @@ export async function withAuthenticatedTlonApi(params, fn) {
|
|
|
85
89
|
};
|
|
86
90
|
const shim = createClientShim(api.poke, params.url, scryFn);
|
|
87
91
|
configureClient({
|
|
88
|
-
shipName: params.ship.replace(/^~/,
|
|
92
|
+
shipName: params.ship.replace(/^~/, ''),
|
|
89
93
|
shipUrl: params.url,
|
|
90
94
|
client: shim,
|
|
91
95
|
getCode: async () => params.code,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/urbit/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/urbit/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/src/urbit/auth.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { UrbitAuthError } from
|
|
2
|
-
import { urbitFetch } from
|
|
1
|
+
import { UrbitAuthError } from './errors.js';
|
|
2
|
+
import { urbitFetch } from './fetch.js';
|
|
3
3
|
export async function authenticate(url, code, options = {}) {
|
|
4
4
|
const { response, release } = await urbitFetch({
|
|
5
5
|
baseUrl: url,
|
|
6
|
-
path:
|
|
6
|
+
path: '/~/login',
|
|
7
7
|
init: {
|
|
8
|
-
method:
|
|
9
|
-
headers: {
|
|
8
|
+
method: 'POST',
|
|
9
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
10
10
|
body: new URLSearchParams({ password: code }).toString(),
|
|
11
11
|
},
|
|
12
12
|
ssrfPolicy: options.ssrfPolicy,
|
|
@@ -14,17 +14,17 @@ export async function authenticate(url, code, options = {}) {
|
|
|
14
14
|
fetchImpl: options.fetchImpl,
|
|
15
15
|
timeoutMs: options.timeoutMs ?? 15_000,
|
|
16
16
|
maxRedirects: 3,
|
|
17
|
-
auditContext:
|
|
17
|
+
auditContext: 'tlon-urbit-login',
|
|
18
18
|
});
|
|
19
19
|
try {
|
|
20
20
|
if (!response.ok) {
|
|
21
|
-
throw new UrbitAuthError(
|
|
21
|
+
throw new UrbitAuthError('auth_failed', `Login failed with status ${response.status}`);
|
|
22
22
|
}
|
|
23
23
|
// Some Urbit setups require the response body to be read before cookie headers finalize.
|
|
24
24
|
await response.text().catch(() => { });
|
|
25
|
-
const cookie = response.headers.get(
|
|
25
|
+
const cookie = response.headers.get('set-cookie');
|
|
26
26
|
if (!cookie) {
|
|
27
|
-
throw new UrbitAuthError(
|
|
27
|
+
throw new UrbitAuthError('missing_cookie', 'No authentication cookie received');
|
|
28
28
|
}
|
|
29
29
|
return cookie;
|
|
30
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/urbit/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/urbit/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAYxC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAW,EACX,IAAY,EACZ,UAAoC,EAAE;IAEtC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC;QAC7C,OAAO,EAAE,GAAG;QACZ,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI,EAAE,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;SACzD;QACD,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM;QACtC,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,kBAAkB;KACjC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,cAAc,CACtB,aAAa,EACb,4BAA4B,QAAQ,CAAC,MAAM,EAAE,CAC9C,CAAC;QACJ,CAAC;QAED,yFAAyF;QACzF,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,cAAc,CACtB,gBAAgB,EAChB,mCAAmC,CACpC,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { isBlockedHostnameOrIp } from
|
|
1
|
+
import { isBlockedHostnameOrIp } from 'openclaw/plugin-sdk/ssrf-runtime';
|
|
2
2
|
function hasScheme(value) {
|
|
3
3
|
return /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(value);
|
|
4
4
|
}
|
|
5
5
|
export function validateUrbitBaseUrl(raw) {
|
|
6
|
-
const trimmed = String(raw ??
|
|
6
|
+
const trimmed = String(raw ?? '').trim();
|
|
7
7
|
if (!trimmed) {
|
|
8
|
-
return { ok: false, error:
|
|
8
|
+
return { ok: false, error: 'Required' };
|
|
9
9
|
}
|
|
10
10
|
const candidate = hasScheme(trimmed) ? trimmed : `https://${trimmed}`;
|
|
11
11
|
let parsed;
|
|
@@ -13,21 +13,21 @@ export function validateUrbitBaseUrl(raw) {
|
|
|
13
13
|
parsed = new URL(candidate);
|
|
14
14
|
}
|
|
15
15
|
catch {
|
|
16
|
-
return { ok: false, error:
|
|
16
|
+
return { ok: false, error: 'Invalid URL' };
|
|
17
17
|
}
|
|
18
|
-
if (![
|
|
19
|
-
return { ok: false, error:
|
|
18
|
+
if (!['http:', 'https:'].includes(parsed.protocol)) {
|
|
19
|
+
return { ok: false, error: 'URL must use http:// or https://' };
|
|
20
20
|
}
|
|
21
21
|
if (parsed.username || parsed.password) {
|
|
22
|
-
return { ok: false, error:
|
|
22
|
+
return { ok: false, error: 'URL must not include credentials' };
|
|
23
23
|
}
|
|
24
|
-
const hostname = parsed.hostname.trim().toLowerCase().replace(/\.$/,
|
|
24
|
+
const hostname = parsed.hostname.trim().toLowerCase().replace(/\.$/, '');
|
|
25
25
|
if (!hostname) {
|
|
26
|
-
return { ok: false, error:
|
|
26
|
+
return { ok: false, error: 'Invalid hostname' };
|
|
27
27
|
}
|
|
28
28
|
// Normalize to origin so callers can't smuggle paths/query fragments into the base URL,
|
|
29
29
|
// and strip a trailing dot from the hostname (DNS root label).
|
|
30
|
-
const isIpv6 = hostname.includes(
|
|
30
|
+
const isIpv6 = hostname.includes(':');
|
|
31
31
|
const host = parsed.port
|
|
32
32
|
? `${isIpv6 ? `[${hostname}]` : hostname}:${parsed.port}`
|
|
33
33
|
: isIpv6
|
|
@@ -36,7 +36,7 @@ export function validateUrbitBaseUrl(raw) {
|
|
|
36
36
|
return { ok: true, baseUrl: `${parsed.protocol}//${host}`, hostname };
|
|
37
37
|
}
|
|
38
38
|
export function isBlockedUrbitHostname(hostname) {
|
|
39
|
-
const normalized = hostname.trim().toLowerCase().replace(/\.$/,
|
|
39
|
+
const normalized = hostname.trim().toLowerCase().replace(/\.$/, '');
|
|
40
40
|
if (!normalized) {
|
|
41
41
|
return false;
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-url.js","sourceRoot":"","sources":["../../../src/urbit/base-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"base-url.js","sourceRoot":"","sources":["../../../src/urbit/base-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAMzE,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,EAAE,CAAC;IAEtE,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAClD,CAAC;IAED,wFAAwF;IACxF,+DAA+D;IAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;QACtB,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;QACzD,CAAC,CAAC,MAAM;YACN,CAAC,CAAC,IAAI,QAAQ,GAAG;YACjB,CAAC,CAAC,QAAQ,CAAC;IAEf,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,qBAAqB,CAAC,UAAU,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { UrbitHttpError } from
|
|
2
|
-
import { urbitFetch } from
|
|
1
|
+
import { UrbitHttpError } from './errors.js';
|
|
2
|
+
import { urbitFetch } from './fetch.js';
|
|
3
3
|
export async function pokeUrbitChannel(deps, params) {
|
|
4
4
|
const pokeId = Date.now();
|
|
5
5
|
const pokeData = {
|
|
6
6
|
id: pokeId,
|
|
7
|
-
action:
|
|
7
|
+
action: 'poke',
|
|
8
8
|
ship: deps.ship,
|
|
9
9
|
app: params.app,
|
|
10
10
|
mark: params.mark,
|
|
@@ -14,9 +14,9 @@ export async function pokeUrbitChannel(deps, params) {
|
|
|
14
14
|
baseUrl: deps.baseUrl,
|
|
15
15
|
path: `/~/channel/${deps.channelId}`,
|
|
16
16
|
init: {
|
|
17
|
-
method:
|
|
17
|
+
method: 'PUT',
|
|
18
18
|
headers: {
|
|
19
|
-
|
|
19
|
+
'Content-Type': 'application/json',
|
|
20
20
|
Cookie: deps.cookie,
|
|
21
21
|
},
|
|
22
22
|
body: JSON.stringify([pokeData]),
|
|
@@ -29,8 +29,8 @@ export async function pokeUrbitChannel(deps, params) {
|
|
|
29
29
|
});
|
|
30
30
|
try {
|
|
31
31
|
if (!response.ok && response.status !== 204) {
|
|
32
|
-
const errorText = await response.text().catch(() =>
|
|
33
|
-
throw new Error(`Poke failed: ${response.status}${errorText ? ` - ${errorText}` :
|
|
32
|
+
const errorText = await response.text().catch(() => '');
|
|
33
|
+
throw new Error(`Poke failed: ${response.status}${errorText ? ` - ${errorText}` : ''}`);
|
|
34
34
|
}
|
|
35
35
|
return pokeId;
|
|
36
36
|
}
|
|
@@ -44,7 +44,7 @@ export async function scryUrbitPath(deps, params) {
|
|
|
44
44
|
baseUrl: deps.baseUrl,
|
|
45
45
|
path: scryPath,
|
|
46
46
|
init: {
|
|
47
|
-
method:
|
|
47
|
+
method: 'GET',
|
|
48
48
|
headers: { Cookie: deps.cookie },
|
|
49
49
|
},
|
|
50
50
|
ssrfPolicy: deps.ssrfPolicy,
|
|
@@ -68,9 +68,9 @@ export async function createUrbitChannel(deps, params) {
|
|
|
68
68
|
baseUrl: deps.baseUrl,
|
|
69
69
|
path: `/~/channel/${deps.channelId}`,
|
|
70
70
|
init: {
|
|
71
|
-
method:
|
|
71
|
+
method: 'PUT',
|
|
72
72
|
headers: {
|
|
73
|
-
|
|
73
|
+
'Content-Type': 'application/json',
|
|
74
74
|
Cookie: deps.cookie,
|
|
75
75
|
},
|
|
76
76
|
body: JSON.stringify(params.body),
|
|
@@ -83,7 +83,10 @@ export async function createUrbitChannel(deps, params) {
|
|
|
83
83
|
});
|
|
84
84
|
try {
|
|
85
85
|
if (!response.ok && response.status !== 204) {
|
|
86
|
-
throw new UrbitHttpError({
|
|
86
|
+
throw new UrbitHttpError({
|
|
87
|
+
operation: 'Channel creation',
|
|
88
|
+
status: response.status,
|
|
89
|
+
});
|
|
87
90
|
}
|
|
88
91
|
}
|
|
89
92
|
finally {
|
|
@@ -95,19 +98,19 @@ export async function wakeUrbitChannel(deps) {
|
|
|
95
98
|
baseUrl: deps.baseUrl,
|
|
96
99
|
path: `/~/channel/${deps.channelId}`,
|
|
97
100
|
init: {
|
|
98
|
-
method:
|
|
101
|
+
method: 'PUT',
|
|
99
102
|
headers: {
|
|
100
|
-
|
|
103
|
+
'Content-Type': 'application/json',
|
|
101
104
|
Cookie: deps.cookie,
|
|
102
105
|
},
|
|
103
106
|
body: JSON.stringify([
|
|
104
107
|
{
|
|
105
108
|
id: Date.now(),
|
|
106
|
-
action:
|
|
109
|
+
action: 'poke',
|
|
107
110
|
ship: deps.ship,
|
|
108
|
-
app:
|
|
109
|
-
mark:
|
|
110
|
-
json:
|
|
111
|
+
app: 'hood',
|
|
112
|
+
mark: 'helm-hi',
|
|
113
|
+
json: 'Opening API channel',
|
|
111
114
|
},
|
|
112
115
|
]),
|
|
113
116
|
},
|
|
@@ -115,11 +118,14 @@ export async function wakeUrbitChannel(deps) {
|
|
|
115
118
|
lookupFn: deps.lookupFn,
|
|
116
119
|
fetchImpl: deps.fetchImpl,
|
|
117
120
|
timeoutMs: 30_000,
|
|
118
|
-
auditContext:
|
|
121
|
+
auditContext: 'tlon-urbit-channel-wake',
|
|
119
122
|
});
|
|
120
123
|
try {
|
|
121
124
|
if (!response.ok && response.status !== 204) {
|
|
122
|
-
throw new UrbitHttpError({
|
|
125
|
+
throw new UrbitHttpError({
|
|
126
|
+
operation: 'Channel activation',
|
|
127
|
+
status: response.status,
|
|
128
|
+
});
|
|
123
129
|
}
|
|
124
130
|
}
|
|
125
131
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-ops.js","sourceRoot":"","sources":["../../../src/urbit/channel-ops.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channel-ops.js","sourceRoot":"","sources":["../../../src/urbit/channel-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { validateUrbitBaseUrl } from
|
|
2
|
-
import { UrbitUrlError } from
|
|
1
|
+
import { validateUrbitBaseUrl } from './base-url.js';
|
|
2
|
+
import { UrbitUrlError } from './errors.js';
|
|
3
3
|
export function resolveShipFromHostname(hostname) {
|
|
4
|
-
const trimmed = hostname.trim().toLowerCase().replace(/\.$/,
|
|
4
|
+
const trimmed = hostname.trim().toLowerCase().replace(/\.$/, '');
|
|
5
5
|
if (!trimmed) {
|
|
6
|
-
return
|
|
6
|
+
return '';
|
|
7
7
|
}
|
|
8
|
-
if (trimmed.includes(
|
|
9
|
-
return trimmed.split(
|
|
8
|
+
if (trimmed.includes('.')) {
|
|
9
|
+
return trimmed.split('.')[0] ?? trimmed;
|
|
10
10
|
}
|
|
11
11
|
return trimmed;
|
|
12
12
|
}
|
|
13
13
|
export function normalizeUrbitShip(ship, hostname) {
|
|
14
|
-
const raw = ship?.replace(/^~/,
|
|
14
|
+
const raw = ship?.replace(/^~/, '') ?? resolveShipFromHostname(hostname);
|
|
15
15
|
return raw.trim();
|
|
16
16
|
}
|
|
17
17
|
export function normalizeUrbitCookie(cookie) {
|
|
18
|
-
return cookie.split(
|
|
18
|
+
return cookie.split(';')[0] ?? cookie;
|
|
19
19
|
}
|
|
20
20
|
export function getUrbitContext(url, ship) {
|
|
21
21
|
const validated = validateUrbitBaseUrl(url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/urbit/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/urbit/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAQ5C,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAwB,EACxB,QAAgB;IAEhB,MAAM,GAAG,GAAG,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACzE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,IAAa;IACxD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,IAAI,EAAE,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,mBAA+C;IAE/C,OAAO,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,oEAAoE;IACpE,OAAO,SAAS,CAAC;AACnB,CAAC"}
|