@edge-protocol/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,31 @@
1
+ import { Transaction } from "@mysten/sui/transactions";
2
+ import { EdgePassConfig, EdgePassObject, TransactionRequest, TransactionOutcome, EdgeSDKConfig } from "../utils/types";
3
+ export declare class EdgePass {
4
+ private client;
5
+ private engine;
6
+ private config;
7
+ constructor(config: EdgeSDKConfig);
8
+ create(passConfig: EdgePassConfig, signer: {
9
+ signAndExecute: (tx: Transaction) => Promise<{
10
+ digest: string;
11
+ objectId?: string;
12
+ }>;
13
+ }): Promise<EdgePassObject>;
14
+ execute(pass: EdgePassObject, request: TransactionRequest, signer: {
15
+ signAndExecute: (tx: Transaction) => Promise<{
16
+ digest: string;
17
+ }>;
18
+ }): Promise<TransactionOutcome>;
19
+ validate(pass: EdgePassObject, request: TransactionRequest): import("..").PolicyValidation;
20
+ fetch(objectId: string): Promise<EdgePassObject | null>;
21
+ revoke(pass: EdgePassObject, signer: {
22
+ signAndExecute: (tx: Transaction) => Promise<{
23
+ digest: string;
24
+ }>;
25
+ }): Promise<{
26
+ digest: string;
27
+ }>;
28
+ remainingBudget(pass: EdgePassObject): bigint;
29
+ isValid(pass: EdgePassObject): boolean;
30
+ }
31
+ //# sourceMappingURL=EdgePass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EdgePass.d.ts","sourceRoot":"","sources":["../../src/core/EdgePass.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EACL,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACd,MAAM,gBAAgB,CAAC;AAKxB,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAM3B,MAAM,CACV,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE;QAAE,cAAc,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,GAC9F,OAAO,CAAC,cAAc,CAAC;IAmDpB,OAAO,CACX,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE;QAAE,cAAc,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,GAC3E,OAAO,CAAC,kBAAkB,CAAC;IAI9B,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,kBAAkB;IAIpD,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAIvD,MAAM,CACV,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE;QAAE,cAAc,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,GAC3E,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAc9B,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAI7C,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;CAGvC"}
@@ -0,0 +1,82 @@
1
+ import { SuiClient } from "@mysten/sui/client";
2
+ import { Transaction } from "@mysten/sui/transactions";
3
+ import { PolicyEngine } from "./PolicyEngine";
4
+ import { ExecutionEngine } from "./ExecutionEngine";
5
+ import { NETWORK_URLS, EDGE_PACKAGE_ID, DEFAULT_GAS_BUDGET } from "../utils/constants";
6
+ export class EdgePass {
7
+ constructor(config) {
8
+ this.config = config;
9
+ this.client = new SuiClient({ url: NETWORK_URLS[config.network] });
10
+ this.engine = new ExecutionEngine(config.network);
11
+ }
12
+ async create(passConfig, signer) {
13
+ const tx = new Transaction();
14
+ tx.setGasBudget(DEFAULT_GAS_BUDGET);
15
+ const packageId = EDGE_PACKAGE_ID[this.config.network];
16
+ tx.moveCall({
17
+ target: `${packageId}::edge_pass::create_pass`,
18
+ arguments: [
19
+ tx.pure.u64(passConfig.budget),
20
+ tx.pure.u64(passConfig.autoThreshold),
21
+ tx.pure.u64(passConfig.escalateThreshold),
22
+ tx.pure.u64(passConfig.expiryMs),
23
+ tx.pure.vector("string", passConfig.approvedMerchants),
24
+ tx.object('0x6'), // Sui shared Clock object
25
+ ],
26
+ });
27
+ const result = await signer.signAndExecute(tx);
28
+ await new Promise(r => setTimeout(r, 2000));
29
+ // Fetch the created object ID from the transaction effects
30
+ let objectId = result.objectId || "";
31
+ if (!objectId && result.digest) {
32
+ try {
33
+ const txResult = await this.client.getTransactionBlock({
34
+ digest: result.digest,
35
+ options: { showObjectChanges: true },
36
+ });
37
+ const created = txResult.objectChanges?.find((c) => c.type === "created" && c.objectType?.includes("edge_pass::EdgePass"));
38
+ if (created && created.type === "created") {
39
+ objectId = created.objectId;
40
+ }
41
+ }
42
+ catch (e) {
43
+ console.error("Could not fetch object ID from tx:", e);
44
+ }
45
+ }
46
+ const now = Date.now();
47
+ return {
48
+ id: objectId,
49
+ config: passConfig,
50
+ spent: BigInt(0),
51
+ active: true,
52
+ createdAt: now,
53
+ expiresAt: now + passConfig.expiryMs,
54
+ };
55
+ }
56
+ async execute(pass, request, signer) {
57
+ return this.engine.execute(pass, request, signer);
58
+ }
59
+ validate(pass, request) {
60
+ return PolicyEngine.validate(pass, request);
61
+ }
62
+ async fetch(objectId) {
63
+ return this.engine.fetchPass(objectId);
64
+ }
65
+ async revoke(pass, signer) {
66
+ const tx = new Transaction();
67
+ tx.setGasBudget(DEFAULT_GAS_BUDGET);
68
+ const packageId = EDGE_PACKAGE_ID[this.config.network];
69
+ tx.moveCall({
70
+ target: `${packageId}::edge_pass::revoke_pass`,
71
+ arguments: [tx.object(pass.id)],
72
+ });
73
+ return signer.signAndExecute(tx);
74
+ }
75
+ remainingBudget(pass) {
76
+ return PolicyEngine.remainingBudget(pass);
77
+ }
78
+ isValid(pass) {
79
+ return PolicyEngine.isValid(pass);
80
+ }
81
+ }
82
+ //# sourceMappingURL=EdgePass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EdgePass.js","sourceRoot":"","sources":["../../src/core/EdgePass.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Transaction } from "@mysten/sui/transactions";
2
+ import { EdgePassObject, TransactionRequest, TransactionOutcome, Network } from "../utils/types";
3
+ export declare class ExecutionEngine {
4
+ private client;
5
+ private network;
6
+ constructor(network: Network);
7
+ execute(pass: EdgePassObject, request: TransactionRequest, signer: {
8
+ signAndExecute: (tx: Transaction) => Promise<{
9
+ digest: string;
10
+ }>;
11
+ }): Promise<TransactionOutcome>;
12
+ private buildPTB;
13
+ fetchPass(objectId: string): Promise<EdgePassObject | null>;
14
+ }
15
+ //# sourceMappingURL=ExecutionEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionEngine.d.ts","sourceRoot":"","sources":["../../src/core/ExecutionEngine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,EACR,MAAM,gBAAgB,CAAC;AAIxB,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,EAAE,OAAO;IAKtB,OAAO,CACX,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE;QAAE,cAAc,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,GAC3E,OAAO,CAAC,kBAAkB,CAAC;IAqB9B,OAAO,CAAC,QAAQ;IAqBV,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAgClE"}
@@ -0,0 +1,77 @@
1
+ import { SuiClient } from "@mysten/sui/client";
2
+ import { Transaction } from "@mysten/sui/transactions";
3
+ import { PolicyEngine } from "./PolicyEngine";
4
+ import { NETWORK_URLS, EDGE_PACKAGE_ID, DEFAULT_GAS_BUDGET } from "../utils/constants";
5
+ export class ExecutionEngine {
6
+ constructor(network) {
7
+ this.network = network;
8
+ this.client = new SuiClient({ url: NETWORK_URLS[network] });
9
+ }
10
+ async execute(pass, request, signer) {
11
+ const validation = PolicyEngine.validate(pass, request);
12
+ if (!validation.allowed) {
13
+ return { status: "blocked", reason: validation.reason, auto: false };
14
+ }
15
+ if (validation.requiresEscalation) {
16
+ return { status: "escalated", reason: validation.reason, auto: false };
17
+ }
18
+ try {
19
+ const tx = this.buildPTB(pass, request);
20
+ const result = await signer.signAndExecute(tx);
21
+ return { status: "approved", digest: result.digest, auto: true };
22
+ }
23
+ catch (error) {
24
+ return {
25
+ status: "blocked",
26
+ reason: `Execution failed: ${error instanceof Error ? error.message : "unknown error"}`,
27
+ auto: false,
28
+ };
29
+ }
30
+ }
31
+ buildPTB(pass, request) {
32
+ const tx = new Transaction();
33
+ tx.setGasBudget(DEFAULT_GAS_BUDGET);
34
+ const packageId = EDGE_PACKAGE_ID[this.network];
35
+ tx.moveCall({
36
+ target: `${packageId}::edge_pass::execute_transaction`,
37
+ arguments: [
38
+ tx.object(pass.id),
39
+ tx.pure.u64(request.amount),
40
+ tx.pure.string(request.merchant),
41
+ tx.object('0x6'), // Sui shared Clock object
42
+ ],
43
+ });
44
+ return tx;
45
+ }
46
+ async fetchPass(objectId) {
47
+ try {
48
+ const obj = await this.client.getObject({
49
+ id: objectId,
50
+ options: { showContent: true },
51
+ });
52
+ if (!obj.data?.content || obj.data.content.dataType !== "moveObject") {
53
+ return null;
54
+ }
55
+ const fields = obj.data.content.fields;
56
+ return {
57
+ id: objectId,
58
+ config: {
59
+ budget: BigInt(fields.budget),
60
+ autoThreshold: BigInt(fields.auto_threshold),
61
+ escalateThreshold: BigInt(fields.escalate_threshold),
62
+ approvedMerchants: fields.approved_merchants,
63
+ expiryMs: Number(fields.expiry_ms),
64
+ owner: fields.owner,
65
+ },
66
+ spent: BigInt(fields.spent),
67
+ active: fields.active,
68
+ createdAt: Number(fields.created_at),
69
+ expiresAt: Number(fields.expires_at),
70
+ };
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ }
77
+ //# sourceMappingURL=ExecutionEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutionEngine.js","sourceRoot":"","sources":["../../src/core/ExecutionEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { EdgePassObject, TransactionRequest, PolicyValidation } from "../utils/types";
2
+ export declare class PolicyEngine {
3
+ static validate(pass: EdgePassObject, request: TransactionRequest): PolicyValidation;
4
+ static isValid(pass: EdgePassObject): boolean;
5
+ static remainingBudget(pass: EdgePassObject): bigint;
6
+ }
7
+ //# sourceMappingURL=PolicyEngine.d.ts.map
@@ -0,0 +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;IA2BnB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO;IAI7C,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;CAGrD"}
@@ -0,0 +1,29 @@
1
+ export class PolicyEngine {
2
+ static validate(pass, request) {
3
+ if (!pass.active) {
4
+ return { allowed: false, requiresEscalation: false, reason: "EdgePass is inactive" };
5
+ }
6
+ if (Date.now() > pass.expiresAt) {
7
+ return { allowed: false, requiresEscalation: false, reason: "EdgePass has expired" };
8
+ }
9
+ const merchantApproved = pass.config.approvedMerchants.includes(request.merchant);
10
+ if (!merchantApproved) {
11
+ return { allowed: false, requiresEscalation: false, reason: `Merchant "${request.merchant}" is not approved` };
12
+ }
13
+ const remaining = pass.config.budget - pass.spent;
14
+ if (request.amount > remaining) {
15
+ return { allowed: false, requiresEscalation: false, reason: `Insufficient budget. Remaining: ${remaining} MIST` };
16
+ }
17
+ if (request.amount > pass.config.escalateThreshold) {
18
+ return { allowed: true, requiresEscalation: true, reason: `Amount exceeds escalation threshold of ${pass.config.escalateThreshold} MIST` };
19
+ }
20
+ return { allowed: true, requiresEscalation: false, reason: "Auto-approved" };
21
+ }
22
+ static isValid(pass) {
23
+ return pass.active && Date.now() <= pass.expiresAt;
24
+ }
25
+ static remainingBudget(pass) {
26
+ return pass.config.budget - pass.spent;
27
+ }
28
+ }
29
+ //# sourceMappingURL=PolicyEngine.js.map
@@ -0,0 +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,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;QACvF,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;QACvF,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClF,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,OAAO,CAAC,QAAQ,mBAAmB,EAAE,CAAC;QACjH,CAAC;QAED,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,EAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,SAAS,OAAO,EAAE,CAAC;QACpH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,0CAA0C,IAAI,CAAC,MAAM,CAAC,iBAAiB,OAAO,EAAE,CAAC;QAC7I,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAC/E,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,IAAoB;QACjC,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,IAAoB;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,6 @@
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 } from "./utils/constants";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
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 } from "./utils/constants";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/move/client.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/move/client.ts"],"names":[],"mappings":""}
package/dist/test.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":""}
package/dist/test.js ADDED
@@ -0,0 +1,86 @@
1
+ import { PolicyEngine } from "./core/PolicyEngine";
2
+ import { MIST_PER_SUI } from "./utils/constants";
3
+ // Mock EdgePass for testing
4
+ const mockPass = {
5
+ id: "0x123",
6
+ config: {
7
+ budget: BigInt(300) * MIST_PER_SUI,
8
+ autoThreshold: BigInt(50) * MIST_PER_SUI,
9
+ escalateThreshold: BigInt(100) * MIST_PER_SUI,
10
+ approvedMerchants: ["Shuttle Express", "Hydra Bar", "Stage Access VIP"],
11
+ expiryMs: 48 * 60 * 60 * 1000,
12
+ owner: "0xabc",
13
+ },
14
+ spent: BigInt(0),
15
+ active: true,
16
+ createdAt: Date.now(),
17
+ expiresAt: Date.now() + 48 * 60 * 60 * 1000,
18
+ };
19
+ function test(name, fn) {
20
+ try {
21
+ fn();
22
+ console.log(`✓ ${name}`);
23
+ }
24
+ catch (e) {
25
+ console.error(`✗ ${name}: ${e}`);
26
+ }
27
+ }
28
+ function assert(condition, message) {
29
+ if (!condition)
30
+ throw new Error(message);
31
+ }
32
+ // Test 1 — auto approve under threshold
33
+ test("auto-approves under $50", () => {
34
+ const result = PolicyEngine.validate(mockPass, {
35
+ merchant: "Shuttle Express",
36
+ amount: BigInt(18) * MIST_PER_SUI,
37
+ });
38
+ assert(result.allowed, "should be allowed");
39
+ assert(!result.requiresEscalation, "should not escalate");
40
+ });
41
+ // Test 2 — escalate above threshold
42
+ test("escalates above $100", () => {
43
+ const result = PolicyEngine.validate(mockPass, {
44
+ merchant: "Shuttle Express",
45
+ amount: BigInt(149) * MIST_PER_SUI,
46
+ });
47
+ assert(result.allowed, "should be allowed");
48
+ assert(result.requiresEscalation, "should escalate");
49
+ });
50
+ // Test 3 — block unlisted merchant
51
+ test("blocks unlisted merchant", () => {
52
+ const result = PolicyEngine.validate(mockPass, {
53
+ merchant: "ShadyTokens.xyz",
54
+ amount: BigInt(1) * MIST_PER_SUI,
55
+ });
56
+ assert(!result.allowed, "should be blocked");
57
+ });
58
+ // Test 4 — block when budget exceeded
59
+ test("blocks when budget exceeded", () => {
60
+ const overSpentPass = { ...mockPass, spent: BigInt(299) * MIST_PER_SUI };
61
+ const result = PolicyEngine.validate(overSpentPass, {
62
+ merchant: "Shuttle Express",
63
+ amount: BigInt(50) * MIST_PER_SUI,
64
+ });
65
+ assert(!result.allowed, "should be blocked");
66
+ });
67
+ // Test 5 — block when expired
68
+ test("blocks when expired", () => {
69
+ const expiredPass = { ...mockPass, expiresAt: Date.now() - 1000 };
70
+ const result = PolicyEngine.validate(expiredPass, {
71
+ merchant: "Shuttle Express",
72
+ amount: BigInt(18) * MIST_PER_SUI,
73
+ });
74
+ assert(!result.allowed, "should be blocked");
75
+ });
76
+ // Test 6 — block when inactive
77
+ test("blocks when inactive", () => {
78
+ const inactivePass = { ...mockPass, active: false };
79
+ const result = PolicyEngine.validate(inactivePass, {
80
+ merchant: "Shuttle Express",
81
+ amount: BigInt(18) * MIST_PER_SUI,
82
+ });
83
+ assert(!result.allowed, "should be blocked");
84
+ });
85
+ console.log("\nAll tests complete.");
86
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare const MIST_PER_SUI: bigint;
2
+ export declare const NETWORK_URLS: Record<string, string>;
3
+ export declare const EDGE_PACKAGE_ID: Record<string, string>;
4
+ export declare const DEFAULT_GAS_BUDGET: bigint;
5
+ export declare const FESTIVAL_MERCHANTS: string[];
6
+ export declare const FESTIVAL_CONFIG: {
7
+ budget: bigint;
8
+ autoThreshold: bigint;
9
+ escalateThreshold: bigint;
10
+ expiryMs: number;
11
+ };
12
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,QAAwB,CAAC;AAElD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI/C,CAAC;AAGF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIlD,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAqB,CAAC;AAGrD,eAAO,MAAM,kBAAkB,UAM9B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;CAK3B,CAAC"}
@@ -0,0 +1,28 @@
1
+ export const MIST_PER_SUI = BigInt(1000000000);
2
+ export const NETWORK_URLS = {
3
+ mainnet: "https://fullnode.mainnet.sui.io",
4
+ testnet: "https://fullnode.testnet.sui.io",
5
+ devnet: "https://fullnode.devnet.sui.io",
6
+ };
7
+ // Fill these in after deploying the Move contract
8
+ export const EDGE_PACKAGE_ID = {
9
+ mainnet: "",
10
+ testnet: "0x9f4065009494aa5acd92a5c72a6c22ce80939b2bddae3b34345459bc98d2501d",
11
+ devnet: "",
12
+ };
13
+ export const DEFAULT_GAS_BUDGET = BigInt(10000000);
14
+ // Festival Mode demo constants
15
+ export const FESTIVAL_MERCHANTS = [
16
+ "Shuttle Express",
17
+ "Festival Kitchen",
18
+ "Hydra Bar",
19
+ "Stage Access VIP",
20
+ "Official Merch",
21
+ ];
22
+ export const FESTIVAL_CONFIG = {
23
+ budget: BigInt(300) * MIST_PER_SUI,
24
+ autoThreshold: BigInt(50) * MIST_PER_SUI,
25
+ escalateThreshold: BigInt(100) * MIST_PER_SUI,
26
+ expiryMs: 48 * 60 * 60 * 1000,
27
+ };
28
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,UAAa,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,OAAO,EAAE,iCAAiC;IAC1C,OAAO,EAAE,iCAAiC;IAC1C,MAAM,EAAE,gCAAgC;CACzC,CAAC;AAEF,kDAAkD;AAClD,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,oEAAoE;IAC7E,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAU,CAAC,CAAC;AAErD,+BAA+B;AAC/B,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,iBAAiB;IACjB,kBAAkB;IAClB,WAAW;IACX,kBAAkB;IAClB,gBAAgB;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY;IAClC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,YAAY;IACxC,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY;IAC7C,QAAQ,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;CAC9B,CAAC"}
@@ -0,0 +1,46 @@
1
+ export interface EdgePassConfig {
2
+ budget: bigint;
3
+ autoThreshold: bigint;
4
+ escalateThreshold: bigint;
5
+ approvedMerchants: string[];
6
+ expiryMs: number;
7
+ owner: string;
8
+ }
9
+ export interface EdgePassObject {
10
+ id: string;
11
+ config: EdgePassConfig;
12
+ spent: bigint;
13
+ active: boolean;
14
+ createdAt: number;
15
+ expiresAt: number;
16
+ }
17
+ export interface TransactionRequest {
18
+ merchant: string;
19
+ amount: bigint;
20
+ metadata?: Record<string, string>;
21
+ }
22
+ export type TransactionOutcome = {
23
+ status: "approved";
24
+ digest: string;
25
+ auto: true;
26
+ } | {
27
+ status: "escalated";
28
+ reason: string;
29
+ auto: false;
30
+ } | {
31
+ status: "blocked";
32
+ reason: string;
33
+ auto: false;
34
+ };
35
+ export interface PolicyValidation {
36
+ allowed: boolean;
37
+ requiresEscalation: boolean;
38
+ reason: string;
39
+ }
40
+ export type Network = "mainnet" | "testnet" | "devnet";
41
+ export interface EdgeSDKConfig {
42
+ network: Network;
43
+ enokiApiKey: string;
44
+ googleClientId?: string;
45
+ }
46
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +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,GAClD;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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@edge-protocol/sdk",
3
+ "version": "0.1.0",
4
+ "description": "Trust delegation primitive for autonomous onchain systems on Sui",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": ["dist"],
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "dev": "tsc --watch",
11
+ "test": "ts-node --compiler-options '{\"module\":\"CommonJS\"}' src/test.ts",
12
+ "prepublishOnly": "pnpm build"
13
+ },
14
+ "keywords": ["sui", "zklogin", "autonomous", "trust", "delegation", "agent", "web3", "move"],
15
+ "author": "fluturecode",
16
+ "license": "MIT",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/fluturecode/edge"
20
+ },
21
+ "homepage": "https://github.com/fluturecode/edge#readme",
22
+ "dependencies": {
23
+ "@mysten/sui": "^1.30.0",
24
+ "@mysten/zklogin": "^0.8.1"
25
+ },
26
+ "devDependencies": {
27
+ "ts-node": "^10.9.2",
28
+ "typescript": "^5.9.3"
29
+ }
30
+ }