@silvana-one/storage 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.
Files changed (110) hide show
  1. package/README.md +1 -0
  2. package/dist/node/base64/bigint.d.ts +6 -0
  3. package/dist/node/base64/bigint.js +83 -0
  4. package/dist/node/base64/bigint.js.map +1 -0
  5. package/dist/node/base64/field.d.ts +5 -0
  6. package/dist/node/base64/field.js +29 -0
  7. package/dist/node/base64/field.js.map +1 -0
  8. package/dist/node/base64/index.d.ts +2 -0
  9. package/dist/node/base64/index.js +3 -0
  10. package/dist/node/base64/index.js.map +1 -0
  11. package/dist/node/index.cjs +735 -0
  12. package/dist/node/index.d.ts +5 -0
  13. package/dist/node/index.js +6 -0
  14. package/dist/node/index.js.map +1 -0
  15. package/dist/node/indexed-map/index.d.ts +1 -0
  16. package/dist/node/indexed-map/index.js +2 -0
  17. package/dist/node/indexed-map/index.js.map +1 -0
  18. package/dist/node/indexed-map/indexed-map.d.ts +39 -0
  19. package/dist/node/indexed-map/indexed-map.js +125 -0
  20. package/dist/node/indexed-map/indexed-map.js.map +1 -0
  21. package/dist/node/storage/index.d.ts +3 -0
  22. package/dist/node/storage/index.js +4 -0
  23. package/dist/node/storage/index.js.map +1 -0
  24. package/dist/node/storage/ipfs.d.ts +5 -0
  25. package/dist/node/storage/ipfs.js +16 -0
  26. package/dist/node/storage/ipfs.js.map +1 -0
  27. package/dist/node/storage/pinata.d.ts +6 -0
  28. package/dist/node/storage/pinata.js +40 -0
  29. package/dist/node/storage/pinata.js.map +1 -0
  30. package/dist/node/storage/storage.d.ts +78 -0
  31. package/dist/node/storage/storage.js +60 -0
  32. package/dist/node/storage/storage.js.map +1 -0
  33. package/dist/node/util/index.d.ts +1 -0
  34. package/dist/node/util/index.js +2 -0
  35. package/dist/node/util/index.js.map +1 -0
  36. package/dist/node/util/sleep.d.ts +1 -0
  37. package/dist/node/util/sleep.js +4 -0
  38. package/dist/node/util/sleep.js.map +1 -0
  39. package/dist/node/whitelist/index.d.ts +2 -0
  40. package/dist/node/whitelist/index.js +3 -0
  41. package/dist/node/whitelist/index.js.map +1 -0
  42. package/dist/node/whitelist/offchain-map.d.ts +352 -0
  43. package/dist/node/whitelist/offchain-map.js +247 -0
  44. package/dist/node/whitelist/offchain-map.js.map +1 -0
  45. package/dist/node/whitelist/whitelist.d.ts +122 -0
  46. package/dist/node/whitelist/whitelist.js +98 -0
  47. package/dist/node/whitelist/whitelist.js.map +1 -0
  48. package/dist/tsconfig.tsbuildinfo +1 -0
  49. package/dist/tsconfig.web.tsbuildinfo +1 -0
  50. package/dist/web/base64/bigint.d.ts +6 -0
  51. package/dist/web/base64/bigint.js +83 -0
  52. package/dist/web/base64/bigint.js.map +1 -0
  53. package/dist/web/base64/field.d.ts +5 -0
  54. package/dist/web/base64/field.js +29 -0
  55. package/dist/web/base64/field.js.map +1 -0
  56. package/dist/web/base64/index.d.ts +2 -0
  57. package/dist/web/base64/index.js +3 -0
  58. package/dist/web/base64/index.js.map +1 -0
  59. package/dist/web/index.d.ts +5 -0
  60. package/dist/web/index.js +6 -0
  61. package/dist/web/index.js.map +1 -0
  62. package/dist/web/indexed-map/index.d.ts +1 -0
  63. package/dist/web/indexed-map/index.js +2 -0
  64. package/dist/web/indexed-map/index.js.map +1 -0
  65. package/dist/web/indexed-map/indexed-map.d.ts +39 -0
  66. package/dist/web/indexed-map/indexed-map.js +125 -0
  67. package/dist/web/indexed-map/indexed-map.js.map +1 -0
  68. package/dist/web/storage/index.d.ts +3 -0
  69. package/dist/web/storage/index.js +4 -0
  70. package/dist/web/storage/index.js.map +1 -0
  71. package/dist/web/storage/ipfs.d.ts +5 -0
  72. package/dist/web/storage/ipfs.js +16 -0
  73. package/dist/web/storage/ipfs.js.map +1 -0
  74. package/dist/web/storage/pinata.d.ts +6 -0
  75. package/dist/web/storage/pinata.js +40 -0
  76. package/dist/web/storage/pinata.js.map +1 -0
  77. package/dist/web/storage/storage.d.ts +78 -0
  78. package/dist/web/storage/storage.js +60 -0
  79. package/dist/web/storage/storage.js.map +1 -0
  80. package/dist/web/util/index.d.ts +1 -0
  81. package/dist/web/util/index.js +2 -0
  82. package/dist/web/util/index.js.map +1 -0
  83. package/dist/web/util/sleep.d.ts +1 -0
  84. package/dist/web/util/sleep.js +4 -0
  85. package/dist/web/util/sleep.js.map +1 -0
  86. package/dist/web/whitelist/index.d.ts +2 -0
  87. package/dist/web/whitelist/index.js +3 -0
  88. package/dist/web/whitelist/index.js.map +1 -0
  89. package/dist/web/whitelist/offchain-map.d.ts +352 -0
  90. package/dist/web/whitelist/offchain-map.js +247 -0
  91. package/dist/web/whitelist/offchain-map.js.map +1 -0
  92. package/dist/web/whitelist/whitelist.d.ts +122 -0
  93. package/dist/web/whitelist/whitelist.js +98 -0
  94. package/dist/web/whitelist/whitelist.js.map +1 -0
  95. package/package.json +60 -0
  96. package/src/base64/bigint.ts +87 -0
  97. package/src/base64/field.ts +34 -0
  98. package/src/base64/index.ts +2 -0
  99. package/src/index.ts +5 -0
  100. package/src/indexed-map/index.ts +1 -0
  101. package/src/indexed-map/indexed-map.ts +189 -0
  102. package/src/storage/index.ts +3 -0
  103. package/src/storage/ipfs.ts +20 -0
  104. package/src/storage/pinata.ts +56 -0
  105. package/src/storage/storage.ts +65 -0
  106. package/src/util/index.ts +1 -0
  107. package/src/util/sleep.ts +3 -0
  108. package/src/whitelist/index.ts +2 -0
  109. package/src/whitelist/offchain-map.ts +341 -0
  110. package/src/whitelist/whitelist.ts +139 -0
@@ -0,0 +1,5 @@
1
+ export * from "./base64/index.js";
2
+ export * from "./indexed-map/index.js";
3
+ export * from "./storage/index.js";
4
+ export * from "./util/index.js";
5
+ export * from "./whitelist/index.js";
@@ -0,0 +1,6 @@
1
+ export * from "./base64/index.js";
2
+ export * from "./indexed-map/index.js";
3
+ export * from "./storage/index.js";
4
+ export * from "./util/index.js";
5
+ export * from "./whitelist/index.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1 @@
1
+ export * from "./indexed-map.js";
@@ -0,0 +1,2 @@
1
+ export * from "./indexed-map.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/indexed-map/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { Experimental } from "o1js";
2
+ declare const IndexedMerkleMap: typeof import("node_modules/o1js/dist/node/lib/provable/merkle-tree-indexed.js").IndexedMerkleMap;
3
+ type IndexedMerkleMap = Experimental.IndexedMerkleMap;
4
+ export interface IndexedMapSerialized {
5
+ height: number;
6
+ root: string;
7
+ length: string;
8
+ nodes: string;
9
+ sortedLeaves: string;
10
+ }
11
+ export type IndexedMapSerializedJson = {
12
+ [key: string]: {
13
+ map: IndexedMapSerialized;
14
+ };
15
+ };
16
+ export declare function loadIndexedMerkleMap(params: {
17
+ url: string;
18
+ type: ReturnType<typeof IndexedMerkleMap>;
19
+ name?: string;
20
+ timeout?: number;
21
+ attempts?: number;
22
+ }): Promise<import("node_modules/o1js/dist/node/lib/provable/merkle-tree-indexed.js").IndexedMerkleMapBase>;
23
+ export declare function saveIndexedMerkleMap(params: {
24
+ map: IndexedMerkleMap;
25
+ name?: string;
26
+ filename?: string;
27
+ keyvalues?: {
28
+ key: string;
29
+ value: string;
30
+ }[];
31
+ auth: string;
32
+ }): Promise<string | undefined>;
33
+ export declare function serializeIndexedMap(map: IndexedMerkleMap): IndexedMapSerialized;
34
+ export declare function deserializeIndexedMerkleMap(params: {
35
+ serializedIndexedMap: IndexedMapSerialized;
36
+ type?: ReturnType<typeof IndexedMerkleMap>;
37
+ }): InstanceType<ReturnType<typeof IndexedMerkleMap>> | undefined;
38
+ export declare function parseIndexedMapSerialized(serializedMap: string): IndexedMapSerialized;
39
+ export {};
@@ -0,0 +1,125 @@
1
+ import { Experimental, Field } from "o1js";
2
+ import { bigintToBase64, bigintFromBase64 } from "../base64/bigint.js";
3
+ import { sleep } from "../util/sleep.js";
4
+ import { pinJSON } from "../storage/pinata.js";
5
+ const { IndexedMerkleMap } = Experimental;
6
+ export async function loadIndexedMerkleMap(params) {
7
+ const { url, type, name = "indexed-map", timeout = 60000, attempts = 5, } = params;
8
+ let attempt = 0;
9
+ const start = Date.now();
10
+ let response = await fetch(url);
11
+ while (!response.ok && attempt < attempts && Date.now() - start < timeout) {
12
+ attempt++;
13
+ await sleep(5000 * attempt); // handle rate limiting
14
+ response = await fetch(url);
15
+ }
16
+ if (!response.ok) {
17
+ throw new Error("Failed to fetch IndexedMerkleMap");
18
+ }
19
+ const json = await response.json();
20
+ const serializedIndexedMap = json[name].map;
21
+ if (!serializedIndexedMap)
22
+ throw new Error("wrong IndexedMerkleMap json format");
23
+ const map = deserializeIndexedMerkleMapInternal({
24
+ serializedIndexedMap,
25
+ type,
26
+ });
27
+ if (!map) {
28
+ throw new Error("Failed to deserialize whitelist");
29
+ }
30
+ return map;
31
+ }
32
+ export async function saveIndexedMerkleMap(params) {
33
+ const { map, name = "indexed-map", keyvalues, auth, filename = "indexed-map", } = params;
34
+ const serialized = serializeIndexedMap(map);
35
+ const json = { [name]: { map: serialized } };
36
+ const ipfsHash = await pinJSON({
37
+ data: json,
38
+ name: filename,
39
+ keyvalues,
40
+ auth,
41
+ });
42
+ return ipfsHash;
43
+ }
44
+ export function serializeIndexedMap(map) {
45
+ return {
46
+ height: map.height,
47
+ root: map.root.toJSON(),
48
+ length: map.length.toJSON(),
49
+ nodes: JSON.stringify(map.data.get().nodes, (_, v) => typeof v === "bigint" ? "n" + bigintToBase64(v) : v),
50
+ sortedLeaves: JSON.stringify(map.data
51
+ .get()
52
+ .sortedLeaves.map((v) => [
53
+ bigintToBase64(v.key),
54
+ bigintToBase64(v.nextKey),
55
+ bigintToBase64(v.value),
56
+ bigintToBase64(BigInt(v.index)),
57
+ ])),
58
+ };
59
+ }
60
+ export function deserializeIndexedMerkleMap(params) {
61
+ try {
62
+ const { serializedIndexedMap, type } = params;
63
+ return deserializeIndexedMerkleMapInternal({
64
+ serializedIndexedMap,
65
+ type: type ?? IndexedMerkleMap(serializedIndexedMap.height),
66
+ });
67
+ }
68
+ catch (error) {
69
+ console.error("Error deserializing map:", error?.message ?? error);
70
+ return undefined;
71
+ }
72
+ }
73
+ export function parseIndexedMapSerialized(serializedMap) {
74
+ const json = JSON.parse(serializedMap);
75
+ if (json.height === undefined ||
76
+ json.root === undefined ||
77
+ json.length === undefined ||
78
+ json.nodes === undefined ||
79
+ json.sortedLeaves === undefined)
80
+ throw new Error("wrong IndexedMerkleMap json format");
81
+ if (typeof json.height !== "number")
82
+ throw new Error("wrong IndexedMerkleMap height format");
83
+ if (typeof json.root !== "string")
84
+ throw new Error("wrong IndexedMerkleMap root format");
85
+ if (typeof json.length !== "string")
86
+ throw new Error("wrong IndexedMerkleMap length format");
87
+ if (typeof json.nodes !== "string")
88
+ throw new Error("wrong IndexedMerkleMap nodes format");
89
+ if (typeof json.sortedLeaves !== "string")
90
+ throw new Error("wrong IndexedMerkleMap sortedLeaves format");
91
+ return json;
92
+ }
93
+ function deserializeIndexedMerkleMapInternal(params) {
94
+ const { serializedIndexedMap, type } = params;
95
+ const map = new type();
96
+ if (serializedIndexedMap.height !== map.height) {
97
+ throw new Error("wrong IndexedMap height");
98
+ }
99
+ const nodes = JSON.parse(serializedIndexedMap.nodes, (_, v) => {
100
+ // Check if the value is a string that represents a BigInt
101
+ if (typeof v === "string" && v[0] === "n") {
102
+ // Remove the first 'n' and convert the string to a BigInt
103
+ return bigintFromBase64(v.slice(1));
104
+ }
105
+ return v;
106
+ });
107
+ const sortedLeaves = JSON.parse(serializedIndexedMap.sortedLeaves).map((row) => {
108
+ return {
109
+ key: bigintFromBase64(row[0]),
110
+ nextKey: bigintFromBase64(row[1]),
111
+ value: bigintFromBase64(row[2]),
112
+ index: Number(bigintFromBase64(row[3])),
113
+ };
114
+ });
115
+ map.root = Field.fromJSON(serializedIndexedMap.root);
116
+ map.length = Field.fromJSON(serializedIndexedMap.length);
117
+ map.data.updateAsProver(() => {
118
+ return {
119
+ nodes: nodes.map((row) => [...row]),
120
+ sortedLeaves: [...sortedLeaves],
121
+ };
122
+ });
123
+ return map;
124
+ }
125
+ //# sourceMappingURL=indexed-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexed-map.js","sourceRoot":"","sources":["../../../src/indexed-map/indexed-map.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./ipfs.js";
2
+ export * from "./pinata.js";
3
+ export * from "./storage.js";
@@ -0,0 +1,4 @@
1
+ export * from "./ipfs.js";
2
+ export * from "./pinata.js";
3
+ export * from "./storage.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function createIpfsURL(params: {
2
+ hash: string;
3
+ gateway?: string;
4
+ apiToken?: string;
5
+ }): string;
@@ -0,0 +1,16 @@
1
+ export function createIpfsURL(params) {
2
+ let { hash, gateway, apiToken } = params;
3
+ gateway ??=
4
+ process.env.PINATA_IPFS_GATEWAY ??
5
+ process.env.NEXT_PUBLIC_PINATA_IPFS_GATEWAY ??
6
+ process.env.REACT_APP_PINATA_IPFS_GATEWAY;
7
+ apiToken ??=
8
+ process.env.PINATA_GATEWAY_TOKEN ??
9
+ process.env.NEXT_PUBLIC_PINATA_GATEWAY_TOKEN ??
10
+ process.env.REACT_APP_PINATA_GATEWAY_TOKEN;
11
+ if (!gateway) {
12
+ gateway = "https://gateway.pinata.cloud/ipfs/";
13
+ }
14
+ return gateway + hash + (apiToken ? "?pinataGatewayToken=" + apiToken : "");
15
+ }
16
+ //# sourceMappingURL=ipfs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipfs.js","sourceRoot":"","sources":["../../../src/storage/ipfs.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,MAI7B;IACC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IACzC,OAAO;QACL,OAAO,CAAC,GAAG,CAAC,mBAAmB;YAC/B,OAAO,CAAC,GAAG,CAAC,+BAA+B;YAC3C,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;IAC5C,QAAQ;QACN,OAAO,CAAC,GAAG,CAAC,oBAAoB;YAChC,OAAO,CAAC,GAAG,CAAC,gCAAgC;YAC5C,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,oCAAoC,CAAC;IACjD,CAAC;IACD,OAAO,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function pinJSON(params: {
2
+ data: string | object;
3
+ name?: string;
4
+ keyvalues?: object;
5
+ auth?: string;
6
+ }): Promise<string | undefined>;
@@ -0,0 +1,40 @@
1
+ export async function pinJSON(params) {
2
+ const { data, name = "data.json", keyvalues = { library: "zkcloudworker" }, } = params;
3
+ const auth = params.auth ??
4
+ process.env.PINATA_JWT ??
5
+ process.env.NEXT_PUBLIC_PINATA_JWT ??
6
+ process.env.REACT_APP_PINATA_JWT;
7
+ if (!auth)
8
+ throw new Error("pinJSON: auth, PINATA_JWT, NEXT_PUBLIC_PINATA_JWT or REACT_APP_PINATA_JWT should be defined");
9
+ try {
10
+ const pinataData = {
11
+ pinataOptions: {
12
+ cidVersion: 1,
13
+ },
14
+ pinataMetadata: {
15
+ name,
16
+ keyvalues,
17
+ },
18
+ pinataContent: data,
19
+ };
20
+ const res = await fetch("https://api.pinata.cloud/pinning/pinJSONToIPFS", {
21
+ method: "POST",
22
+ headers: {
23
+ "Content-Type": "application/json",
24
+ Authorization: "Bearer " + auth,
25
+ },
26
+ body: JSON.stringify(pinataData),
27
+ });
28
+ if (!res.ok) {
29
+ throw new Error(`Pinata error: status: ${res.status} ${res.statusText}`);
30
+ }
31
+ const responseData = await res.json();
32
+ console.log("saveToIPFS result:", responseData);
33
+ return responseData?.IpfsHash;
34
+ }
35
+ catch (error) {
36
+ console.error("saveToIPFS error:", error?.message);
37
+ return undefined;
38
+ }
39
+ }
40
+ //# sourceMappingURL=pinata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinata.js","sourceRoot":"","sources":["../../../src/storage/pinata.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAK7B;IACC,MAAM,EACJ,IAAI,EACJ,IAAI,GAAG,WAAW,EAClB,SAAS,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,GACzC,GAAG,MAAM,CAAC;IACX,MAAM,IAAI,GACR,MAAM,CAAC,IAAI;QACX,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,sBAAsB;QAClC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACnC,IAAI,CAAC,IAAI;QACP,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;IAEJ,IAAI,CAAC;QACH,MAAM,UAAU,GAAG;YACjB,aAAa,EAAE;gBACb,UAAU,EAAE,CAAC;aACd;YACD,cAAc,EAAE;gBACd,IAAI;gBACJ,SAAS;aACV;YACD,aAAa,EAAE,IAAI;SACpB,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,gDAAgD,EAAE;YACxE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,SAAS,GAAG,IAAI;aAChC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;SACjC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;QAChD,OACE,YACD,EAAE,QAAQ,CAAC;IACd,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { Field, Bool } from "o1js";
2
+ export type IpfsHash = string;
3
+ declare const Storage_base: (new (value: {
4
+ url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[];
5
+ }) => {
6
+ url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[];
7
+ }) & {
8
+ _isStruct: true;
9
+ } & Omit<import("node_modules/o1js/dist/node/lib/provable/types/provable-intf.js").Provable<{
10
+ url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[];
11
+ }, {
12
+ url: bigint[];
13
+ }>, "fromFields"> & {
14
+ fromFields: (fields: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[]) => {
15
+ url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[];
16
+ };
17
+ } & {
18
+ fromValue: (value: {
19
+ url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
20
+ }) => {
21
+ url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[];
22
+ };
23
+ toInput: (x: {
24
+ url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[];
25
+ }) => {
26
+ fields?: Field[] | undefined;
27
+ packed?: [Field, number][] | undefined;
28
+ };
29
+ toJSON: (x: {
30
+ url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[];
31
+ }) => {
32
+ url: string[];
33
+ };
34
+ fromJSON: (x: {
35
+ url: string[];
36
+ }) => {
37
+ url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[];
38
+ };
39
+ empty: () => {
40
+ url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[];
41
+ };
42
+ };
43
+ /**
44
+ * Represents the off-chain storage information,
45
+ * such as an IPFS hash.
46
+ */
47
+ export declare class Storage extends Storage_base {
48
+ constructor(value: {
49
+ url: [Field, Field];
50
+ });
51
+ /**
52
+ * Asserts that two Storage instances are equal.
53
+ * @param a The first Storage instance.
54
+ * @param b The second Storage instance.
55
+ */
56
+ static assertEquals(a: Storage, b: Storage): void;
57
+ /**
58
+ * Checks if two Storage instances are equal.
59
+ * @param a The first Storage instance.
60
+ * @param b The second Storage instance.
61
+ * @returns A Bool indicating whether the two instances are equal.
62
+ */
63
+ static equals(a: Storage, b: Storage): Bool;
64
+ /**
65
+ * Creates a Storage instance from a string.
66
+ * @param url The string representing the storage URL.
67
+ * @returns A new Storage instance.
68
+ */
69
+ static fromString(url: IpfsHash): Storage;
70
+ /**
71
+ * Converts the Storage instance to a string.
72
+ * @returns The string representation of the storage URL.
73
+ */
74
+ toString(): IpfsHash;
75
+ static empty(): Storage;
76
+ isEmpty(): Bool;
77
+ }
78
+ export {};
@@ -0,0 +1,60 @@
1
+ import { Field, Struct, Encoding, Provable } from "o1js";
2
+ /**
3
+ * Represents the off-chain storage information,
4
+ * such as an IPFS hash.
5
+ */
6
+ export class Storage extends Struct({
7
+ url: Provable.Array(Field, 2),
8
+ }) {
9
+ constructor(value) {
10
+ super(value);
11
+ }
12
+ /**
13
+ * Asserts that two Storage instances are equal.
14
+ * @param a The first Storage instance.
15
+ * @param b The second Storage instance.
16
+ */
17
+ static assertEquals(a, b) {
18
+ a.url[0].assertEquals(b.url[0]);
19
+ a.url[1].assertEquals(b.url[1]);
20
+ }
21
+ /**
22
+ * Checks if two Storage instances are equal.
23
+ * @param a The first Storage instance.
24
+ * @param b The second Storage instance.
25
+ * @returns A Bool indicating whether the two instances are equal.
26
+ */
27
+ static equals(a, b) {
28
+ return a.url[0].equals(b.url[0]).and(a.url[1].equals(b.url[1]));
29
+ }
30
+ /**
31
+ * Creates a Storage instance from a string.
32
+ * @param url The string representing the storage URL.
33
+ * @returns A new Storage instance.
34
+ */
35
+ static fromString(url) {
36
+ if (url === "")
37
+ return Storage.empty();
38
+ const fields = Encoding.stringToFields(url);
39
+ if (fields.length !== 2)
40
+ throw new Error("Invalid string length");
41
+ return new Storage({ url: [fields[0], fields[1]] });
42
+ }
43
+ /**
44
+ * Converts the Storage instance to a string.
45
+ * @returns The string representation of the storage URL.
46
+ */
47
+ toString() {
48
+ if (this.isEmpty().toBoolean()) {
49
+ return "";
50
+ }
51
+ return Encoding.stringFromFields([this.url[0], this.url[1]]);
52
+ }
53
+ static empty() {
54
+ return new Storage({ url: [Field(0), Field(0)] });
55
+ }
56
+ isEmpty() {
57
+ return this.url[0].equals(Field(0)).and(this.url[1].equals(Field(0)));
58
+ }
59
+ }
60
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/storage/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAQ,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAG/D;;;GAGG;AACH,MAAM,OAAO,OAAQ,SAAQ,MAAM,CAAC;IAClC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;CAC9B,CAAC;IACA,YAAY,KAA8B;QACxC,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,CAAU,EAAE,CAAU;QACxC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,CAAU,EAAE,CAAU;QAClC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,GAAa;QAC7B,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAClE,OAAO,IAAI,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,KAAK;QACV,OAAO,IAAI,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export * from "./sleep.js";
@@ -0,0 +1,2 @@
1
+ export * from "./sleep.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function sleep(ms: number): Promise<unknown>;
@@ -0,0 +1,4 @@
1
+ export function sleep(ms) {
2
+ return new Promise((resolve) => setTimeout(resolve, ms));
3
+ }
4
+ //# sourceMappingURL=sleep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.js","sourceRoot":"","sources":["../../../src/util/sleep.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./whitelist.js";
2
+ export * from "./offchain-map.js";
@@ -0,0 +1,3 @@
1
+ export * from "./whitelist.js";
2
+ export * from "./offchain-map.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/whitelist/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}