@intent-engine/core 0.1.21 → 0.1.23
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/src/events.d.ts +3 -0
- package/dist/src/events.js +3 -0
- package/dist/src/events.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/manifest.d.ts +5 -0
- package/dist/src/manifest.js +43 -0
- package/dist/src/manifest.js.map +1 -0
- package/dist/src/memo.d.ts +23 -0
- package/dist/src/memo.js +86 -0
- package/dist/src/memo.js.map +1 -0
- package/dist/src/mints.d.ts +1 -0
- package/dist/src/mints.js +3 -0
- package/dist/src/mints.js.map +1 -1
- package/package.json +1 -1
package/dist/src/events.d.ts
CHANGED
|
@@ -42,4 +42,7 @@ export type DecodedEvent = {
|
|
|
42
42
|
fields: object;
|
|
43
43
|
};
|
|
44
44
|
export declare function decodeEvent(data: Uint8Array): DecodedEvent | null;
|
|
45
|
+
export declare function eventNamed<E extends EngineEvent, N extends E["name"]>(events: readonly E[], name: N): Extract<E, {
|
|
46
|
+
name: N;
|
|
47
|
+
}> | undefined;
|
|
45
48
|
export {};
|
package/dist/src/events.js
CHANGED
package/dist/src/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAI7F,MAAM,OAAO,GAAG;IACd,aAAa,EAAE,uBAAuB;IACtC,SAAS,EAAE,mBAAmB;IAC9B,aAAa,EAAE,uBAAuB;IACtC,iBAAiB,EAAE,2BAA2B;IAC9C,aAAa,EAAE,uBAAuB;IACtC,gBAAgB,EAAE,0BAA0B;IAC5C,aAAa,EAAE,uBAAuB;IACtC,WAAW,EAAE,qBAAqB;IAClC,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,mBAAmB;IAC9B,cAAc,EAAE,wBAAwB;IACxC,eAAe,EAAE,yBAAyB;IAC1C,YAAY,EAAE,sBAAsB;IACpC,aAAa,EAAE,uBAAuB;IACtC,aAAa,EAAE,uBAAuB;IACtC,YAAY,EAAE,sBAAsB;IACpC,WAAW,EAAE,qBAAqB;IAClC,aAAa,EAAE,uBAAuB;IACtC,cAAc,EAAE,wBAAwB;IACxC,WAAW,EAAE,qBAAqB;IAClC,aAAa,EAAE,uBAAuB;IACtC,YAAY,EAAE,sBAAsB;IACpC,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,qBAAqB;IAClC,eAAe,EAAE,yBAAyB;CACe,CAAC;AAM5D,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;IAC7B,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,eAAe;IACf,kBAAkB;IAClB,eAAe;IACf,gBAAgB;IAChB,cAAc;IACd,aAAa;CACd,CAAC,CAAC;AAIH,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,IAAe,CAAC;IACpB,IAAI,CAAC;QACH,IAAI,GAAG,iBAAiB,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -10,7 +10,9 @@ export * from "./ext.js";
|
|
|
10
10
|
export * from "./fee.js";
|
|
11
11
|
export * from "./kinds.js";
|
|
12
12
|
export * from "./mandate.js";
|
|
13
|
+
export * from "./manifest.js";
|
|
13
14
|
export * from "./math.js";
|
|
15
|
+
export * from "./memo.js";
|
|
14
16
|
export * from "./mints.js";
|
|
15
17
|
export * from "./pdas.js";
|
|
16
18
|
export * from "./sig.js";
|
package/dist/src/index.js
CHANGED
|
@@ -10,7 +10,9 @@ export * from "./ext.js";
|
|
|
10
10
|
export * from "./fee.js";
|
|
11
11
|
export * from "./kinds.js";
|
|
12
12
|
export * from "./mandate.js";
|
|
13
|
+
export * from "./manifest.js";
|
|
13
14
|
export * from "./math.js";
|
|
15
|
+
export * from "./memo.js";
|
|
14
16
|
export * from "./mints.js";
|
|
15
17
|
export * from "./pdas.js";
|
|
16
18
|
export * from "./sig.js";
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const LENGTH_BYTES = 8;
|
|
2
|
+
function compareBytes(a, b) {
|
|
3
|
+
const shared = Math.min(a.length, b.length);
|
|
4
|
+
for (let i = 0; i < shared; i++) {
|
|
5
|
+
const delta = (a[i] ?? 0) - (b[i] ?? 0);
|
|
6
|
+
if (delta !== 0) {
|
|
7
|
+
return delta;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return a.length - b.length;
|
|
11
|
+
}
|
|
12
|
+
function lengthOf(size) {
|
|
13
|
+
const out = new Uint8Array(LENGTH_BYTES);
|
|
14
|
+
new DataView(out.buffer).setBigUint64(0, BigInt(size), true);
|
|
15
|
+
return out;
|
|
16
|
+
}
|
|
17
|
+
export async function manifestSha256(entries) {
|
|
18
|
+
const encoder = new TextEncoder();
|
|
19
|
+
const named = entries.map((entry) => {
|
|
20
|
+
if (entry.path === "") {
|
|
21
|
+
throw new RangeError("a manifest entry needs a non-empty path");
|
|
22
|
+
}
|
|
23
|
+
return { name: encoder.encode(entry.path), bytes: entry.bytes };
|
|
24
|
+
});
|
|
25
|
+
named.sort((a, b) => compareBytes(a.name, b.name));
|
|
26
|
+
const parts = [];
|
|
27
|
+
for (const [i, entry] of named.entries()) {
|
|
28
|
+
const previous = named[i - 1];
|
|
29
|
+
if (previous !== undefined && compareBytes(previous.name, entry.name) === 0) {
|
|
30
|
+
throw new RangeError(`the manifest names ${new TextDecoder().decode(entry.name)} more than once`);
|
|
31
|
+
}
|
|
32
|
+
parts.push(lengthOf(entry.name.length), entry.name, lengthOf(entry.bytes.length), entry.bytes);
|
|
33
|
+
}
|
|
34
|
+
const whole = new Uint8Array(parts.reduce((size, part) => size + part.length, 0));
|
|
35
|
+
let at = 0;
|
|
36
|
+
for (const part of parts) {
|
|
37
|
+
whole.set(part, at);
|
|
38
|
+
at += part.length;
|
|
39
|
+
}
|
|
40
|
+
const digest = new Uint8Array(await crypto.subtle.digest("SHA-256", whole));
|
|
41
|
+
return Array.from(digest, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type Address } from "@solana/kit";
|
|
2
|
+
export declare const SPEC_MEMO_PREFIX = "solive-spec:";
|
|
3
|
+
export declare const DELIVERY_MEMO_PREFIX = "solive-delivery:";
|
|
4
|
+
export declare const RELEASE_MEMO_PREFIX = "delivery sha256:";
|
|
5
|
+
export declare const MAX_MEMO_URL = 200;
|
|
6
|
+
export declare const MAX_DELIVERY_MEMO: number;
|
|
7
|
+
export type SpecMemo = {
|
|
8
|
+
url: string;
|
|
9
|
+
};
|
|
10
|
+
export type DeliveryMemo = {
|
|
11
|
+
intent: Address;
|
|
12
|
+
sha256: string;
|
|
13
|
+
url: string;
|
|
14
|
+
};
|
|
15
|
+
export declare const MEMO_URL_RULE = "an https url of at most 200 printable characters without spaces, or http on localhost";
|
|
16
|
+
export declare function isMemoUrl(url: string): boolean;
|
|
17
|
+
export declare function isSha256Hex(text: string): boolean;
|
|
18
|
+
export declare function specMemo(url: string): string;
|
|
19
|
+
export declare function parseSpecMemo(text: string): SpecMemo | null;
|
|
20
|
+
export declare function deliveryMemo({ intent, sha256, url }: DeliveryMemo): string;
|
|
21
|
+
export declare function parseDeliveryMemo(text: string): DeliveryMemo | null;
|
|
22
|
+
export declare function releaseMemo(sha256: string): string;
|
|
23
|
+
export declare function parseReleaseMemo(text: string): string | null;
|
package/dist/src/memo.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { isAddress } from "@solana/kit";
|
|
2
|
+
import { PRODUCT_SLUG } from "../generated/identity.js";
|
|
3
|
+
export const SPEC_MEMO_PREFIX = `${PRODUCT_SLUG}-spec:`;
|
|
4
|
+
export const DELIVERY_MEMO_PREFIX = `${PRODUCT_SLUG}-delivery:`;
|
|
5
|
+
export const RELEASE_MEMO_PREFIX = "delivery sha256:";
|
|
6
|
+
export const MAX_MEMO_URL = 200;
|
|
7
|
+
export const MAX_DELIVERY_MEMO = DELIVERY_MEMO_PREFIX.length + 44 + 1 + 64 + 1 + MAX_MEMO_URL;
|
|
8
|
+
export const MEMO_URL_RULE = `an https url of at most ${MAX_MEMO_URL} printable characters without spaces, or http on localhost`;
|
|
9
|
+
const PRINTABLE = /^[!-~]+$/;
|
|
10
|
+
const SHA256 = /^[0-9a-f]{64}$/;
|
|
11
|
+
const LOCAL_HOSTS = new Set(["localhost", "127.0.0.1", "[::1]"]);
|
|
12
|
+
export function isMemoUrl(url) {
|
|
13
|
+
if (url.length > MAX_MEMO_URL || !PRINTABLE.test(url)) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
let parsed;
|
|
17
|
+
try {
|
|
18
|
+
parsed = new URL(url);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
if (parsed.username !== "" || parsed.password !== "" || parsed.hostname === "") {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (url.startsWith("https://")) {
|
|
27
|
+
return parsed.protocol === "https:";
|
|
28
|
+
}
|
|
29
|
+
return url.startsWith("http://") && parsed.protocol === "http:" && LOCAL_HOSTS.has(parsed.hostname);
|
|
30
|
+
}
|
|
31
|
+
export function isSha256Hex(text) {
|
|
32
|
+
return SHA256.test(text);
|
|
33
|
+
}
|
|
34
|
+
export function specMemo(url) {
|
|
35
|
+
if (!isMemoUrl(url)) {
|
|
36
|
+
throw new RangeError(`a spec url must be ${MEMO_URL_RULE}`);
|
|
37
|
+
}
|
|
38
|
+
return `${SPEC_MEMO_PREFIX}${url}`;
|
|
39
|
+
}
|
|
40
|
+
export function parseSpecMemo(text) {
|
|
41
|
+
if (text.length > SPEC_MEMO_PREFIX.length + MAX_MEMO_URL || !text.startsWith(SPEC_MEMO_PREFIX)) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const url = text.slice(SPEC_MEMO_PREFIX.length);
|
|
45
|
+
return isMemoUrl(url) ? { url } : null;
|
|
46
|
+
}
|
|
47
|
+
export function deliveryMemo({ intent, sha256, url }) {
|
|
48
|
+
if (!isAddress(intent)) {
|
|
49
|
+
throw new RangeError("a delivery names its intent by a base58 address");
|
|
50
|
+
}
|
|
51
|
+
if (!isSha256Hex(sha256)) {
|
|
52
|
+
throw new RangeError("a delivery's sha256 must be 64 lowercase hex digits");
|
|
53
|
+
}
|
|
54
|
+
if (!isMemoUrl(url)) {
|
|
55
|
+
throw new RangeError(`a delivery url must be ${MEMO_URL_RULE}`);
|
|
56
|
+
}
|
|
57
|
+
return `${DELIVERY_MEMO_PREFIX}${intent}:${sha256}:${url}`;
|
|
58
|
+
}
|
|
59
|
+
export function parseDeliveryMemo(text) {
|
|
60
|
+
if (text.length > MAX_DELIVERY_MEMO || !text.startsWith(DELIVERY_MEMO_PREFIX)) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const rest = text.slice(DELIVERY_MEMO_PREFIX.length);
|
|
64
|
+
const split = rest.indexOf(":");
|
|
65
|
+
if (split < 0) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const intent = rest.slice(0, split);
|
|
69
|
+
const sha256 = rest.slice(split + 1, split + 65);
|
|
70
|
+
const url = rest.slice(split + 66);
|
|
71
|
+
if (rest[split + 65] !== ":" || !isAddress(intent) || !isSha256Hex(sha256) || !isMemoUrl(url)) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
return { intent, sha256, url };
|
|
75
|
+
}
|
|
76
|
+
export function releaseMemo(sha256) {
|
|
77
|
+
if (!isSha256Hex(sha256)) {
|
|
78
|
+
throw new RangeError("a release records a sha256 of 64 lowercase hex digits");
|
|
79
|
+
}
|
|
80
|
+
return `${RELEASE_MEMO_PREFIX}${sha256}`;
|
|
81
|
+
}
|
|
82
|
+
export function parseReleaseMemo(text) {
|
|
83
|
+
const sha256 = text.slice(RELEASE_MEMO_PREFIX.length);
|
|
84
|
+
return text.startsWith(RELEASE_MEMO_PREFIX) && isSha256Hex(sha256) ? sha256 : null;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=memo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memo.js","sourceRoot":"","sources":["../../src/memo.ts"],"names":[],"mappings":"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"}
|
package/dist/src/mints.d.ts
CHANGED
|
@@ -3,3 +3,4 @@ export { TOKEN_PROGRAM_ADDRESS } from "@solana-program/token";
|
|
|
3
3
|
export declare const TOKEN_2022_PROGRAM_ADDRESS: Address;
|
|
4
4
|
export declare const NATIVE_MINT: Address;
|
|
5
5
|
export declare const DEVNET_TEST_MINT: Address;
|
|
6
|
+
export declare function tokenName(mint: Address): "SOL" | "TEST" | undefined;
|
package/dist/src/mints.js
CHANGED
|
@@ -2,4 +2,7 @@ export { TOKEN_PROGRAM_ADDRESS } from "@solana-program/token";
|
|
|
2
2
|
export const TOKEN_2022_PROGRAM_ADDRESS = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb";
|
|
3
3
|
export const NATIVE_MINT = "So11111111111111111111111111111111111111112";
|
|
4
4
|
export const DEVNET_TEST_MINT = "ETU8trkkfE8gNVPDGbCaJUoH88wy6yYV6ttJdc9NKB88";
|
|
5
|
+
export function tokenName(mint) {
|
|
6
|
+
return mint === NATIVE_MINT ? "SOL" : mint === DEVNET_TEST_MINT ? "TEST" : undefined;
|
|
7
|
+
}
|
|
5
8
|
//# sourceMappingURL=mints.js.map
|
package/dist/src/mints.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mints.js","sourceRoot":"","sources":["../../src/mints.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,CAAC,MAAM,0BAA0B,GAAG,6CAAwD,CAAC;AACnG,MAAM,CAAC,MAAM,WAAW,GAAG,6CAAwD,CAAC;AACpF,MAAM,CAAC,MAAM,gBAAgB,GAAG,8CAAyD,CAAC"}
|
|
1
|
+
{"version":3,"file":"mints.js","sourceRoot":"","sources":["../../src/mints.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,CAAC,MAAM,0BAA0B,GAAG,6CAAwD,CAAC;AACnG,MAAM,CAAC,MAAM,WAAW,GAAG,6CAAwD,CAAC;AACpF,MAAM,CAAC,MAAM,gBAAgB,GAAG,8CAAyD,CAAC;AAE1F,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACvF,CAAC"}
|