@edge-protocol/sdk 0.4.4 → 0.4.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.
- package/dist/core/PolicyEngine.d.ts +19 -1
- package/dist/core/PolicyEngine.d.ts.map +1 -1
- package/dist/core/PolicyEngine.js +64 -8
- package/dist/core/PolicyEngine.js.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/utils/types.d.ts +6 -4
- package/dist/utils/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,25 @@
|
|
|
1
|
-
import { EdgePassObject, TransactionRequest, PolicyValidation } from
|
|
1
|
+
import { EdgePassObject, TransactionRequest, PolicyValidation } from '../utils/types';
|
|
2
2
|
export declare class PolicyEngine {
|
|
3
|
+
/**
|
|
4
|
+
* Validates a transaction request against an EdgePass policy.
|
|
5
|
+
*
|
|
6
|
+
* Rules (in order):
|
|
7
|
+
* 1. Pass must be active
|
|
8
|
+
* 2. Pass must not be expired
|
|
9
|
+
* 3. Merchant must be in approved list
|
|
10
|
+
* 4. Amount must not exceed remaining budget
|
|
11
|
+
* 5. Amount must not exceed maxPerTransaction (if set)
|
|
12
|
+
* 6. If amount > escalateThreshold → escalate
|
|
13
|
+
* 7. If amount ≤ autoThreshold → auto-approve
|
|
14
|
+
*/
|
|
3
15
|
static validate(pass: EdgePassObject, request: TransactionRequest): PolicyValidation;
|
|
16
|
+
/**
|
|
17
|
+
* Returns true if the pass is active and not expired.
|
|
18
|
+
*/
|
|
4
19
|
static isValid(pass: EdgePassObject): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Returns the remaining budget in MIST.
|
|
22
|
+
*/
|
|
5
23
|
static remainingBudget(pass: EdgePassObject): bigint;
|
|
6
24
|
}
|
|
7
25
|
//# sourceMappingURL=PolicyEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolicyEngine.d.ts","sourceRoot":"","sources":["../../src/core/PolicyEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEtF,qBAAa,YAAY;IAEvB,MAAM,CAAC,QAAQ,CACb,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,kBAAkB,GAC1B,gBAAgB;
|
|
1
|
+
{"version":3,"file":"PolicyEngine.d.ts","sourceRoot":"","sources":["../../src/core/PolicyEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEtF,qBAAa,YAAY;IAEvB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,QAAQ,CACb,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,kBAAkB,GAC1B,gBAAgB;IAoEnB;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAI7C;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;CAGrD"}
|
|
@@ -1,27 +1,83 @@
|
|
|
1
1
|
export class PolicyEngine {
|
|
2
|
+
/**
|
|
3
|
+
* Validates a transaction request against an EdgePass policy.
|
|
4
|
+
*
|
|
5
|
+
* Rules (in order):
|
|
6
|
+
* 1. Pass must be active
|
|
7
|
+
* 2. Pass must not be expired
|
|
8
|
+
* 3. Merchant must be in approved list
|
|
9
|
+
* 4. Amount must not exceed remaining budget
|
|
10
|
+
* 5. Amount must not exceed maxPerTransaction (if set)
|
|
11
|
+
* 6. If amount > escalateThreshold → escalate
|
|
12
|
+
* 7. If amount ≤ autoThreshold → auto-approve
|
|
13
|
+
*/
|
|
2
14
|
static validate(pass, request) {
|
|
15
|
+
// Rule 1 — pass must be active
|
|
3
16
|
if (!pass.active) {
|
|
4
|
-
return {
|
|
17
|
+
return {
|
|
18
|
+
allowed: false,
|
|
19
|
+
requiresEscalation: false,
|
|
20
|
+
reason: 'EdgePass is inactive',
|
|
21
|
+
};
|
|
5
22
|
}
|
|
23
|
+
// Rule 2 — pass must not be expired
|
|
6
24
|
if (Date.now() > pass.expiresAt) {
|
|
7
|
-
return {
|
|
25
|
+
return {
|
|
26
|
+
allowed: false,
|
|
27
|
+
requiresEscalation: false,
|
|
28
|
+
reason: 'EdgePass has expired',
|
|
29
|
+
};
|
|
8
30
|
}
|
|
9
|
-
|
|
10
|
-
if (!
|
|
11
|
-
return {
|
|
31
|
+
// Rule 3 — merchant must be approved
|
|
32
|
+
if (!pass.config.approvedMerchants.includes(request.merchant)) {
|
|
33
|
+
return {
|
|
34
|
+
allowed: false,
|
|
35
|
+
requiresEscalation: false,
|
|
36
|
+
reason: `Merchant "${request.merchant}" is not approved`,
|
|
37
|
+
};
|
|
12
38
|
}
|
|
39
|
+
// Rule 4 — must not exceed remaining budget
|
|
13
40
|
const remaining = pass.config.budget - pass.spent;
|
|
14
41
|
if (request.amount > remaining) {
|
|
15
|
-
return {
|
|
42
|
+
return {
|
|
43
|
+
allowed: false,
|
|
44
|
+
requiresEscalation: false,
|
|
45
|
+
reason: `Insufficient budget. Remaining: ${remaining} MIST`,
|
|
46
|
+
};
|
|
16
47
|
}
|
|
48
|
+
// Rule 5 — must not exceed per-transaction limit (if set)
|
|
49
|
+
if (pass.config.maxPerTransaction !== undefined &&
|
|
50
|
+
request.amount > pass.config.maxPerTransaction) {
|
|
51
|
+
return {
|
|
52
|
+
allowed: false,
|
|
53
|
+
requiresEscalation: false,
|
|
54
|
+
reason: `Amount exceeds per-transaction limit of ${pass.config.maxPerTransaction} MIST`,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// Rule 6 — escalate if above escalation threshold
|
|
17
58
|
if (request.amount > pass.config.escalateThreshold) {
|
|
18
|
-
return {
|
|
59
|
+
return {
|
|
60
|
+
allowed: true,
|
|
61
|
+
requiresEscalation: true,
|
|
62
|
+
reason: `Amount exceeds escalation threshold of ${pass.config.escalateThreshold} MIST`,
|
|
63
|
+
};
|
|
19
64
|
}
|
|
20
|
-
|
|
65
|
+
// Rule 7 — auto-approve
|
|
66
|
+
return {
|
|
67
|
+
allowed: true,
|
|
68
|
+
requiresEscalation: false,
|
|
69
|
+
reason: 'Auto-approved',
|
|
70
|
+
};
|
|
21
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Returns true if the pass is active and not expired.
|
|
74
|
+
*/
|
|
22
75
|
static isValid(pass) {
|
|
23
76
|
return pass.active && Date.now() <= pass.expiresAt;
|
|
24
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Returns the remaining budget in MIST.
|
|
80
|
+
*/
|
|
25
81
|
static remainingBudget(pass) {
|
|
26
82
|
return pass.config.budget - pass.spent;
|
|
27
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolicyEngine.js","sourceRoot":"","sources":["../../src/core/PolicyEngine.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,YAAY;IAEvB,MAAM,CAAC,QAAQ,CACb,IAAoB,EACpB,OAA2B;QAG3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,
|
|
1
|
+
{"version":3,"file":"PolicyEngine.js","sourceRoot":"","sources":["../../src/core/PolicyEngine.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,YAAY;IAEvB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,QAAQ,CACb,IAAoB,EACpB,OAA2B;QAG3B,+BAA+B;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,kBAAkB,EAAE,KAAK;gBACzB,MAAM,EAAE,sBAAsB;aAC/B,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,kBAAkB,EAAE,KAAK;gBACzB,MAAM,EAAE,sBAAsB;aAC/B,CAAC;QACJ,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,kBAAkB,EAAE,KAAK;gBACzB,MAAM,EAAE,aAAa,OAAO,CAAC,QAAQ,mBAAmB;aACzD,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,kBAAkB,EAAE,KAAK;gBACzB,MAAM,EAAE,mCAAmC,SAAS,OAAO;aAC5D,CAAC;QACJ,CAAC;QAED,0DAA0D;QAC1D,IACE,IAAI,CAAC,MAAM,CAAC,iBAAiB,KAAK,SAAS;YAC3C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAC9C,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,kBAAkB,EAAE,KAAK;gBACzB,MAAM,EAAE,2CAA2C,IAAI,CAAC,MAAM,CAAC,iBAAiB,OAAO;aACxF,CAAC;QACJ,CAAC;QAED,kDAAkD;QAClD,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACnD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,kBAAkB,EAAE,IAAI;gBACxB,MAAM,EAAE,0CAA0C,IAAI,CAAC,MAAM,CAAC,iBAAiB,OAAO;aACvF,CAAC;QACJ,CAAC;QAED,wBAAwB;QACxB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,kBAAkB,EAAE,KAAK;YACzB,MAAM,EAAE,eAAe;SACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,IAAoB;QACjC,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAoB;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;IACzC,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { EdgePass } from
|
|
2
|
-
export { PolicyEngine } from
|
|
3
|
-
export { ExecutionEngine } from
|
|
4
|
-
export type { EdgePassConfig, EdgePassObject, TransactionRequest, TransactionOutcome, PolicyValidation, Network, EdgeSDKConfig, } from
|
|
5
|
-
export { MIST_PER_SUI, NETWORK_URLS, EDGE_PACKAGE_ID } from
|
|
1
|
+
export { EdgePass } from './core/EdgePass';
|
|
2
|
+
export { PolicyEngine } from './core/PolicyEngine';
|
|
3
|
+
export { ExecutionEngine } from './core/ExecutionEngine';
|
|
4
|
+
export type { EdgePassConfig, EdgePassObject, TransactionRequest, TransactionOutcome, PolicyValidation, Network, EdgeSDKConfig, } from './utils/types';
|
|
5
|
+
export { MIST_PER_SUI, NETWORK_URLS, EDGE_PACKAGE_ID, EDGE_TEMPLATES, DEFAULT_GAS_BUDGET, } from './utils/constants';
|
|
6
|
+
export type { EdgePassTemplate } from './utils/constants';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,OAAO,EACP,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,OAAO,EACP,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { EdgePass } from
|
|
2
|
-
export { PolicyEngine } from
|
|
3
|
-
export { ExecutionEngine } from
|
|
4
|
-
export { MIST_PER_SUI, NETWORK_URLS, EDGE_PACKAGE_ID } from
|
|
1
|
+
export { EdgePass } from './core/EdgePass';
|
|
2
|
+
export { PolicyEngine } from './core/PolicyEngine';
|
|
3
|
+
export { ExecutionEngine } from './core/ExecutionEngine';
|
|
4
|
+
export { MIST_PER_SUI, NETWORK_URLS, EDGE_PACKAGE_ID, EDGE_TEMPLATES, DEFAULT_GAS_BUDGET, } from './utils/constants';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAUzD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAUzD,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,mBAAmB,CAAC"}
|
package/dist/utils/types.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export interface EdgePassConfig {
|
|
|
2
2
|
budget: bigint;
|
|
3
3
|
autoThreshold: bigint;
|
|
4
4
|
escalateThreshold: bigint;
|
|
5
|
+
maxPerTransaction?: bigint;
|
|
5
6
|
approvedMerchants: string[];
|
|
6
7
|
expiryMs: number;
|
|
7
8
|
owner: string;
|
|
@@ -20,15 +21,16 @@ export interface TransactionRequest {
|
|
|
20
21
|
metadata?: Record<string, string>;
|
|
21
22
|
}
|
|
22
23
|
export type TransactionOutcome = {
|
|
23
|
-
status:
|
|
24
|
+
status: 'approved';
|
|
24
25
|
digest: string;
|
|
26
|
+
objectId?: string;
|
|
25
27
|
auto: true;
|
|
26
28
|
} | {
|
|
27
|
-
status:
|
|
29
|
+
status: 'escalated';
|
|
28
30
|
reason: string;
|
|
29
31
|
auto: false;
|
|
30
32
|
} | {
|
|
31
|
-
status:
|
|
33
|
+
status: 'blocked';
|
|
32
34
|
reason: string;
|
|
33
35
|
auto: false;
|
|
34
36
|
};
|
|
@@ -37,7 +39,7 @@ export interface PolicyValidation {
|
|
|
37
39
|
requiresEscalation: boolean;
|
|
38
40
|
reason: string;
|
|
39
41
|
}
|
|
40
|
-
export type Network =
|
|
42
|
+
export type Network = 'mainnet' | 'testnet' | 'devnet';
|
|
41
43
|
export interface EdgeSDKConfig {
|
|
42
44
|
network: Network;
|
|
43
45
|
enokiApiKey: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GACrE;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
|
package/package.json
CHANGED