@armoriq/sdk-dev 0.3.4 → 0.3.5

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.
@@ -1,13 +1,21 @@
1
1
  /**
2
2
  * Build-time environment marker (matches armoriq-sdk-customer/_build_env.py).
3
3
  *
4
- * This file is the ONLY difference between the `dev` and `main` branches.
5
- * Merging dev → main conflicts on the `ARMORIQ_ENV` constant below —
6
- * that's intentional, so the release owner consciously flips the default
4
+ * This file is one of two intentional divergence points between the
5
+ * `dev` and `main` branches. Merging dev → main will conflict here and
6
+ * in `package.json` (different `version` + `bin` name) — that's
7
+ * intentional, so the release owner consciously flips both defaults
7
8
  * before publishing prod.
8
9
  *
9
- * main branch → ARMORIQ_ENV = "production" (prod URLs; published as stable)
10
- * dev branch → ARMORIQ_ENV = "staging" (staging URLs; published as -dev)
10
+ * main branch → ARMORIQ_ENV = "production" (prod URLs; published as @armoriq/sdk)
11
+ * package.json bin = "armoriq"
12
+ * dev branch → ARMORIQ_ENV = "staging" (staging URLs; published as @armoriq/sdk-dev)
13
+ * package.json bin = "armoriq-dev"
14
+ *
15
+ * The dev branch's bin is renamed to `armoriq-dev` so it can coexist
16
+ * with the prod `@armoriq/sdk` on the same machine without npm-bin
17
+ * collisions (which would otherwise cause silent PATH shadowing — a
18
+ * staging-targeted plugin would mint prod-scoped credentials).
11
19
  *
12
20
  * The baked constant is the branch-baked default. Set ARMORIQ_ENV=local
13
21
  * (or staging/production) in your shell to override at runtime. Per-
@@ -1 +1 @@
1
- {"version":3,"file":"_build_env.d.ts","sourceRoot":"","sources":["../src/_build_env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzD,eAAO,MAAM,WAAW,EAAE,OAAmB,CAAC;AAY9C,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAgBtF,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;AAUvD,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAE1D"}
1
+ {"version":3,"file":"_build_env.d.ts","sourceRoot":"","sources":["../src/_build_env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzD,eAAO,MAAM,WAAW,EAAE,OAAmB,CAAC;AAY9C,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAgBtF,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;AAUvD,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAE1D"}
@@ -2,13 +2,21 @@
2
2
  /**
3
3
  * Build-time environment marker (matches armoriq-sdk-customer/_build_env.py).
4
4
  *
5
- * This file is the ONLY difference between the `dev` and `main` branches.
6
- * Merging dev → main conflicts on the `ARMORIQ_ENV` constant below —
7
- * that's intentional, so the release owner consciously flips the default
5
+ * This file is one of two intentional divergence points between the
6
+ * `dev` and `main` branches. Merging dev → main will conflict here and
7
+ * in `package.json` (different `version` + `bin` name) — that's
8
+ * intentional, so the release owner consciously flips both defaults
8
9
  * before publishing prod.
9
10
  *
10
- * main branch → ARMORIQ_ENV = "production" (prod URLs; published as stable)
11
- * dev branch → ARMORIQ_ENV = "staging" (staging URLs; published as -dev)
11
+ * main branch → ARMORIQ_ENV = "production" (prod URLs; published as @armoriq/sdk)
12
+ * package.json bin = "armoriq"
13
+ * dev branch → ARMORIQ_ENV = "staging" (staging URLs; published as @armoriq/sdk-dev)
14
+ * package.json bin = "armoriq-dev"
15
+ *
16
+ * The dev branch's bin is renamed to `armoriq-dev` so it can coexist
17
+ * with the prod `@armoriq/sdk` on the same machine without npm-bin
18
+ * collisions (which would otherwise cause silent PATH shadowing — a
19
+ * staging-targeted plugin would mint prod-scoped credentials).
12
20
  *
13
21
  * The baked constant is the branch-baked default. Set ARMORIQ_ENV=local
14
22
  * (or staging/production) in your shell to override at runtime. Per-
@@ -1 +1 @@
1
- {"version":3,"file":"_build_env.js","sourceRoot":"","sources":["../src/_build_env.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AA4CH,0CAEC;AA1CY,QAAA,WAAW,GAAY,SAAS,CAAC;AAE9C,oEAAoE;AACpE,UAAU;AACV,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,aAAa;AACb,qFAAqF;AACrF,qFAAqF;AACrF,sFAAsF;AACtF,2CAA2C;AAC9B,QAAA,SAAS,GAAqE;IACzF,UAAU,EAAE;QACV,OAAO,EAAE,wBAAwB;QACjC,KAAK,EAAE,0BAA0B;QACjC,GAAG,EAAE,wBAAwB;KAC9B;IACD,OAAO,EAAE;QACP,OAAO,EAAE,gCAAgC;QACzC,KAAK,EAAE,oCAAoC;QAC3C,GAAG,EAAE,gCAAgC;KACtC;IACD,KAAK,EAAE;QACL,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE,uBAAuB;QAC9B,GAAG,EAAE,uBAAuB;KAC7B;CACF,CAAC;AAIF,SAAS,SAAS;IAChB,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtE,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChF,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,mBAAW,CAAC;AACrB,CAAC;AAED,SAAgB,eAAe,CAAC,IAAkB;IAChD,OAAO,iBAAS,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"_build_env.js","sourceRoot":"","sources":["../src/_build_env.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AA4CH,0CAEC;AA1CY,QAAA,WAAW,GAAY,SAAS,CAAC;AAE9C,oEAAoE;AACpE,UAAU;AACV,gEAAgE;AAChE,gEAAgE;AAChE,gEAAgE;AAChE,aAAa;AACb,qFAAqF;AACrF,qFAAqF;AACrF,sFAAsF;AACtF,2CAA2C;AAC9B,QAAA,SAAS,GAAqE;IACzF,UAAU,EAAE;QACV,OAAO,EAAE,wBAAwB;QACjC,KAAK,EAAE,0BAA0B;QACjC,GAAG,EAAE,wBAAwB;KAC9B;IACD,OAAO,EAAE;QACP,OAAO,EAAE,gCAAgC;QACzC,KAAK,EAAE,oCAAoC;QAC3C,GAAG,EAAE,gCAAgC;KACtC;IACD,KAAK,EAAE;QACL,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE,uBAAuB;QAC9B,GAAG,EAAE,uBAAuB;KAC7B;CACF,CAAC;AAIF,SAAS,SAAS;IAChB,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtE,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChF,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,mBAAW,CAAC;AACrB,CAAC;AAED,SAAgB,eAAe,CAAC,IAAkB;IAChD,OAAO,iBAAS,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@armoriq/sdk-dev",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "ArmorIQ SDK - Build secure AI agents with cryptographic intent verification.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "bin": {
8
- "armoriq": "dist/cli/index.js"
8
+ "armoriq-dev": "dist/cli/index.js"
9
9
  },
10
10
  "scripts": {
11
11
  "build": "tsc",
@@ -1,84 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,126 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"microsoft_copilot.js","sourceRoot":"","sources":["../../src/integrations/microsoft_copilot.ts"],"names":[],"mappings":"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"}