@andrewkimjoseph/celina 0.3.6 → 0.4.1

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 (149) hide show
  1. package/bin/wrapper.js +2 -0
  2. package/package.json +5 -49
  3. package/LICENSE +0 -21
  4. package/README.md +0 -292
  5. package/assets/logo-black.png +0 -0
  6. package/assets/logo-yellow.png +0 -0
  7. package/assets/logo.png +0 -0
  8. package/bin/cli.js +0 -2
  9. package/build/abis/aave-pool.d.ts +0 -37
  10. package/build/abis/aave-pool.js +0 -26
  11. package/build/abis/aave-pool.js.map +0 -1
  12. package/build/abis/gooddollar-identity.d.ts +0 -61
  13. package/build/abis/gooddollar-identity.js +0 -38
  14. package/build/abis/gooddollar-identity.js.map +0 -1
  15. package/build/abis/self-registry.d.ts +0 -194
  16. package/build/abis/self-registry.js +0 -120
  17. package/build/abis/self-registry.js.map +0 -1
  18. package/build/clients/celo-client.d.ts +0 -14
  19. package/build/clients/celo-client.js +0 -58
  20. package/build/clients/celo-client.js.map +0 -1
  21. package/build/clients/ens-client.d.ts +0 -10
  22. package/build/clients/ens-client.js +0 -23
  23. package/build/clients/ens-client.js.map +0 -1
  24. package/build/clients/mento-sdk.d.ts +0 -2
  25. package/build/clients/mento-sdk.js +0 -9
  26. package/build/clients/mento-sdk.js.map +0 -1
  27. package/build/clients/self-api.d.ts +0 -82
  28. package/build/clients/self-api.js +0 -242
  29. package/build/clients/self-api.js.map +0 -1
  30. package/build/config/aave.d.ts +0 -5
  31. package/build/config/aave.js +0 -6
  32. package/build/config/aave.js.map +0 -1
  33. package/build/config/celina-tag.d.ts +0 -1
  34. package/build/config/celina-tag.js +0 -3
  35. package/build/config/celina-tag.js.map +0 -1
  36. package/build/config/chains.d.ts +0 -935
  37. package/build/config/chains.js +0 -244
  38. package/build/config/chains.js.map +0 -1
  39. package/build/config/env.d.ts +0 -7
  40. package/build/config/env.js +0 -9
  41. package/build/config/env.js.map +0 -1
  42. package/build/config/gooddollar.d.ts +0 -1
  43. package/build/config/gooddollar.js +0 -2
  44. package/build/config/gooddollar.js.map +0 -1
  45. package/build/config/load-env.d.ts +0 -1
  46. package/build/config/load-env.js +0 -4
  47. package/build/config/load-env.js.map +0 -1
  48. package/build/config/self.d.ts +0 -22
  49. package/build/config/self.js +0 -27
  50. package/build/config/self.js.map +0 -1
  51. package/build/context/app-context.d.ts +0 -28
  52. package/build/context/app-context.js +0 -28
  53. package/build/context/app-context.js.map +0 -1
  54. package/build/crypto/wallet-key-crypto.d.ts +0 -11
  55. package/build/crypto/wallet-key-crypto.js +0 -57
  56. package/build/crypto/wallet-key-crypto.js.map +0 -1
  57. package/build/http.d.ts +0 -2
  58. package/build/http.js +0 -15
  59. package/build/http.js.map +0 -1
  60. package/build/index.d.ts +0 -2
  61. package/build/index.js +0 -17
  62. package/build/index.js.map +0 -1
  63. package/build/schemas/common.d.ts +0 -6
  64. package/build/schemas/common.js +0 -24
  65. package/build/schemas/common.js.map +0 -1
  66. package/build/server/create-http-app.d.ts +0 -1
  67. package/build/server/create-http-app.js +0 -147
  68. package/build/server/create-http-app.js.map +0 -1
  69. package/build/server/create-server.d.ts +0 -2
  70. package/build/server/create-server.js +0 -23
  71. package/build/server/create-server.js.map +0 -1
  72. package/build/server/instructions.d.ts +0 -1
  73. package/build/server/instructions.js +0 -22
  74. package/build/server/instructions.js.map +0 -1
  75. package/build/services/aave.service.d.ts +0 -29
  76. package/build/services/aave.service.js +0 -166
  77. package/build/services/aave.service.js.map +0 -1
  78. package/build/services/account.service.d.ts +0 -13
  79. package/build/services/account.service.js +0 -23
  80. package/build/services/account.service.js.map +0 -1
  81. package/build/services/blockchain.service.d.ts +0 -40
  82. package/build/services/blockchain.service.js +0 -81
  83. package/build/services/blockchain.service.js.map +0 -1
  84. package/build/services/ens.service.d.ts +0 -30
  85. package/build/services/ens.service.js +0 -78
  86. package/build/services/ens.service.js.map +0 -1
  87. package/build/services/gooddollar.service.d.ts +0 -38
  88. package/build/services/gooddollar.service.js +0 -127
  89. package/build/services/gooddollar.service.js.map +0 -1
  90. package/build/services/mento-fx.service.d.ts +0 -72
  91. package/build/services/mento-fx.service.js +0 -266
  92. package/build/services/mento-fx.service.js.map +0 -1
  93. package/build/services/self-session-store.d.ts +0 -19
  94. package/build/services/self-session-store.js +0 -28
  95. package/build/services/self-session-store.js.map +0 -1
  96. package/build/services/self.service.d.ts +0 -250
  97. package/build/services/self.service.js +0 -689
  98. package/build/services/self.service.js.map +0 -1
  99. package/build/services/token.service.d.ts +0 -54
  100. package/build/services/token.service.js +0 -147
  101. package/build/services/token.service.js.map +0 -1
  102. package/build/services/transaction.service.d.ts +0 -24
  103. package/build/services/transaction.service.js +0 -117
  104. package/build/services/transaction.service.js.map +0 -1
  105. package/build/tools/aave.tools.d.ts +0 -2
  106. package/build/tools/aave.tools.js +0 -56
  107. package/build/tools/aave.tools.js.map +0 -1
  108. package/build/tools/blockchain.tools.d.ts +0 -3
  109. package/build/tools/blockchain.tools.js +0 -88
  110. package/build/tools/blockchain.tools.js.map +0 -1
  111. package/build/tools/ens.tools.d.ts +0 -2
  112. package/build/tools/ens.tools.js +0 -27
  113. package/build/tools/ens.tools.js.map +0 -1
  114. package/build/tools/gooddollar.tools.d.ts +0 -2
  115. package/build/tools/gooddollar.tools.js +0 -23
  116. package/build/tools/gooddollar.tools.js.map +0 -1
  117. package/build/tools/helpers.d.ts +0 -3
  118. package/build/tools/helpers.js +0 -16
  119. package/build/tools/helpers.js.map +0 -1
  120. package/build/tools/index.d.ts +0 -5
  121. package/build/tools/index.js +0 -25
  122. package/build/tools/index.js.map +0 -1
  123. package/build/tools/mento-fx.tools.d.ts +0 -2
  124. package/build/tools/mento-fx.tools.js +0 -87
  125. package/build/tools/mento-fx.tools.js.map +0 -1
  126. package/build/tools/self.tools.d.ts +0 -2
  127. package/build/tools/self.tools.js +0 -256
  128. package/build/tools/self.tools.js.map +0 -1
  129. package/build/tools/token.tools.d.ts +0 -2
  130. package/build/tools/token.tools.js +0 -62
  131. package/build/tools/token.tools.js.map +0 -1
  132. package/build/tools/transaction.tools.d.ts +0 -2
  133. package/build/tools/transaction.tools.js +0 -55
  134. package/build/tools/transaction.tools.js.map +0 -1
  135. package/build/tools/types.d.ts +0 -5
  136. package/build/tools/types.js +0 -2
  137. package/build/tools/types.js.map +0 -1
  138. package/build/utils/erc20-allowance-storage.d.ts +0 -7
  139. package/build/utils/erc20-allowance-storage.js +0 -44
  140. package/build/utils/erc20-allowance-storage.js.map +0 -1
  141. package/build/utils/format-date.d.ts +0 -1
  142. package/build/utils/format-date.js +0 -12
  143. package/build/utils/format-date.js.map +0 -1
  144. package/build/utils/self-format.d.ts +0 -16
  145. package/build/utils/self-format.js +0 -59
  146. package/build/utils/self-format.js.map +0 -1
  147. package/build/utils/self-signing.d.ts +0 -4
  148. package/build/utils/self-signing.js +0 -38
  149. package/build/utils/self-signing.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"erc20-allowance-storage.js","sourceRoot":"","sources":["../../src/utils/erc20-allowance-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,GAAG,EACH,kBAAkB,EAClB,KAAK,GAIN,MAAM,MAAM,CAAC;AAEd,iFAAiF;AACjF,MAAM,uBAAuB,GAAG;IAC9B,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,EAAE;IACF,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;CACK,CAAC;AAEX,MAAM,UAAU,yBAAyB,CACvC,KAAc,EACd,OAAgB,EAChB,WAAmB;IAEnB,MAAM,SAAS,GAAG,SAAS,CACzB,mBAAmB,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAClF,CAAC;IACF,OAAO,SAAS,CACd,mBAAmB,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAClF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,KAAc,EACd,KAAc,EACd,OAAgB,EAChB,MAAc,EACd,WAAmB;IAEnB,OAAO;QACL;YACE,OAAO,EAAE,KAAK;YACd,SAAS,EAAE;gBACT;oBACE,IAAI,EAAE,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC;oBAC5D,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;iBAC1B;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,MAAM,OAAO,GACX,KAAK,YAAY,KAAK;QACpB,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/E,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpB,OAAO,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- export declare function formatUnixDate(unixSeconds: number | bigint): string;
@@ -1,12 +0,0 @@
1
- export function formatUnixDate(unixSeconds) {
2
- const date = new Date(Number(unixSeconds) * 1000);
3
- return new Intl.DateTimeFormat("en-US", {
4
- month: "long",
5
- day: "numeric",
6
- year: "numeric",
7
- timeZone: "UTC",
8
- })
9
- .format(date)
10
- .replace(",", "");
11
- }
12
- //# sourceMappingURL=format-date.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format-date.js","sourceRoot":"","sources":["../../src/utils/format-date.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,WAA4B;IACzD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,CAAC;IAClD,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QACtC,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,KAAK;KAChB,CAAC;SACC,MAAM,CAAC,IAAI,CAAC;SACZ,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACtB,CAAC"}
@@ -1,16 +0,0 @@
1
- export interface SelfCredentialLike {
2
- nationality?: string;
3
- olderThan?: bigint | number;
4
- ofac?: boolean[];
5
- }
6
- export declare function formatCredentialsSummary(credentials?: SelfCredentialLike | null): string;
7
- export declare function truncateBody(body: string, maxBytes?: number): {
8
- body: string;
9
- truncated: boolean;
10
- };
11
- export declare function formatAgentInfo(info: Record<string, unknown>): Record<string, unknown>;
12
- export declare function proofExpiryFields(proofExpiresAtRaw: bigint): {
13
- proof_expires_at: string | null;
14
- days_until_expiry: number;
15
- is_expiring_soon: boolean;
16
- };
@@ -1,59 +0,0 @@
1
- import { SELF_PROOF_EXPIRING_SOON_DAYS } from "../config/self.js";
2
- export function formatCredentialsSummary(credentials) {
3
- if (!credentials) {
4
- return "No credentials available";
5
- }
6
- const parts = ["Verified human"];
7
- const age = Number(credentials.olderThan ?? 0);
8
- if (age > 0) {
9
- parts.push(`${age}+`);
10
- }
11
- if (credentials.ofac?.[0] === true) {
12
- parts.push("OFAC clear");
13
- }
14
- if (credentials.nationality) {
15
- parts.push(`nationality: ${credentials.nationality}`);
16
- }
17
- return parts.join(", ");
18
- }
19
- export function truncateBody(body, maxBytes = 10 * 1024) {
20
- const encoded = new TextEncoder().encode(body);
21
- if (encoded.byteLength <= maxBytes) {
22
- return { body, truncated: false };
23
- }
24
- const truncated = new TextDecoder().decode(encoded.slice(0, maxBytes));
25
- return {
26
- body: truncated +
27
- `\n\n[Truncated — original was ${encoded.byteLength} bytes, limit is ${maxBytes} bytes]`,
28
- truncated: true,
29
- };
30
- }
31
- export function formatAgentInfo(info) {
32
- const result = {};
33
- for (const [key, value] of Object.entries(info)) {
34
- result[key] =
35
- typeof value === "bigint"
36
- ? Number(value)
37
- : Array.isArray(value)
38
- ? value.map((item) => (typeof item === "bigint" ? Number(item) : item))
39
- : value;
40
- }
41
- return result;
42
- }
43
- export function proofExpiryFields(proofExpiresAtRaw) {
44
- const proofExpiresAtSecs = Number(proofExpiresAtRaw);
45
- const proofExpiresAtISO = proofExpiresAtSecs > 0
46
- ? new Date(proofExpiresAtSecs * 1000).toISOString()
47
- : null;
48
- const now = Math.floor(Date.now() / 1000);
49
- const daysUntilExpiry = proofExpiresAtSecs > 0
50
- ? Math.floor((proofExpiresAtSecs - now) / 86400)
51
- : -1;
52
- const isExpiringSoon = daysUntilExpiry >= 0 && daysUntilExpiry <= SELF_PROOF_EXPIRING_SOON_DAYS;
53
- return {
54
- proof_expires_at: proofExpiresAtISO,
55
- days_until_expiry: daysUntilExpiry,
56
- is_expiring_soon: isExpiringSoon,
57
- };
58
- }
59
- //# sourceMappingURL=self-format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"self-format.js","sourceRoot":"","sources":["../../src/utils/self-format.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { type Hex } from "viem";
2
- export declare function canonicalizeSigningUrl(url: string): string;
3
- export declare function computeBodyHash(body?: string | null): Hex;
4
- export declare function computeSigningMessage(timestamp: string, method: string, url: string, body?: string | null): Hex;
@@ -1,38 +0,0 @@
1
- import { keccak256, toBytes } from "viem";
2
- export function canonicalizeSigningUrl(url) {
3
- if (!url) {
4
- return "";
5
- }
6
- if (url.startsWith("http://") || url.startsWith("https://")) {
7
- try {
8
- const parsed = new URL(url);
9
- return (parsed.pathname || "/") + parsed.search;
10
- }
11
- catch {
12
- return url;
13
- }
14
- }
15
- if (url.startsWith("?")) {
16
- return `/${url}`;
17
- }
18
- if (url.startsWith("/")) {
19
- return url;
20
- }
21
- try {
22
- const parsed = new URL(url, "http://self.local");
23
- return (parsed.pathname || "/") + parsed.search;
24
- }
25
- catch {
26
- return url;
27
- }
28
- }
29
- export function computeBodyHash(body) {
30
- const payload = body ?? "";
31
- return keccak256(toBytes(payload));
32
- }
33
- export function computeSigningMessage(timestamp, method, url, body) {
34
- const canonicalUrl = canonicalizeSigningUrl(url);
35
- const bodyHash = computeBodyHash(body);
36
- return keccak256(toBytes(timestamp + method.toUpperCase() + canonicalUrl + bodyHash));
37
- }
38
- //# sourceMappingURL=self-signing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"self-signing.js","sourceRoot":"","sources":["../../src/utils/self-signing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAY,MAAM,MAAM,CAAC;AAEpD,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAoB;IAClD,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;IAC3B,OAAO,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,SAAiB,EACjB,MAAc,EACd,GAAW,EACX,IAAoB;IAEpB,MAAM,YAAY,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,SAAS,CACd,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,YAAY,GAAG,QAAQ,CAAC,CACpE,CAAC;AACJ,CAAC"}