@agent-assembly/sdk 0.0.1-alpha.3
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/LICENSE +176 -0
- package/README.md +182 -0
- package/dist/cjs/adapters/adapter-registry.js +2 -0
- package/dist/cjs/adapters/adapter.js +2 -0
- package/dist/cjs/adapters/index.js +2 -0
- package/dist/cjs/adapters/langchain/assembly-callback-handler.js +93 -0
- package/dist/cjs/adapters/langchain/index.js +8 -0
- package/dist/cjs/adapters/langchain/wrap-tool-with-assembly.js +55 -0
- package/dist/cjs/audit/encode.js +176 -0
- package/dist/cjs/audit/index.js +8 -0
- package/dist/cjs/core/gateway-resolver.js +254 -0
- package/dist/cjs/core/index.js +9 -0
- package/dist/cjs/core/init-assembly.js +224 -0
- package/dist/cjs/errors/configuration-error.js +17 -0
- package/dist/cjs/errors/gateway-error.js +17 -0
- package/dist/cjs/errors/index.js +11 -0
- package/dist/cjs/errors/op-terminated-error.js +20 -0
- package/dist/cjs/errors/policy-violation-error.js +10 -0
- package/dist/cjs/gateway/client.js +15 -0
- package/dist/cjs/gateway/index.js +5 -0
- package/dist/cjs/hooks/adapter-registry.js +7 -0
- package/dist/cjs/hooks/ai-sdk-detection.js +14 -0
- package/dist/cjs/hooks/ai-sdk.js +164 -0
- package/dist/cjs/hooks/langchain.js +9 -0
- package/dist/cjs/hooks/langgraph-detection.js +14 -0
- package/dist/cjs/hooks/langgraph.js +107 -0
- package/dist/cjs/hooks/mastra-detection.js +14 -0
- package/dist/cjs/hooks/mastra.js +120 -0
- package/dist/cjs/hooks/openai-agents-detection.js +14 -0
- package/dist/cjs/hooks/openai-agents.js +189 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/lineage/agent-context-store.js +20 -0
- package/dist/cjs/lineage/index.js +7 -0
- package/dist/cjs/native/client.js +160 -0
- package/dist/cjs/op-control.js +150 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/proto/generated/common.js +365 -0
- package/dist/cjs/proto/generated/policy.js +1418 -0
- package/dist/cjs/runtime.js +144 -0
- package/dist/cjs/types/assembly-config.js +2 -0
- package/dist/cjs/types/assembly-context.js +2 -0
- package/dist/cjs/types/assembly-mode.js +2 -0
- package/dist/cjs/types/audit.js +5 -0
- package/dist/cjs/types/enforcement-mode.js +9 -0
- package/dist/cjs/types/gateway-governance.js +2 -0
- package/dist/cjs/types/index.js +5 -0
- package/dist/cjs/types/langchain-adapter.js +2 -0
- package/dist/cjs/types/openai-agents-adapter.js +2 -0
- package/dist/cjs/types/policy.js +2 -0
- package/dist/cjs/types/tool-map.js +2 -0
- package/dist/cjs/types/vercel-ai-adapter.js +2 -0
- package/dist/cjs/wrappers/index.js +5 -0
- package/dist/cjs/wrappers/with-assembly.js +82 -0
- package/dist/esm/adapters/adapter-registry.js +2 -0
- package/dist/esm/adapters/adapter-registry.js.map +1 -0
- package/dist/esm/adapters/adapter.js +2 -0
- package/dist/esm/adapters/adapter.js.map +1 -0
- package/dist/esm/adapters/index.js +2 -0
- package/dist/esm/adapters/index.js.map +1 -0
- package/dist/esm/adapters/langchain/assembly-callback-handler.js +90 -0
- package/dist/esm/adapters/langchain/assembly-callback-handler.js.map +1 -0
- package/dist/esm/adapters/langchain/index.js +3 -0
- package/dist/esm/adapters/langchain/index.js.map +1 -0
- package/dist/esm/adapters/langchain/wrap-tool-with-assembly.js +52 -0
- package/dist/esm/adapters/langchain/wrap-tool-with-assembly.js.map +1 -0
- package/dist/esm/audit/encode.js +171 -0
- package/dist/esm/audit/encode.js.map +1 -0
- package/dist/esm/audit/index.js +2 -0
- package/dist/esm/audit/index.js.map +1 -0
- package/dist/esm/core/gateway-resolver.js +213 -0
- package/dist/esm/core/gateway-resolver.js.map +1 -0
- package/dist/esm/core/index.js +2 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/init-assembly.js +218 -0
- package/dist/esm/core/init-assembly.js.map +1 -0
- package/dist/esm/errors/configuration-error.js +14 -0
- package/dist/esm/errors/configuration-error.js.map +1 -0
- package/dist/esm/errors/gateway-error.js +14 -0
- package/dist/esm/errors/gateway-error.js.map +1 -0
- package/dist/esm/errors/index.js +5 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/errors/op-terminated-error.js +17 -0
- package/dist/esm/errors/op-terminated-error.js.map +1 -0
- package/dist/esm/errors/policy-violation-error.js +7 -0
- package/dist/esm/errors/policy-violation-error.js.map +1 -0
- package/dist/esm/gateway/client.js +13 -0
- package/dist/esm/gateway/client.js.map +1 -0
- package/dist/esm/gateway/index.js +2 -0
- package/dist/esm/gateway/index.js.map +1 -0
- package/dist/esm/hooks/adapter-registry.js +5 -0
- package/dist/esm/hooks/adapter-registry.js.map +1 -0
- package/dist/esm/hooks/ai-sdk-detection.js +12 -0
- package/dist/esm/hooks/ai-sdk-detection.js.map +1 -0
- package/dist/esm/hooks/ai-sdk.js +123 -0
- package/dist/esm/hooks/ai-sdk.js.map +1 -0
- package/dist/esm/hooks/langchain.js +7 -0
- package/dist/esm/hooks/langchain.js.map +1 -0
- package/dist/esm/hooks/langgraph-detection.js +12 -0
- package/dist/esm/hooks/langgraph-detection.js.map +1 -0
- package/dist/esm/hooks/langgraph.js +69 -0
- package/dist/esm/hooks/langgraph.js.map +1 -0
- package/dist/esm/hooks/mastra-detection.js +12 -0
- package/dist/esm/hooks/mastra-detection.js.map +1 -0
- package/dist/esm/hooks/mastra.js +83 -0
- package/dist/esm/hooks/mastra.js.map +1 -0
- package/dist/esm/hooks/openai-agents-detection.js +12 -0
- package/dist/esm/hooks/openai-agents-detection.js.map +1 -0
- package/dist/esm/hooks/openai-agents.js +145 -0
- package/dist/esm/hooks/openai-agents.js.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lineage/agent-context-store.js +16 -0
- package/dist/esm/lineage/agent-context-store.js.map +1 -0
- package/dist/esm/lineage/index.js +2 -0
- package/dist/esm/lineage/index.js.map +1 -0
- package/dist/esm/native/client.js +150 -0
- package/dist/esm/native/client.js.map +1 -0
- package/dist/esm/op-control.js +147 -0
- package/dist/esm/op-control.js.map +1 -0
- package/dist/esm/proto/generated/common.js +357 -0
- package/dist/esm/proto/generated/common.js.map +1 -0
- package/dist/esm/proto/generated/policy.js +1414 -0
- package/dist/esm/proto/generated/policy.js.map +1 -0
- package/dist/esm/runtime.js +138 -0
- package/dist/esm/runtime.js.map +1 -0
- package/dist/esm/types/assembly-config.js +2 -0
- package/dist/esm/types/assembly-config.js.map +1 -0
- package/dist/esm/types/assembly-context.js +2 -0
- package/dist/esm/types/assembly-context.js.map +1 -0
- package/dist/esm/types/assembly-mode.js +2 -0
- package/dist/esm/types/assembly-mode.js.map +1 -0
- package/dist/esm/types/audit.js +5 -0
- package/dist/esm/types/audit.js.map +1 -0
- package/dist/esm/types/enforcement-mode.js +7 -0
- package/dist/esm/types/enforcement-mode.js.map +1 -0
- package/dist/esm/types/gateway-governance.js +2 -0
- package/dist/esm/types/gateway-governance.js.map +1 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/langchain-adapter.js +2 -0
- package/dist/esm/types/langchain-adapter.js.map +1 -0
- package/dist/esm/types/openai-agents-adapter.js +2 -0
- package/dist/esm/types/openai-agents-adapter.js.map +1 -0
- package/dist/esm/types/policy.js +2 -0
- package/dist/esm/types/policy.js.map +1 -0
- package/dist/esm/types/tool-map.js +2 -0
- package/dist/esm/types/tool-map.js.map +1 -0
- package/dist/esm/types/vercel-ai-adapter.js +2 -0
- package/dist/esm/types/vercel-ai-adapter.js.map +1 -0
- package/dist/esm/wrappers/index.js +2 -0
- package/dist/esm/wrappers/index.js.map +1 -0
- package/dist/esm/wrappers/with-assembly.js +80 -0
- package/dist/esm/wrappers/with-assembly.js.map +1 -0
- package/dist/types/adapters/adapter-registry.d.ts +7 -0
- package/dist/types/adapters/adapter-registry.d.ts.map +1 -0
- package/dist/types/adapters/adapter.d.ts +6 -0
- package/dist/types/adapters/adapter.d.ts.map +1 -0
- package/dist/types/adapters/index.d.ts +3 -0
- package/dist/types/adapters/index.d.ts.map +1 -0
- package/dist/types/adapters/langchain/assembly-callback-handler.d.ts +21 -0
- package/dist/types/adapters/langchain/assembly-callback-handler.d.ts.map +1 -0
- package/dist/types/adapters/langchain/index.d.ts +4 -0
- package/dist/types/adapters/langchain/index.d.ts.map +1 -0
- package/dist/types/adapters/langchain/wrap-tool-with-assembly.d.ts +9 -0
- package/dist/types/adapters/langchain/wrap-tool-with-assembly.d.ts.map +1 -0
- package/dist/types/audit/encode.d.ts +77 -0
- package/dist/types/audit/encode.d.ts.map +1 -0
- package/dist/types/audit/index.d.ts +3 -0
- package/dist/types/audit/index.d.ts.map +1 -0
- package/dist/types/core/gateway-resolver.d.ts +92 -0
- package/dist/types/core/gateway-resolver.d.ts.map +1 -0
- package/dist/types/core/index.d.ts +2 -0
- package/dist/types/core/index.d.ts.map +1 -0
- package/dist/types/core/init-assembly.d.ts +10 -0
- package/dist/types/core/init-assembly.d.ts.map +1 -0
- package/dist/types/errors/configuration-error.d.ts +11 -0
- package/dist/types/errors/configuration-error.d.ts.map +1 -0
- package/dist/types/errors/gateway-error.d.ts +11 -0
- package/dist/types/errors/gateway-error.d.ts.map +1 -0
- package/dist/types/errors/index.d.ts +5 -0
- package/dist/types/errors/index.d.ts.map +1 -0
- package/dist/types/errors/op-terminated-error.d.ts +13 -0
- package/dist/types/errors/op-terminated-error.d.ts.map +1 -0
- package/dist/types/errors/policy-violation-error.d.ts +4 -0
- package/dist/types/errors/policy-violation-error.d.ts.map +1 -0
- package/dist/types/gateway/client.d.ts +14 -0
- package/dist/types/gateway/client.d.ts.map +1 -0
- package/dist/types/gateway/index.d.ts +3 -0
- package/dist/types/gateway/index.d.ts.map +1 -0
- package/dist/types/hooks/adapter-registry.d.ts +3 -0
- package/dist/types/hooks/adapter-registry.d.ts.map +1 -0
- package/dist/types/hooks/ai-sdk-detection.d.ts +2 -0
- package/dist/types/hooks/ai-sdk-detection.d.ts.map +1 -0
- package/dist/types/hooks/ai-sdk.d.ts +36 -0
- package/dist/types/hooks/ai-sdk.d.ts.map +1 -0
- package/dist/types/hooks/langchain.d.ts +3 -0
- package/dist/types/hooks/langchain.d.ts.map +1 -0
- package/dist/types/hooks/langgraph-detection.d.ts +2 -0
- package/dist/types/hooks/langgraph-detection.d.ts.map +1 -0
- package/dist/types/hooks/langgraph.d.ts +26 -0
- package/dist/types/hooks/langgraph.d.ts.map +1 -0
- package/dist/types/hooks/mastra-detection.d.ts +2 -0
- package/dist/types/hooks/mastra-detection.d.ts.map +1 -0
- package/dist/types/hooks/mastra.d.ts +29 -0
- package/dist/types/hooks/mastra.d.ts.map +1 -0
- package/dist/types/hooks/openai-agents-detection.d.ts +2 -0
- package/dist/types/hooks/openai-agents-detection.d.ts.map +1 -0
- package/dist/types/hooks/openai-agents.d.ts +42 -0
- package/dist/types/hooks/openai-agents.d.ts.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lineage/agent-context-store.d.ts +12 -0
- package/dist/types/lineage/agent-context-store.d.ts.map +1 -0
- package/dist/types/lineage/index.d.ts +2 -0
- package/dist/types/lineage/index.d.ts.map +1 -0
- package/dist/types/native/client.d.ts +26 -0
- package/dist/types/native/client.d.ts.map +1 -0
- package/dist/types/op-control.d.ts +85 -0
- package/dist/types/op-control.d.ts.map +1 -0
- package/dist/types/proto/generated/common.d.ts +90 -0
- package/dist/types/proto/generated/common.d.ts.map +1 -0
- package/dist/types/proto/generated/policy.d.ts +298 -0
- package/dist/types/proto/generated/policy.d.ts.map +1 -0
- package/dist/types/runtime.d.ts +59 -0
- package/dist/types/runtime.d.ts.map +1 -0
- package/dist/types/types/assembly-config.d.ts +47 -0
- package/dist/types/types/assembly-config.d.ts.map +1 -0
- package/dist/types/types/assembly-context.d.ts +12 -0
- package/dist/types/types/assembly-context.d.ts.map +1 -0
- package/dist/types/types/assembly-mode.d.ts +2 -0
- package/dist/types/types/assembly-mode.d.ts.map +1 -0
- package/dist/types/types/audit.d.ts +76 -0
- package/dist/types/types/audit.d.ts.map +1 -0
- package/dist/types/types/enforcement-mode.d.ts +20 -0
- package/dist/types/types/enforcement-mode.d.ts.map +1 -0
- package/dist/types/types/gateway-governance.d.ts +31 -0
- package/dist/types/types/gateway-governance.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +12 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/langchain-adapter.d.ts +25 -0
- package/dist/types/types/langchain-adapter.d.ts.map +1 -0
- package/dist/types/types/openai-agents-adapter.d.ts +17 -0
- package/dist/types/types/openai-agents-adapter.d.ts.map +1 -0
- package/dist/types/types/policy.d.ts +10 -0
- package/dist/types/types/policy.d.ts.map +1 -0
- package/dist/types/types/tool-map.d.ts +2 -0
- package/dist/types/types/tool-map.d.ts.map +1 -0
- package/dist/types/types/vercel-ai-adapter.d.ts +12 -0
- package/dist/types/types/vercel-ai-adapter.d.ts.map +1 -0
- package/dist/types/wrappers/index.d.ts +3 -0
- package/dist/types/wrappers/index.d.ts.map +1 -0
- package/dist/types/wrappers/with-assembly.d.ts +9 -0
- package/dist/types/wrappers/with-assembly.d.ts.map +1 -0
- package/native/aa-ffi-node/index.cjs +20 -0
- package/native/aa-ffi-node/index.d.ts +23 -0
- package/package.json +95 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const NATIVE_BINDING_SINGLETON_KEY = Symbol.for("@agent-assembly/sdk/native-binding");
|
|
4
|
+
const ERROR_CONNECT = "AA_ERR_CONNECT";
|
|
5
|
+
const ERROR_SEND_EVENT = "AA_ERR_SEND_EVENT";
|
|
6
|
+
const ERROR_QUERY_POLICY = "AA_ERR_QUERY_POLICY";
|
|
7
|
+
const ERROR_DISCONNECT = "AA_ERR_DISCONNECT";
|
|
8
|
+
export class NativeConnectError extends Error {
|
|
9
|
+
code = ERROR_CONNECT;
|
|
10
|
+
}
|
|
11
|
+
export class NativeSendEventError extends Error {
|
|
12
|
+
code = ERROR_SEND_EVENT;
|
|
13
|
+
}
|
|
14
|
+
export class NativeQueryPolicyError extends Error {
|
|
15
|
+
code = ERROR_QUERY_POLICY;
|
|
16
|
+
}
|
|
17
|
+
export class NativeDisconnectError extends Error {
|
|
18
|
+
code = ERROR_DISCONNECT;
|
|
19
|
+
}
|
|
20
|
+
function mapNativeError(error) {
|
|
21
|
+
if (!(error instanceof Error)) {
|
|
22
|
+
return new Error(String(error));
|
|
23
|
+
}
|
|
24
|
+
const [code, ...rest] = error.message.split(":");
|
|
25
|
+
const detail = rest.join(":").trim() || error.message;
|
|
26
|
+
if (code === ERROR_CONNECT) {
|
|
27
|
+
return new NativeConnectError(detail);
|
|
28
|
+
}
|
|
29
|
+
if (code === ERROR_SEND_EVENT) {
|
|
30
|
+
return new NativeSendEventError(detail);
|
|
31
|
+
}
|
|
32
|
+
if (code === ERROR_QUERY_POLICY) {
|
|
33
|
+
return new NativeQueryPolicyError(detail);
|
|
34
|
+
}
|
|
35
|
+
if (code === ERROR_DISCONNECT) {
|
|
36
|
+
return new NativeDisconnectError(detail);
|
|
37
|
+
}
|
|
38
|
+
return error;
|
|
39
|
+
}
|
|
40
|
+
function loadNativeBinding() {
|
|
41
|
+
const shouldUseCache = process.env.VITEST !== "true";
|
|
42
|
+
const globalObject = globalThis;
|
|
43
|
+
const cachedBinding = shouldUseCache
|
|
44
|
+
? globalObject[NATIVE_BINDING_SINGLETON_KEY]
|
|
45
|
+
: undefined;
|
|
46
|
+
if (cachedBinding) {
|
|
47
|
+
return cachedBinding;
|
|
48
|
+
}
|
|
49
|
+
const requireFromHere = createRequire(path.resolve(process.cwd(), "package.json"));
|
|
50
|
+
const candidates = [
|
|
51
|
+
"../../native/aa-ffi-node/index.cjs",
|
|
52
|
+
"../../../native/aa-ffi-node/index.cjs",
|
|
53
|
+
`${process.cwd()}/native/aa-ffi-node/index.cjs`
|
|
54
|
+
];
|
|
55
|
+
let lastError;
|
|
56
|
+
for (const candidate of candidates) {
|
|
57
|
+
try {
|
|
58
|
+
const binding = requireFromHere(candidate);
|
|
59
|
+
if (shouldUseCache) {
|
|
60
|
+
globalObject[NATIVE_BINDING_SINGLETON_KEY] = binding;
|
|
61
|
+
}
|
|
62
|
+
return binding;
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
lastError = error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
throw new NativeConnectError(`Failed to load native binding from known paths: ${String(lastError)}`);
|
|
69
|
+
}
|
|
70
|
+
export function createNativeClient(options) {
|
|
71
|
+
const mode = options.mode ?? "grpc-sidecar";
|
|
72
|
+
if (mode !== "napi-inprocess") {
|
|
73
|
+
return {
|
|
74
|
+
mode,
|
|
75
|
+
close: async () => undefined,
|
|
76
|
+
sendEvent: () => undefined,
|
|
77
|
+
queryPolicy: async () => ({ denied: false, pending: false })
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
const binding = loadNativeBinding();
|
|
81
|
+
const socketPath = options.gateway;
|
|
82
|
+
let handlePromise;
|
|
83
|
+
let activeHandle;
|
|
84
|
+
let pendingSendError;
|
|
85
|
+
const getHandle = async () => {
|
|
86
|
+
if (!handlePromise) {
|
|
87
|
+
handlePromise = binding
|
|
88
|
+
.connect(socketPath)
|
|
89
|
+
.then((handle) => {
|
|
90
|
+
activeHandle = handle;
|
|
91
|
+
return handle;
|
|
92
|
+
})
|
|
93
|
+
.catch((error) => {
|
|
94
|
+
handlePromise = undefined;
|
|
95
|
+
activeHandle = undefined;
|
|
96
|
+
throw mapNativeError(error);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return handlePromise;
|
|
100
|
+
};
|
|
101
|
+
return {
|
|
102
|
+
mode,
|
|
103
|
+
close: async () => {
|
|
104
|
+
if (pendingSendError) {
|
|
105
|
+
const error = pendingSendError;
|
|
106
|
+
pendingSendError = undefined;
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
if (!handlePromise) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const handle = await getHandle();
|
|
113
|
+
await binding.disconnect(handle).catch((error) => {
|
|
114
|
+
throw mapNativeError(error);
|
|
115
|
+
});
|
|
116
|
+
handlePromise = undefined;
|
|
117
|
+
activeHandle = undefined;
|
|
118
|
+
},
|
|
119
|
+
sendEvent: (event) => {
|
|
120
|
+
if (activeHandle) {
|
|
121
|
+
try {
|
|
122
|
+
binding.sendEvent(activeHandle, event);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
pendingSendError = mapNativeError(error);
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
void getHandle()
|
|
130
|
+
.then((handle) => {
|
|
131
|
+
binding.sendEvent(handle, event);
|
|
132
|
+
})
|
|
133
|
+
.catch((error) => {
|
|
134
|
+
pendingSendError = mapNativeError(error);
|
|
135
|
+
});
|
|
136
|
+
},
|
|
137
|
+
queryPolicy: async (action) => {
|
|
138
|
+
if (pendingSendError) {
|
|
139
|
+
const error = pendingSendError;
|
|
140
|
+
pendingSendError = undefined;
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
const handle = await getHandle();
|
|
144
|
+
return binding.queryPolicy(handle, action).catch((error) => {
|
|
145
|
+
throw mapNativeError(error);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/native/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway → SDK op-control consumer (AAASM-1422 PR-F / AAASM-1655).
|
|
3
|
+
*
|
|
4
|
+
* Subscribes to `PolicyService.OpControlStream` and exposes a per-`op_id`
|
|
5
|
+
* cooperative-pause / fast-fail-terminate state machine through
|
|
6
|
+
* {@link OpControlSubscriber.waitForOp}.
|
|
7
|
+
*
|
|
8
|
+
* State machine per op_id:
|
|
9
|
+
* - `OP_CONTROL_SIGNAL_PAUSE` → `waitForOp` blocks until RESUME arrives.
|
|
10
|
+
* - `OP_CONTROL_SIGNAL_RESUME` → `waitForOp` resolves immediately.
|
|
11
|
+
* - `OP_CONTROL_SIGNAL_TERMINATE` → `waitForOp` rejects with `OpTerminatedError`.
|
|
12
|
+
*
|
|
13
|
+
* Signals that arrive for an `op_id` no one is currently awaiting are
|
|
14
|
+
* buffered into the per-op slot so the next `waitForOp` sees them.
|
|
15
|
+
*
|
|
16
|
+
* Out of scope for PR-F (deferred):
|
|
17
|
+
* - Reconnection / heartbeat on stream close (caller observes
|
|
18
|
+
* `streamAlive` and re-instantiates if desired).
|
|
19
|
+
* - Auto-wiring into the existing `GatewayClient` / adapter hooks
|
|
20
|
+
* (separate sub-task when the adapter surface is stable).
|
|
21
|
+
*/
|
|
22
|
+
import { credentials as grpcCredentials, } from "@grpc/grpc-js";
|
|
23
|
+
import { OpTerminatedError } from "./errors/op-terminated-error.js";
|
|
24
|
+
import { OpControlSignal, PolicyServiceClient, } from "./proto/generated/policy.js";
|
|
25
|
+
export class OpControlSubscriber {
|
|
26
|
+
client;
|
|
27
|
+
agent;
|
|
28
|
+
ops = new Map();
|
|
29
|
+
call = null;
|
|
30
|
+
alive = true;
|
|
31
|
+
constructor(client, agent) {
|
|
32
|
+
this.client = client;
|
|
33
|
+
this.agent = agent;
|
|
34
|
+
}
|
|
35
|
+
/** Open the gRPC channel + subscription stream and start the reader. */
|
|
36
|
+
static connect(gatewayUrl, opts) {
|
|
37
|
+
const agent = {
|
|
38
|
+
orgId: opts.orgId,
|
|
39
|
+
teamId: opts.teamId,
|
|
40
|
+
agentId: opts.agentId,
|
|
41
|
+
};
|
|
42
|
+
const client = opts.clientFactory
|
|
43
|
+
? opts.clientFactory()
|
|
44
|
+
: new PolicyServiceClient(gatewayUrl, opts.credentials ?? grpcCredentials.createInsecure());
|
|
45
|
+
const subscriber = new OpControlSubscriber(client, agent);
|
|
46
|
+
subscriber.start();
|
|
47
|
+
return subscriber;
|
|
48
|
+
}
|
|
49
|
+
/** Open the stream and wire reader handlers. Public so tests can call
|
|
50
|
+
* directly after constructing with a hand-rolled client.
|
|
51
|
+
*/
|
|
52
|
+
start() {
|
|
53
|
+
this.call = this.client.opControlStream({ agentId: this.agent });
|
|
54
|
+
this.call.on("data", (msg) => this.dispatch(msg));
|
|
55
|
+
this.call.on("error", () => this.markStreamDead());
|
|
56
|
+
this.call.on("end", () => this.markStreamDead());
|
|
57
|
+
}
|
|
58
|
+
dispatch(msg) {
|
|
59
|
+
const state = this.slot(msg.opId);
|
|
60
|
+
switch (msg.signal) {
|
|
61
|
+
case OpControlSignal.OP_CONTROL_SIGNAL_PAUSE:
|
|
62
|
+
state.paused = true;
|
|
63
|
+
break;
|
|
64
|
+
case OpControlSignal.OP_CONTROL_SIGNAL_RESUME:
|
|
65
|
+
state.paused = false;
|
|
66
|
+
this.flushResolvers(state);
|
|
67
|
+
break;
|
|
68
|
+
case OpControlSignal.OP_CONTROL_SIGNAL_TERMINATE:
|
|
69
|
+
state.terminated = true;
|
|
70
|
+
this.flushResolvers(state);
|
|
71
|
+
break;
|
|
72
|
+
default:
|
|
73
|
+
// UNSPECIFIED / UNRECOGNIZED — drop on the floor.
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
slot(opId) {
|
|
78
|
+
let state = this.ops.get(opId);
|
|
79
|
+
if (!state) {
|
|
80
|
+
state = { paused: false, terminated: false, resolvers: [] };
|
|
81
|
+
this.ops.set(opId, state);
|
|
82
|
+
}
|
|
83
|
+
return state;
|
|
84
|
+
}
|
|
85
|
+
flushResolvers(state) {
|
|
86
|
+
const pending = state.resolvers;
|
|
87
|
+
state.resolvers = [];
|
|
88
|
+
for (const resolve of pending)
|
|
89
|
+
resolve();
|
|
90
|
+
}
|
|
91
|
+
markStreamDead() {
|
|
92
|
+
this.alive = false;
|
|
93
|
+
// Wake any blocked waiters so they can re-check state.
|
|
94
|
+
for (const state of this.ops.values())
|
|
95
|
+
this.flushResolvers(state);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Block until `opId` is runnable, or reject on terminate.
|
|
99
|
+
*
|
|
100
|
+
* Resolves immediately when the op is not currently paused. When paused,
|
|
101
|
+
* waits up to `timeoutMs` for a resume signal. Rejects with
|
|
102
|
+
* {@link OpTerminatedError} if the op has been (or becomes) terminated.
|
|
103
|
+
*
|
|
104
|
+
* A timeout resolves normally — the caller can inspect {@link isPaused}
|
|
105
|
+
* or retry. Matches the cooperative-pause expectation in the architecture
|
|
106
|
+
* doc (the SDK yields, it doesn't deadline-enforce).
|
|
107
|
+
*/
|
|
108
|
+
async waitForOp(opId, opts = {}) {
|
|
109
|
+
const state = this.slot(opId);
|
|
110
|
+
if (state.terminated) {
|
|
111
|
+
throw new OpTerminatedError(`op ${opId} was terminated by the gateway`, opId);
|
|
112
|
+
}
|
|
113
|
+
if (!state.paused)
|
|
114
|
+
return;
|
|
115
|
+
await new Promise((resolve) => {
|
|
116
|
+
state.resolvers.push(resolve);
|
|
117
|
+
if (opts.timeoutMs !== undefined) {
|
|
118
|
+
setTimeout(() => {
|
|
119
|
+
// Remove this resolver from the queue + resolve so the await unblocks.
|
|
120
|
+
const idx = state.resolvers.indexOf(resolve);
|
|
121
|
+
if (idx !== -1)
|
|
122
|
+
state.resolvers.splice(idx, 1);
|
|
123
|
+
resolve();
|
|
124
|
+
}, opts.timeoutMs);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
if (state.terminated) {
|
|
128
|
+
throw new OpTerminatedError(`op ${opId} was terminated by the gateway`, opId);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
isPaused(opId) {
|
|
132
|
+
return this.ops.get(opId)?.paused ?? false;
|
|
133
|
+
}
|
|
134
|
+
isTerminated(opId) {
|
|
135
|
+
return this.ops.get(opId)?.terminated ?? false;
|
|
136
|
+
}
|
|
137
|
+
streamAlive() {
|
|
138
|
+
return this.alive;
|
|
139
|
+
}
|
|
140
|
+
/** Cancel the stream and clean up. */
|
|
141
|
+
close() {
|
|
142
|
+
this.call?.cancel();
|
|
143
|
+
this.client.close?.();
|
|
144
|
+
this.markStreamDead();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=op-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"op-control.js","sourceRoot":"","sources":["../../src/op-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
// AUTO-GENERATED by scripts/gen-proto.mjs from ../agent-assembly/proto/. Do not edit by hand.
|
|
2
|
+
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
3
|
+
// versions:
|
|
4
|
+
// protoc-gen-ts_proto v2.11.8
|
|
5
|
+
// protoc v3.19.1
|
|
6
|
+
// source: common.proto
|
|
7
|
+
/* eslint-disable */
|
|
8
|
+
import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
|
|
9
|
+
export const protobufPackage = "assembly.common.v1";
|
|
10
|
+
/**
|
|
11
|
+
* Decision is the outcome of a policy evaluation. Used by policy.proto and
|
|
12
|
+
* mirrored in audit.proto to keep audit self-contained.
|
|
13
|
+
*/
|
|
14
|
+
export var Decision;
|
|
15
|
+
(function (Decision) {
|
|
16
|
+
Decision[Decision["DECISION_UNSPECIFIED"] = 0] = "DECISION_UNSPECIFIED";
|
|
17
|
+
/** ALLOW - Action is permitted immediately. */
|
|
18
|
+
Decision[Decision["ALLOW"] = 1] = "ALLOW";
|
|
19
|
+
/** DENY - Action is blocked; no further recourse. */
|
|
20
|
+
Decision[Decision["DENY"] = 2] = "DENY";
|
|
21
|
+
/** PENDING - Action is held — a human reviewer must approve or reject it. */
|
|
22
|
+
Decision[Decision["PENDING"] = 3] = "PENDING";
|
|
23
|
+
/** REDACT - Action is permitted but sensitive fields must be redacted first. */
|
|
24
|
+
Decision[Decision["REDACT"] = 4] = "REDACT";
|
|
25
|
+
Decision[Decision["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
|
|
26
|
+
})(Decision || (Decision = {}));
|
|
27
|
+
export function decisionFromJSON(object) {
|
|
28
|
+
switch (object) {
|
|
29
|
+
case 0:
|
|
30
|
+
case "DECISION_UNSPECIFIED":
|
|
31
|
+
return Decision.DECISION_UNSPECIFIED;
|
|
32
|
+
case 1:
|
|
33
|
+
case "ALLOW":
|
|
34
|
+
return Decision.ALLOW;
|
|
35
|
+
case 2:
|
|
36
|
+
case "DENY":
|
|
37
|
+
return Decision.DENY;
|
|
38
|
+
case 3:
|
|
39
|
+
case "PENDING":
|
|
40
|
+
return Decision.PENDING;
|
|
41
|
+
case 4:
|
|
42
|
+
case "REDACT":
|
|
43
|
+
return Decision.REDACT;
|
|
44
|
+
case -1:
|
|
45
|
+
case "UNRECOGNIZED":
|
|
46
|
+
default:
|
|
47
|
+
return Decision.UNRECOGNIZED;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function decisionToJSON(object) {
|
|
51
|
+
switch (object) {
|
|
52
|
+
case Decision.DECISION_UNSPECIFIED:
|
|
53
|
+
return "DECISION_UNSPECIFIED";
|
|
54
|
+
case Decision.ALLOW:
|
|
55
|
+
return "ALLOW";
|
|
56
|
+
case Decision.DENY:
|
|
57
|
+
return "DENY";
|
|
58
|
+
case Decision.PENDING:
|
|
59
|
+
return "PENDING";
|
|
60
|
+
case Decision.REDACT:
|
|
61
|
+
return "REDACT";
|
|
62
|
+
case Decision.UNRECOGNIZED:
|
|
63
|
+
default:
|
|
64
|
+
return "UNRECOGNIZED";
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* ActionType classifies what kind of operation the agent is attempting.
|
|
69
|
+
* Drives both policy rule matching and audit event categorisation.
|
|
70
|
+
*/
|
|
71
|
+
export var ActionType;
|
|
72
|
+
(function (ActionType) {
|
|
73
|
+
ActionType[ActionType["ACTION_UNSPECIFIED"] = 0] = "ACTION_UNSPECIFIED";
|
|
74
|
+
/** LLM_CALL - Call a large-language model (e.g. GPT-4o, Claude, Gemini). */
|
|
75
|
+
ActionType[ActionType["LLM_CALL"] = 1] = "LLM_CALL";
|
|
76
|
+
/** TOOL_CALL - Invoke a tool or MCP server function. */
|
|
77
|
+
ActionType[ActionType["TOOL_CALL"] = 2] = "TOOL_CALL";
|
|
78
|
+
/** FILE_OPERATION - Read, write, delete, or create a local file. */
|
|
79
|
+
ActionType[ActionType["FILE_OPERATION"] = 3] = "FILE_OPERATION";
|
|
80
|
+
/** NETWORK_CALL - Make an outbound network request. */
|
|
81
|
+
ActionType[ActionType["NETWORK_CALL"] = 4] = "NETWORK_CALL";
|
|
82
|
+
/** PROCESS_EXEC - Execute a subprocess. */
|
|
83
|
+
ActionType[ActionType["PROCESS_EXEC"] = 5] = "PROCESS_EXEC";
|
|
84
|
+
/** AGENT_SPAWN - Spawn a child agent. */
|
|
85
|
+
ActionType[ActionType["AGENT_SPAWN"] = 6] = "AGENT_SPAWN";
|
|
86
|
+
ActionType[ActionType["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
|
|
87
|
+
})(ActionType || (ActionType = {}));
|
|
88
|
+
export function actionTypeFromJSON(object) {
|
|
89
|
+
switch (object) {
|
|
90
|
+
case 0:
|
|
91
|
+
case "ACTION_UNSPECIFIED":
|
|
92
|
+
return ActionType.ACTION_UNSPECIFIED;
|
|
93
|
+
case 1:
|
|
94
|
+
case "LLM_CALL":
|
|
95
|
+
return ActionType.LLM_CALL;
|
|
96
|
+
case 2:
|
|
97
|
+
case "TOOL_CALL":
|
|
98
|
+
return ActionType.TOOL_CALL;
|
|
99
|
+
case 3:
|
|
100
|
+
case "FILE_OPERATION":
|
|
101
|
+
return ActionType.FILE_OPERATION;
|
|
102
|
+
case 4:
|
|
103
|
+
case "NETWORK_CALL":
|
|
104
|
+
return ActionType.NETWORK_CALL;
|
|
105
|
+
case 5:
|
|
106
|
+
case "PROCESS_EXEC":
|
|
107
|
+
return ActionType.PROCESS_EXEC;
|
|
108
|
+
case 6:
|
|
109
|
+
case "AGENT_SPAWN":
|
|
110
|
+
return ActionType.AGENT_SPAWN;
|
|
111
|
+
case -1:
|
|
112
|
+
case "UNRECOGNIZED":
|
|
113
|
+
default:
|
|
114
|
+
return ActionType.UNRECOGNIZED;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export function actionTypeToJSON(object) {
|
|
118
|
+
switch (object) {
|
|
119
|
+
case ActionType.ACTION_UNSPECIFIED:
|
|
120
|
+
return "ACTION_UNSPECIFIED";
|
|
121
|
+
case ActionType.LLM_CALL:
|
|
122
|
+
return "LLM_CALL";
|
|
123
|
+
case ActionType.TOOL_CALL:
|
|
124
|
+
return "TOOL_CALL";
|
|
125
|
+
case ActionType.FILE_OPERATION:
|
|
126
|
+
return "FILE_OPERATION";
|
|
127
|
+
case ActionType.NETWORK_CALL:
|
|
128
|
+
return "NETWORK_CALL";
|
|
129
|
+
case ActionType.PROCESS_EXEC:
|
|
130
|
+
return "PROCESS_EXEC";
|
|
131
|
+
case ActionType.AGENT_SPAWN:
|
|
132
|
+
return "AGENT_SPAWN";
|
|
133
|
+
case ActionType.UNRECOGNIZED:
|
|
134
|
+
default:
|
|
135
|
+
return "UNRECOGNIZED";
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** RiskTier classifies an agent or policy by the risk level it operates at. */
|
|
139
|
+
export var RiskTier;
|
|
140
|
+
(function (RiskTier) {
|
|
141
|
+
RiskTier[RiskTier["RISK_UNSPECIFIED"] = 0] = "RISK_UNSPECIFIED";
|
|
142
|
+
/** LOW - Low risk: log-only enforcement; no blocking. */
|
|
143
|
+
RiskTier[RiskTier["LOW"] = 1] = "LOW";
|
|
144
|
+
/** MEDIUM - Medium risk: block-and-optionally-approve enforcement. */
|
|
145
|
+
RiskTier[RiskTier["MEDIUM"] = 2] = "MEDIUM";
|
|
146
|
+
/** HIGH - High risk: always block; human review mandatory. */
|
|
147
|
+
RiskTier[RiskTier["HIGH"] = 3] = "HIGH";
|
|
148
|
+
/** CRITICAL - Critical risk: immediate kill + incident escalation. */
|
|
149
|
+
RiskTier[RiskTier["CRITICAL"] = 4] = "CRITICAL";
|
|
150
|
+
RiskTier[RiskTier["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
|
|
151
|
+
})(RiskTier || (RiskTier = {}));
|
|
152
|
+
export function riskTierFromJSON(object) {
|
|
153
|
+
switch (object) {
|
|
154
|
+
case 0:
|
|
155
|
+
case "RISK_UNSPECIFIED":
|
|
156
|
+
return RiskTier.RISK_UNSPECIFIED;
|
|
157
|
+
case 1:
|
|
158
|
+
case "LOW":
|
|
159
|
+
return RiskTier.LOW;
|
|
160
|
+
case 2:
|
|
161
|
+
case "MEDIUM":
|
|
162
|
+
return RiskTier.MEDIUM;
|
|
163
|
+
case 3:
|
|
164
|
+
case "HIGH":
|
|
165
|
+
return RiskTier.HIGH;
|
|
166
|
+
case 4:
|
|
167
|
+
case "CRITICAL":
|
|
168
|
+
return RiskTier.CRITICAL;
|
|
169
|
+
case -1:
|
|
170
|
+
case "UNRECOGNIZED":
|
|
171
|
+
default:
|
|
172
|
+
return RiskTier.UNRECOGNIZED;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
export function riskTierToJSON(object) {
|
|
176
|
+
switch (object) {
|
|
177
|
+
case RiskTier.RISK_UNSPECIFIED:
|
|
178
|
+
return "RISK_UNSPECIFIED";
|
|
179
|
+
case RiskTier.LOW:
|
|
180
|
+
return "LOW";
|
|
181
|
+
case RiskTier.MEDIUM:
|
|
182
|
+
return "MEDIUM";
|
|
183
|
+
case RiskTier.HIGH:
|
|
184
|
+
return "HIGH";
|
|
185
|
+
case RiskTier.CRITICAL:
|
|
186
|
+
return "CRITICAL";
|
|
187
|
+
case RiskTier.UNRECOGNIZED:
|
|
188
|
+
default:
|
|
189
|
+
return "UNRECOGNIZED";
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function createBaseAgentId() {
|
|
193
|
+
return { orgId: "", teamId: "", agentId: "" };
|
|
194
|
+
}
|
|
195
|
+
export const AgentId = {
|
|
196
|
+
encode(message, writer = new BinaryWriter()) {
|
|
197
|
+
if (message.orgId !== "") {
|
|
198
|
+
writer.uint32(10).string(message.orgId);
|
|
199
|
+
}
|
|
200
|
+
if (message.teamId !== "") {
|
|
201
|
+
writer.uint32(18).string(message.teamId);
|
|
202
|
+
}
|
|
203
|
+
if (message.agentId !== "") {
|
|
204
|
+
writer.uint32(26).string(message.agentId);
|
|
205
|
+
}
|
|
206
|
+
return writer;
|
|
207
|
+
},
|
|
208
|
+
decode(input, length) {
|
|
209
|
+
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
|
|
210
|
+
const end = length === undefined ? reader.len : reader.pos + length;
|
|
211
|
+
const message = createBaseAgentId();
|
|
212
|
+
while (reader.pos < end) {
|
|
213
|
+
const tag = reader.uint32();
|
|
214
|
+
switch (tag >>> 3) {
|
|
215
|
+
case 1: {
|
|
216
|
+
if (tag !== 10) {
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
message.orgId = reader.string();
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
case 2: {
|
|
223
|
+
if (tag !== 18) {
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
message.teamId = reader.string();
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
case 3: {
|
|
230
|
+
if (tag !== 26) {
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
message.agentId = reader.string();
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
reader.skip(tag & 7);
|
|
241
|
+
}
|
|
242
|
+
return message;
|
|
243
|
+
},
|
|
244
|
+
fromJSON(object) {
|
|
245
|
+
return {
|
|
246
|
+
orgId: isSet(object.orgId)
|
|
247
|
+
? globalThis.String(object.orgId)
|
|
248
|
+
: isSet(object.org_id)
|
|
249
|
+
? globalThis.String(object.org_id)
|
|
250
|
+
: "",
|
|
251
|
+
teamId: isSet(object.teamId)
|
|
252
|
+
? globalThis.String(object.teamId)
|
|
253
|
+
: isSet(object.team_id)
|
|
254
|
+
? globalThis.String(object.team_id)
|
|
255
|
+
: "",
|
|
256
|
+
agentId: isSet(object.agentId)
|
|
257
|
+
? globalThis.String(object.agentId)
|
|
258
|
+
: isSet(object.agent_id)
|
|
259
|
+
? globalThis.String(object.agent_id)
|
|
260
|
+
: "",
|
|
261
|
+
};
|
|
262
|
+
},
|
|
263
|
+
toJSON(message) {
|
|
264
|
+
const obj = {};
|
|
265
|
+
if (message.orgId !== "") {
|
|
266
|
+
obj.orgId = message.orgId;
|
|
267
|
+
}
|
|
268
|
+
if (message.teamId !== "") {
|
|
269
|
+
obj.teamId = message.teamId;
|
|
270
|
+
}
|
|
271
|
+
if (message.agentId !== "") {
|
|
272
|
+
obj.agentId = message.agentId;
|
|
273
|
+
}
|
|
274
|
+
return obj;
|
|
275
|
+
},
|
|
276
|
+
create(base) {
|
|
277
|
+
return AgentId.fromPartial(base ?? {});
|
|
278
|
+
},
|
|
279
|
+
fromPartial(object) {
|
|
280
|
+
const message = createBaseAgentId();
|
|
281
|
+
message.orgId = object.orgId ?? "";
|
|
282
|
+
message.teamId = object.teamId ?? "";
|
|
283
|
+
message.agentId = object.agentId ?? "";
|
|
284
|
+
return message;
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
function createBaseTimestamp() {
|
|
288
|
+
return { unixMs: 0 };
|
|
289
|
+
}
|
|
290
|
+
export const Timestamp = {
|
|
291
|
+
encode(message, writer = new BinaryWriter()) {
|
|
292
|
+
if (message.unixMs !== 0) {
|
|
293
|
+
writer.uint32(8).int64(message.unixMs);
|
|
294
|
+
}
|
|
295
|
+
return writer;
|
|
296
|
+
},
|
|
297
|
+
decode(input, length) {
|
|
298
|
+
const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
|
|
299
|
+
const end = length === undefined ? reader.len : reader.pos + length;
|
|
300
|
+
const message = createBaseTimestamp();
|
|
301
|
+
while (reader.pos < end) {
|
|
302
|
+
const tag = reader.uint32();
|
|
303
|
+
switch (tag >>> 3) {
|
|
304
|
+
case 1: {
|
|
305
|
+
if (tag !== 8) {
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
message.unixMs = longToNumber(reader.int64());
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
reader.skip(tag & 7);
|
|
316
|
+
}
|
|
317
|
+
return message;
|
|
318
|
+
},
|
|
319
|
+
fromJSON(object) {
|
|
320
|
+
return {
|
|
321
|
+
unixMs: isSet(object.unixMs)
|
|
322
|
+
? globalThis.Number(object.unixMs)
|
|
323
|
+
: isSet(object.unix_ms)
|
|
324
|
+
? globalThis.Number(object.unix_ms)
|
|
325
|
+
: 0,
|
|
326
|
+
};
|
|
327
|
+
},
|
|
328
|
+
toJSON(message) {
|
|
329
|
+
const obj = {};
|
|
330
|
+
if (message.unixMs !== 0) {
|
|
331
|
+
obj.unixMs = Math.round(message.unixMs);
|
|
332
|
+
}
|
|
333
|
+
return obj;
|
|
334
|
+
},
|
|
335
|
+
create(base) {
|
|
336
|
+
return Timestamp.fromPartial(base ?? {});
|
|
337
|
+
},
|
|
338
|
+
fromPartial(object) {
|
|
339
|
+
const message = createBaseTimestamp();
|
|
340
|
+
message.unixMs = object.unixMs ?? 0;
|
|
341
|
+
return message;
|
|
342
|
+
},
|
|
343
|
+
};
|
|
344
|
+
function longToNumber(int64) {
|
|
345
|
+
const num = globalThis.Number(int64.toString());
|
|
346
|
+
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
|
347
|
+
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
|
348
|
+
}
|
|
349
|
+
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
|
350
|
+
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
|
351
|
+
}
|
|
352
|
+
return num;
|
|
353
|
+
}
|
|
354
|
+
function isSet(value) {
|
|
355
|
+
return value !== null && value !== undefined;
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=common.js.map
|