@armoriq/sdk-dev 0.3.5 → 0.3.7
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/dist/cli/commands/auth.d.ts +1 -0
- package/dist/cli/commands/auth.d.ts.map +1 -1
- package/dist/cli/commands/auth.js +124 -25
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +6 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/integrations/microsoft_copilot.d.ts +84 -0
- package/dist/integrations/microsoft_copilot.d.ts.map +1 -0
- package/dist/integrations/microsoft_copilot.js +126 -0
- package/dist/integrations/microsoft_copilot.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyNH,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4GlB;AAED,wBAAgB,SAAS,IAAI,MAAM,CAOlC;AAED,wBAAgB,SAAS,IAAI,MAAM,CAkBlC"}
|
|
@@ -54,32 +54,123 @@ const child_process_1 = require("child_process");
|
|
|
54
54
|
const axios_1 = __importDefault(require("axios"));
|
|
55
55
|
const credentials_1 = require("../../credentials");
|
|
56
56
|
const util_1 = require("../util");
|
|
57
|
-
const
|
|
58
|
-
|
|
57
|
+
const PRODUCT_LABELS = {
|
|
58
|
+
armorclaude: 'ArmorClaude',
|
|
59
|
+
armorcodex: 'ArmorCodex',
|
|
60
|
+
armorcopilot: 'ArmorCopilot',
|
|
61
|
+
armorclaw: 'ArmorClaw',
|
|
62
|
+
platform: 'ArmorIQ Platform',
|
|
63
|
+
sdk: 'ArmorIQ SDK',
|
|
64
|
+
};
|
|
65
|
+
function escapeHtml(s) {
|
|
66
|
+
return s.replace(/[&<>"']/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c] ?? c);
|
|
67
|
+
}
|
|
68
|
+
function renderSuccessHtml(opts) {
|
|
69
|
+
const productKey = (opts.product ?? '').toLowerCase().trim();
|
|
70
|
+
const productLabel = PRODUCT_LABELS[productKey] ?? null;
|
|
71
|
+
const emailHtml = opts.email
|
|
72
|
+
? `<div class="email">${escapeHtml(opts.email)}</div>`
|
|
73
|
+
: '';
|
|
74
|
+
const productHtml = productLabel
|
|
75
|
+
? `<div class="chip">Connected to ${escapeHtml(productLabel)}</div>`
|
|
76
|
+
: '';
|
|
77
|
+
const year = new Date().getFullYear();
|
|
78
|
+
return `<!DOCTYPE html>
|
|
79
|
+
<html lang="en"><head>
|
|
80
|
+
<meta charset="utf-8">
|
|
81
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
82
|
+
<title>Authorized · ArmorIQ</title>
|
|
83
|
+
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;utf8,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 27 27"><path d="M6.25 16.18 9.14 11.97 11.83 15.88 14.53 11.97 17.17 15.88 20.06 11.71" stroke="#D97D55" stroke-width="2" fill="none" stroke-linecap="round"/><circle cx="13.15" cy="13.85" r="12.15" stroke="#D97D55" stroke-width="2" fill="none"/></svg>`)}">
|
|
59
84
|
<style>
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
85
|
+
:root { color-scheme: light; }
|
|
86
|
+
* { box-sizing: border-box; }
|
|
87
|
+
html, body { height: 100%; margin: 0; }
|
|
88
|
+
body {
|
|
89
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Inter, system-ui, sans-serif;
|
|
90
|
+
background: #fafafa;
|
|
91
|
+
color: #111;
|
|
92
|
+
display: flex; flex-direction: column;
|
|
93
|
+
min-height: 100vh;
|
|
94
|
+
}
|
|
95
|
+
main {
|
|
96
|
+
flex: 1;
|
|
97
|
+
display: flex; flex-direction: column;
|
|
98
|
+
align-items: center; justify-content: center;
|
|
99
|
+
gap: 28px;
|
|
100
|
+
padding: 48px 32px;
|
|
101
|
+
}
|
|
102
|
+
.brand {
|
|
103
|
+
display: flex; flex-direction: column; align-items: center; gap: 14px;
|
|
104
|
+
}
|
|
105
|
+
.brand svg.mark { width: 80px; height: 80px; }
|
|
106
|
+
.brand .wordmark { font-weight: 700; font-size: 34px; letter-spacing: -0.025em; color: #111; }
|
|
107
|
+
.card {
|
|
108
|
+
background: #fff; border: 1px solid #e5e7eb; border-radius: 14px;
|
|
109
|
+
padding: 40px 36px; max-width: 460px; width: 100%; text-align: center;
|
|
110
|
+
box-shadow: 0 1px 2px rgba(0,0,0,0.04);
|
|
111
|
+
}
|
|
112
|
+
.check {
|
|
113
|
+
width: 64px; height: 64px; border-radius: 999px;
|
|
114
|
+
background: #dcfce7; color: #16a34a;
|
|
115
|
+
display: flex; align-items: center; justify-content: center;
|
|
116
|
+
margin: 0 auto 18px;
|
|
117
|
+
}
|
|
118
|
+
.check svg { width: 32px; height: 32px; }
|
|
119
|
+
h1 { margin: 0 0 8px; font-size: 22px; letter-spacing: -0.01em; }
|
|
120
|
+
p.lead { margin: 0 0 4px; color: #4b5563; font-size: 14px; line-height: 1.5; }
|
|
121
|
+
.email { font-size: 13px; color: #111; font-weight: 600; margin-top: 14px; }
|
|
122
|
+
.chip {
|
|
123
|
+
display: inline-block; margin-top: 10px;
|
|
124
|
+
padding: 4px 10px; border-radius: 999px;
|
|
125
|
+
background: #f3f4f6; color: #374151;
|
|
126
|
+
font-size: 12px; font-weight: 500;
|
|
127
|
+
}
|
|
128
|
+
.hint {
|
|
129
|
+
margin-top: 20px; padding-top: 18px; border-top: 1px solid #f1f5f9;
|
|
130
|
+
color: #6b7280; font-size: 12px;
|
|
131
|
+
}
|
|
132
|
+
footer {
|
|
133
|
+
padding: 22px 32px; color: #6b7280; font-size: 12px;
|
|
134
|
+
display: flex; justify-content: space-between; flex-wrap: wrap; gap: 12px;
|
|
135
|
+
border-top: 1px solid #eef0f3;
|
|
136
|
+
}
|
|
137
|
+
footer nav a { color: #6b7280; text-decoration: none; margin-left: 16px; }
|
|
138
|
+
footer nav a:hover { color: #111; text-decoration: underline; }
|
|
139
|
+
</style>
|
|
140
|
+
</head>
|
|
141
|
+
<body>
|
|
142
|
+
<main>
|
|
143
|
+
<div class="brand">
|
|
144
|
+
<svg class="mark" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
145
|
+
<path d="M6.25 16.18 9.14 11.97 11.83 15.88 14.53 11.97 17.17 15.88 20.06 11.71" stroke="#D97D55" stroke-width="2" stroke-linecap="round"/>
|
|
146
|
+
<circle cx="13.15" cy="13.85" r="12.15" stroke="#D97D55" stroke-width="2"/>
|
|
77
147
|
</svg>
|
|
148
|
+
<span class="wordmark">ArmorIQ</span>
|
|
149
|
+
</div>
|
|
150
|
+
<div class="card">
|
|
151
|
+
<div class="check">
|
|
152
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
153
|
+
<path d="M5 13l4 4L19 7"/>
|
|
154
|
+
</svg>
|
|
155
|
+
</div>
|
|
156
|
+
<h1>You're all set</h1>
|
|
157
|
+
<p class="lead">Your device is now connected to ArmorIQ.</p>
|
|
158
|
+
${emailHtml}
|
|
159
|
+
${productHtml}
|
|
160
|
+
<div class="hint">You can close this tab and return to your terminal.</div>
|
|
78
161
|
</div>
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
162
|
+
</main>
|
|
163
|
+
<footer>
|
|
164
|
+
<div>© ${year} ArmorIQ Inc.</div>
|
|
165
|
+
<nav>
|
|
166
|
+
<a href="https://docs.armoriq.ai" target="_blank" rel="noreferrer">Docs</a>
|
|
167
|
+
<a href="https://dev.armoriq.ai" target="_blank" rel="noreferrer">Dashboard</a>
|
|
168
|
+
<a href="https://armoriq.ai/privacy" target="_blank" rel="noreferrer">Privacy</a>
|
|
169
|
+
<a href="https://armoriq.ai/terms" target="_blank" rel="noreferrer">Terms</a>
|
|
170
|
+
</nav>
|
|
171
|
+
</footer>
|
|
82
172
|
</body></html>`;
|
|
173
|
+
}
|
|
83
174
|
function findFreePort() {
|
|
84
175
|
return new Promise((resolve, reject) => {
|
|
85
176
|
const server = net.createServer();
|
|
@@ -97,7 +188,7 @@ function findFreePort() {
|
|
|
97
188
|
});
|
|
98
189
|
});
|
|
99
190
|
}
|
|
100
|
-
function startCallbackServer(port) {
|
|
191
|
+
function startCallbackServer(port, product) {
|
|
101
192
|
let resolveResult;
|
|
102
193
|
const once = new Promise((resolve) => {
|
|
103
194
|
resolveResult = resolve;
|
|
@@ -106,8 +197,13 @@ function startCallbackServer(port) {
|
|
|
106
197
|
const url = new url_1.URL(req.url ?? '/', `http://localhost:${port}`);
|
|
107
198
|
if (url.pathname === '/callback') {
|
|
108
199
|
const params = Object.fromEntries(url.searchParams.entries());
|
|
200
|
+
const callbackProduct = params.product || product;
|
|
109
201
|
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
110
|
-
res.end(
|
|
202
|
+
res.end(renderSuccessHtml({
|
|
203
|
+
email: params.email,
|
|
204
|
+
product: callbackProduct,
|
|
205
|
+
orgId: params.org_id,
|
|
206
|
+
}));
|
|
111
207
|
const result = {
|
|
112
208
|
api_key: params.key,
|
|
113
209
|
email: params.email,
|
|
@@ -141,12 +237,13 @@ function sleep(ms) {
|
|
|
141
237
|
async function cmdLogin(args) {
|
|
142
238
|
const backend = (args.backend ?? process.env.ARMORIQ_BACKEND_URL ?? (0, util_1.backendBase)()).replace(/\/+$/, '');
|
|
143
239
|
const requestedOrg = (args.org ?? '').trim();
|
|
240
|
+
const product = (args.product ?? process.env.ARMORIQ_PRODUCT ?? '').trim();
|
|
144
241
|
(0, util_1.out)('');
|
|
145
242
|
(0, util_1.out)(' \x1b[1m\x1b[36m┃ ArmorIQ Login\x1b[0m');
|
|
146
243
|
(0, util_1.out)('');
|
|
147
244
|
const port = await findFreePort();
|
|
148
245
|
const callbackUrl = `http://localhost:${port}/callback`;
|
|
149
|
-
const { server, once: callbackOnce } = startCallbackServer(port);
|
|
246
|
+
const { server, once: callbackOnce } = startCallbackServer(port, product);
|
|
150
247
|
let dc;
|
|
151
248
|
try {
|
|
152
249
|
const r = await axios_1.default.post(`${backend}/auth/device/code`, { callback_url: callbackUrl }, { timeout: 10000 });
|
|
@@ -164,6 +261,8 @@ async function cmdLogin(args) {
|
|
|
164
261
|
let browserUrl = `${verification_uri_complete}${sep}callback=${encodeURIComponent(callbackUrl)}`;
|
|
165
262
|
if (requestedOrg)
|
|
166
263
|
browserUrl += `&org=${encodeURIComponent(requestedOrg)}`;
|
|
264
|
+
if (product)
|
|
265
|
+
browserUrl += `&product=${encodeURIComponent(product)}`;
|
|
167
266
|
(0, util_1.out)(' Opening browser...\n');
|
|
168
267
|
openBrowser(browserUrl);
|
|
169
268
|
(0, util_1.out)(' If the browser didn\'t open, visit:');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAiCH,KAAK,IAAI,GAAG,MAAM,EAAE,CAAC;AAcrB,iBAAe,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CA4E9C;AAgBD,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -19,7 +19,10 @@ armoriq — ArmorIQ SDK CLI
|
|
|
19
19
|
Usage: armoriq <command> [options]
|
|
20
20
|
|
|
21
21
|
Commands:
|
|
22
|
-
login [--org <name>]
|
|
22
|
+
login [--org <name>] [--product <name>]
|
|
23
|
+
OAuth device-code login flow. --product
|
|
24
|
+
(armorclaude|armorcodex|armorcopilot|...) shows
|
|
25
|
+
a product chip on the success page.
|
|
23
26
|
logout Remove cached credentials
|
|
24
27
|
whoami Show the currently logged-in account
|
|
25
28
|
|
|
@@ -61,7 +64,8 @@ async function run(argv) {
|
|
|
61
64
|
const { cmdLogin } = await import('./commands/auth.js');
|
|
62
65
|
const org = parseFlag(rest, 'org');
|
|
63
66
|
const backend = parseFlag(rest, 'backend');
|
|
64
|
-
|
|
67
|
+
const product = parseFlag(rest, 'product');
|
|
68
|
+
return cmdLogin({ org, backend, product });
|
|
65
69
|
}
|
|
66
70
|
case 'logout': {
|
|
67
71
|
const { cmdLogout } = await import('./commands/auth.js');
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AACA;;;;;;;;;GASG;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArmorIQ - Microsoft Copilot Studio integration (TypeScript).
|
|
3
|
+
*
|
|
4
|
+
* Provides the building blocks for hosting an ArmorCopilot webhook
|
|
5
|
+
* receiver that fronts the Microsoft Copilot Studio external security
|
|
6
|
+
* webhook (`POST /analyze-tool-execution`).
|
|
7
|
+
*
|
|
8
|
+
* import {
|
|
9
|
+
* verifyCopilotStudioSignature,
|
|
10
|
+
* translateCopilotStudioPayload,
|
|
11
|
+
* } from '@armoriq/sdk/integrations/microsoft_copilot';
|
|
12
|
+
*
|
|
13
|
+
* The MS side sends each tool invocation with an HMAC-SHA256 signature
|
|
14
|
+
* computed over `<timestamp>.<rawBody>` using a shared secret the tenant
|
|
15
|
+
* configured in Copilot Studio admin. We verify, translate the payload
|
|
16
|
+
* to our internal tool-call shape, then run the request through
|
|
17
|
+
* ArmorIQ policy enforcement.
|
|
18
|
+
*
|
|
19
|
+
* The verifier here is pure crypto: it does not call the backend. The
|
|
20
|
+
* caller is responsible for routing the verified request through the
|
|
21
|
+
* regular SDK enforce path (or future plan-less enforce endpoint) once
|
|
22
|
+
* the signature has been confirmed.
|
|
23
|
+
*/
|
|
24
|
+
export interface CopilotStudioPayload {
|
|
25
|
+
userMessage?: string;
|
|
26
|
+
chatHistory?: Record<string, unknown>;
|
|
27
|
+
toolDefinition: {
|
|
28
|
+
name?: string;
|
|
29
|
+
id?: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
};
|
|
33
|
+
toolInputValues?: Record<string, unknown>;
|
|
34
|
+
agentMetadata?: Record<string, unknown>;
|
|
35
|
+
userMetadata?: Record<string, unknown>;
|
|
36
|
+
conversationMetadata?: Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
export interface CopilotStudioVerifyArgs {
|
|
39
|
+
/** Raw HTTP body bytes — must be the exact bytes MS signed, before any JSON re-serialization. */
|
|
40
|
+
rawBody: Buffer | string;
|
|
41
|
+
/** Value of `X-ArmorCopilot-Signature` header. Hex string, optionally prefixed `sha256=`. */
|
|
42
|
+
signature: string;
|
|
43
|
+
/** Value of `X-ArmorCopilot-Timestamp` header. Unix seconds. */
|
|
44
|
+
timestamp: string | number;
|
|
45
|
+
/** Per-tenant shared secret configured in Copilot Studio admin. */
|
|
46
|
+
secret: string;
|
|
47
|
+
/** Maximum allowed clock skew in seconds. Defaults to 300 (5 min). */
|
|
48
|
+
maxSkewSeconds?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface CopilotStudioVerifyResult {
|
|
51
|
+
ok: boolean;
|
|
52
|
+
reason?: 'missing-signature' | 'missing-timestamp' | 'invalid-timestamp' | 'timestamp-skew' | 'bad-signature';
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Verify the HMAC signature MS Copilot Studio attaches to a webhook
|
|
56
|
+
* request. Pure crypto — no backend calls. Constant-time comparison.
|
|
57
|
+
*/
|
|
58
|
+
export declare function verifyCopilotStudioSignature(args: CopilotStudioVerifyArgs): CopilotStudioVerifyResult;
|
|
59
|
+
export interface TranslatedToolCall {
|
|
60
|
+
toolName: string;
|
|
61
|
+
args: Record<string, unknown>;
|
|
62
|
+
userMessage?: string;
|
|
63
|
+
agentMetadata?: Record<string, unknown>;
|
|
64
|
+
userMetadata?: Record<string, unknown>;
|
|
65
|
+
conversationMetadata?: Record<string, unknown>;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Translate a Copilot Studio webhook payload into the
|
|
69
|
+
* `{ toolName, args, ...meta }` shape ArmorIQ enforce paths expect.
|
|
70
|
+
*/
|
|
71
|
+
export declare function translateCopilotStudioPayload(payload: CopilotStudioPayload): TranslatedToolCall;
|
|
72
|
+
export interface CopilotStudioDecision {
|
|
73
|
+
action: 'allow' | 'block';
|
|
74
|
+
reason?: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Sentinel mapping: a non-allow enforce result -> Copilot Studio response.
|
|
78
|
+
*/
|
|
79
|
+
export declare function toCopilotStudioDecision(enforced: {
|
|
80
|
+
allowed: boolean;
|
|
81
|
+
action?: string;
|
|
82
|
+
reason?: string;
|
|
83
|
+
}): CopilotStudioDecision;
|
|
84
|
+
//# sourceMappingURL=microsoft_copilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"microsoft_copilot.d.ts","sourceRoot":"","sources":["../../src/integrations/microsoft_copilot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,cAAc,EAAE;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,uBAAuB;IACtC,iGAAiG;IACjG,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,6FAA6F;IAC7F,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EACH,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,gBAAgB,GAChB,eAAe,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,uBAAuB,GAC5B,yBAAyB,CAuC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,oBAAoB,GAC5B,kBAAkB,CAapB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/D,qBAAqB,CAKvB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ArmorIQ - Microsoft Copilot Studio integration (TypeScript).
|
|
4
|
+
*
|
|
5
|
+
* Provides the building blocks for hosting an ArmorCopilot webhook
|
|
6
|
+
* receiver that fronts the Microsoft Copilot Studio external security
|
|
7
|
+
* webhook (`POST /analyze-tool-execution`).
|
|
8
|
+
*
|
|
9
|
+
* import {
|
|
10
|
+
* verifyCopilotStudioSignature,
|
|
11
|
+
* translateCopilotStudioPayload,
|
|
12
|
+
* } from '@armoriq/sdk/integrations/microsoft_copilot';
|
|
13
|
+
*
|
|
14
|
+
* The MS side sends each tool invocation with an HMAC-SHA256 signature
|
|
15
|
+
* computed over `<timestamp>.<rawBody>` using a shared secret the tenant
|
|
16
|
+
* configured in Copilot Studio admin. We verify, translate the payload
|
|
17
|
+
* to our internal tool-call shape, then run the request through
|
|
18
|
+
* ArmorIQ policy enforcement.
|
|
19
|
+
*
|
|
20
|
+
* The verifier here is pure crypto: it does not call the backend. The
|
|
21
|
+
* caller is responsible for routing the verified request through the
|
|
22
|
+
* regular SDK enforce path (or future plan-less enforce endpoint) once
|
|
23
|
+
* the signature has been confirmed.
|
|
24
|
+
*/
|
|
25
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
28
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
29
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
30
|
+
}
|
|
31
|
+
Object.defineProperty(o, k2, desc);
|
|
32
|
+
}) : (function(o, m, k, k2) {
|
|
33
|
+
if (k2 === undefined) k2 = k;
|
|
34
|
+
o[k2] = m[k];
|
|
35
|
+
}));
|
|
36
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
37
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
38
|
+
}) : function(o, v) {
|
|
39
|
+
o["default"] = v;
|
|
40
|
+
});
|
|
41
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
42
|
+
var ownKeys = function(o) {
|
|
43
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
44
|
+
var ar = [];
|
|
45
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
46
|
+
return ar;
|
|
47
|
+
};
|
|
48
|
+
return ownKeys(o);
|
|
49
|
+
};
|
|
50
|
+
return function (mod) {
|
|
51
|
+
if (mod && mod.__esModule) return mod;
|
|
52
|
+
var result = {};
|
|
53
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
54
|
+
__setModuleDefault(result, mod);
|
|
55
|
+
return result;
|
|
56
|
+
};
|
|
57
|
+
})();
|
|
58
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
|
+
exports.verifyCopilotStudioSignature = verifyCopilotStudioSignature;
|
|
60
|
+
exports.translateCopilotStudioPayload = translateCopilotStudioPayload;
|
|
61
|
+
exports.toCopilotStudioDecision = toCopilotStudioDecision;
|
|
62
|
+
const crypto = __importStar(require("crypto"));
|
|
63
|
+
const MAX_SKEW_SECONDS = 300;
|
|
64
|
+
/**
|
|
65
|
+
* Verify the HMAC signature MS Copilot Studio attaches to a webhook
|
|
66
|
+
* request. Pure crypto — no backend calls. Constant-time comparison.
|
|
67
|
+
*/
|
|
68
|
+
function verifyCopilotStudioSignature(args) {
|
|
69
|
+
if (!args.signature)
|
|
70
|
+
return { ok: false, reason: 'missing-signature' };
|
|
71
|
+
if (args.timestamp === undefined || args.timestamp === null) {
|
|
72
|
+
return { ok: false, reason: 'missing-timestamp' };
|
|
73
|
+
}
|
|
74
|
+
const tsNum = typeof args.timestamp === 'number'
|
|
75
|
+
? args.timestamp
|
|
76
|
+
: Number(args.timestamp);
|
|
77
|
+
if (Number.isNaN(tsNum)) {
|
|
78
|
+
return { ok: false, reason: 'invalid-timestamp' };
|
|
79
|
+
}
|
|
80
|
+
const drift = Math.abs(Date.now() / 1000 - tsNum);
|
|
81
|
+
const maxSkew = args.maxSkewSeconds ?? MAX_SKEW_SECONDS;
|
|
82
|
+
if (drift > maxSkew)
|
|
83
|
+
return { ok: false, reason: 'timestamp-skew' };
|
|
84
|
+
const body = typeof args.rawBody === 'string'
|
|
85
|
+
? args.rawBody
|
|
86
|
+
: args.rawBody.toString('utf8');
|
|
87
|
+
const expected = crypto
|
|
88
|
+
.createHmac('sha256', args.secret)
|
|
89
|
+
.update(`${tsNum}.${body}`)
|
|
90
|
+
.digest('hex');
|
|
91
|
+
const provided = args.signature.startsWith('sha256=')
|
|
92
|
+
? args.signature.slice(7)
|
|
93
|
+
: args.signature;
|
|
94
|
+
if (provided.length !== expected.length) {
|
|
95
|
+
return { ok: false, reason: 'bad-signature' };
|
|
96
|
+
}
|
|
97
|
+
const match = crypto.timingSafeEqual(Buffer.from(provided, 'hex'), Buffer.from(expected, 'hex'));
|
|
98
|
+
return match ? { ok: true } : { ok: false, reason: 'bad-signature' };
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Translate a Copilot Studio webhook payload into the
|
|
102
|
+
* `{ toolName, args, ...meta }` shape ArmorIQ enforce paths expect.
|
|
103
|
+
*/
|
|
104
|
+
function translateCopilotStudioPayload(payload) {
|
|
105
|
+
const toolName = payload.toolDefinition?.name ??
|
|
106
|
+
payload.toolDefinition?.id ??
|
|
107
|
+
'unknown';
|
|
108
|
+
return {
|
|
109
|
+
toolName: String(toolName),
|
|
110
|
+
args: payload.toolInputValues ?? {},
|
|
111
|
+
userMessage: payload.userMessage,
|
|
112
|
+
agentMetadata: payload.agentMetadata,
|
|
113
|
+
userMetadata: payload.userMetadata,
|
|
114
|
+
conversationMetadata: payload.conversationMetadata,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Sentinel mapping: a non-allow enforce result -> Copilot Studio response.
|
|
119
|
+
*/
|
|
120
|
+
function toCopilotStudioDecision(enforced) {
|
|
121
|
+
if (enforced.allowed && enforced.action !== 'block') {
|
|
122
|
+
return { action: 'allow' };
|
|
123
|
+
}
|
|
124
|
+
return { action: 'block', reason: enforced.reason };
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=microsoft_copilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"microsoft_copilot.js","sourceRoot":"","sources":["../../src/integrations/microsoft_copilot.ts"],"names":[],"mappings":"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"}
|