@ic-reactor/candid 3.0.16-beta.0 → 3.0.16-beta.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.
@@ -21,10 +21,10 @@ export declare function isQuery(func: IDL.FuncClass): boolean;
21
21
  export declare function isUrl(str: string): boolean;
22
22
  export declare function isImage(str: string): boolean;
23
23
  export declare function isUuid(str: string): boolean;
24
+ export declare function isPrincipalId(str: string): boolean;
24
25
  export declare function isCanisterId(str: string): boolean;
25
26
  export declare function isBtcAddress(str: string): boolean;
26
27
  export declare function isEthAddress(str: string): boolean;
27
28
  export declare function isAccountIdentifier(str: string): boolean;
28
29
  export declare function isIsoDate(str: string): boolean;
29
- export declare function uint8ArrayToHexString(bytes: Uint8Array | number[]): string;
30
30
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/visitor/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAE1C,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,YAAY,CAAC,KACZ,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAYlB,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,CAgDhD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,SAE7C,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,WAO5C,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,oBAOlD,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,GAAG,GAAG,CAAC,IAAI,MACpB,OAAO,MAAM,kBAwBvC,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,GAAG,GAAG,CAAC,IAAI,MACd,OAAO,OAAO,kBAQxC,CAAA;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,GAAG,OAAO,CAKpD;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG1C;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgB5C;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAK3C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAKjD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOjD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIxD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO9C;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,GAAG,MAAM,CAQ1E"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/visitor/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAG1C,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,YAAY,CAAC,KACZ,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAYlB,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,CAgDhD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,SAE7C,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,WAO5C,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,oBAOlD,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,GAAG,GAAG,CAAC,IAAI,MACpB,OAAO,MAAM,kBAwBvC,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,GAAG,GAAG,CAAC,IAAI,MACd,OAAO,OAAO,kBAQxC,CAAA;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,GAAG,OAAO,CAKpD;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG1C;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgB5C;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAK3C;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQlD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMjD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOjD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGjD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIxD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO9C"}
@@ -1,3 +1,4 @@
1
+ import { Principal } from "@icp-sdk/core/principal";
1
2
  export const extractAndSortArgs = (argsObject) => {
2
3
  if (!argsObject || typeof argsObject !== "object")
3
4
  return [];
@@ -150,9 +151,22 @@ export function isUuid(str) {
150
151
  return false;
151
152
  return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(str);
152
153
  }
154
+ export function isPrincipalId(str) {
155
+ if (typeof str !== "string")
156
+ return false;
157
+ try {
158
+ Principal.fromText(str);
159
+ return true;
160
+ }
161
+ catch {
162
+ return false;
163
+ }
164
+ }
153
165
  export function isCanisterId(str) {
154
166
  if (typeof str !== "string")
155
167
  return false;
168
+ if (!isPrincipalId(str))
169
+ return false;
156
170
  if (str.length !== 27)
157
171
  return false;
158
172
  // All canister IDs end with "-cai"
@@ -187,14 +201,4 @@ export function isIsoDate(str) {
187
201
  // YYYY-MM-DDTHH:mm:ss.sssZ (optional milliseconds/nanoseconds and timezone)
188
202
  return /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})$/.test(str);
189
203
  }
190
- export function uint8ArrayToHexString(bytes) {
191
- if (!bytes)
192
- return "";
193
- if (Array.isArray(bytes)) {
194
- return bytes.map((b) => b.toString(16).padStart(2, "0")).join("");
195
- }
196
- return Array.from(bytes)
197
- .map((b) => b.toString(16).padStart(2, "0"))
198
- .join("");
199
- }
200
204
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/visitor/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/visitor/helpers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ic-reactor/candid",
3
- "version": "3.0.16-beta.0",
3
+ "version": "3.0.16-beta.1",
4
4
  "description": "IC Reactor Candid Adapter - Fetch and parse Candid definitions from Internet Computer canisters",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -44,7 +44,7 @@
44
44
  "dependencies": {
45
45
  "@noble/hashes": "^2.0.1",
46
46
  "zod": "^4.3.5",
47
- "@ic-reactor/core": "^3.0.16-beta.0"
47
+ "@ic-reactor/core": "^3.0.16-beta.1"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "zod": "^4.3.5",
@@ -55,7 +55,7 @@
55
55
  "devDependencies": {
56
56
  "@icp-sdk/core": "^5.0.0",
57
57
  "@size-limit/preset-small-lib": "^12.0.0",
58
- "@types/node": "^25.0.9",
58
+ "@types/node": "^25.2.0",
59
59
  "size-limit": "^12.0.0",
60
60
  "vitest": "^4.0.17"
61
61
  },
@@ -0,0 +1,274 @@
1
+ import { describe, it, expect } from "vitest"
2
+ import {
3
+ isPrincipalId,
4
+ isCanisterId,
5
+ isBtcAddress,
6
+ isEthAddress,
7
+ isAccountIdentifier,
8
+ isIsoDate,
9
+ isUrl,
10
+ isImage,
11
+ isUuid,
12
+ } from "./helpers"
13
+
14
+ describe("Helpers", () => {
15
+ describe("isPrincipalId", () => {
16
+ it("should return true for valid principal IDs", () => {
17
+ expect(isPrincipalId("aaaaa-aa")).toBe(true)
18
+ expect(isPrincipalId("2vxsx-fae")).toBe(true)
19
+ expect(isPrincipalId("rrkah-fqaaa-aaaaa-aaaaq-cai")).toBe(true)
20
+ })
21
+
22
+ it("should return false for invalid principal IDs", () => {
23
+ expect(isPrincipalId("")).toBe(false) // empty string
24
+ expect(isPrincipalId("invalid-principal")).toBe(false) // contains invalid characters
25
+ expect(isPrincipalId("123456")).toBe(false) // numbers only
26
+ expect(
27
+ isPrincipalId("a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z")
28
+ ).toBe(false) // too long
29
+ expect(isPrincipalId("not-a-valid-principal")).toBe(false) // malformed
30
+ })
31
+
32
+ it("should return false for non-string inputs", () => {
33
+ expect(isPrincipalId(123 as any)).toBe(false)
34
+ expect(isPrincipalId(null as any)).toBe(false)
35
+ expect(isPrincipalId(undefined as any)).toBe(false)
36
+ expect(isPrincipalId({} as any)).toBe(false)
37
+ })
38
+ })
39
+
40
+ describe("isCanisterId", () => {
41
+ it("should return true for valid canister IDs", () => {
42
+ expect(isCanisterId("rrkah-fqaaa-aaaaa-aaaaq-cai")).toBe(true)
43
+ expect(isCanisterId("ryjl3-tyaaa-aaaaa-aaaba-cai")).toBe(true)
44
+ })
45
+
46
+ it("should return false for principal IDs that are not canister IDs", () => {
47
+ expect(isCanisterId("aaaaa-aa")).toBe(false) // too short
48
+ expect(isCanisterId("2vxsx-fae")).toBe(false) // too short
49
+ })
50
+
51
+ it("should return false for invalid strings", () => {
52
+ expect(isCanisterId("invalid-canister-id")).toBe(false)
53
+ expect(isCanisterId("rrkah-fqaaa-aaaaa-aaaaq")).toBe(false) // missing -cai
54
+ expect(isCanisterId("rrkah-fqaaa-aaaaa-aaaaq-ca")).toBe(false) // wrong ending
55
+ expect(isCanisterId("")).toBe(false)
56
+ })
57
+
58
+ it("should return false for non-string inputs", () => {
59
+ expect(isCanisterId(123 as any)).toBe(false)
60
+ expect(isCanisterId(null as any)).toBe(false)
61
+ })
62
+ })
63
+
64
+ describe("isBtcAddress", () => {
65
+ it("should return true for valid Bitcoin addresses", () => {
66
+ // Bech32 mainnet
67
+ expect(isBtcAddress("bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4")).toBe(
68
+ true
69
+ )
70
+ // Bech32 testnet
71
+ expect(isBtcAddress("tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx")).toBe(
72
+ true
73
+ )
74
+ // Base58 mainnet
75
+ expect(isBtcAddress("1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2")).toBe(true)
76
+ // Base58 testnet
77
+ expect(isBtcAddress("mipcBbFg9gMiCh81Kj8tqqdgoZub1ZJRfn")).toBe(true)
78
+ })
79
+
80
+ it("should return false for invalid Bitcoin addresses", () => {
81
+ expect(isBtcAddress("")).toBe(false)
82
+ expect(isBtcAddress("invalid")).toBe(false)
83
+ expect(isBtcAddress("bc1short")).toBe(false) // too short
84
+ expect(
85
+ isBtcAddress(
86
+ "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4"
87
+ )
88
+ ).toBe(false) // too long
89
+ })
90
+
91
+ it("should return false for non-string inputs", () => {
92
+ expect(isBtcAddress(123 as any)).toBe(false)
93
+ expect(isBtcAddress(null as any)).toBe(false)
94
+ })
95
+ })
96
+
97
+ describe("isEthAddress", () => {
98
+ it("should return true for valid Ethereum addresses", () => {
99
+ expect(isEthAddress("0x742d35Cc6634C0532925a3b844Bc454e4438f44e")).toBe(
100
+ true
101
+ )
102
+ expect(isEthAddress("0x742d35cc6634c0532925a3b844bc454e4438f44e")).toBe(
103
+ true
104
+ ) // lowercase
105
+ expect(isEthAddress("0x742D35CC6634C0532925A3B844BC454E4438F44E")).toBe(
106
+ true
107
+ ) // uppercase
108
+ })
109
+
110
+ it("should return false for invalid Ethereum addresses", () => {
111
+ expect(isEthAddress("")).toBe(false)
112
+ expect(isEthAddress("0x742d35Cc6634C0532925a3b844Bc454e4438f44")).toBe(
113
+ false
114
+ ) // too short
115
+ expect(isEthAddress("0x742d35Cc6634C0532925a3b844Bc454e4438f44ee")).toBe(
116
+ false
117
+ ) // too long
118
+ expect(isEthAddress("742d35Cc6634C0532925a3b844Bc454e4438f44e")).toBe(
119
+ false
120
+ ) // missing 0x
121
+ expect(isEthAddress("0x742d35Cc6634C0532925a3b844Bc454e4438f44g")).toBe(
122
+ false
123
+ ) // invalid char
124
+ })
125
+
126
+ it("should return false for non-string inputs", () => {
127
+ expect(isEthAddress(123 as any)).toBe(false)
128
+ expect(isEthAddress(null as any)).toBe(false)
129
+ })
130
+ })
131
+
132
+ describe("isAccountIdentifier", () => {
133
+ it("should return true for valid account identifiers", () => {
134
+ expect(
135
+ isAccountIdentifier(
136
+ "a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1"
137
+ )
138
+ ).toBe(true)
139
+ expect(
140
+ isAccountIdentifier(
141
+ "0000000000000000000000000000000000000000000000000000000000000000"
142
+ )
143
+ ).toBe(true)
144
+ expect(
145
+ isAccountIdentifier(
146
+ "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
147
+ )
148
+ ).toBe(true)
149
+ })
150
+
151
+ it("should return false for invalid account identifiers", () => {
152
+ expect(isAccountIdentifier("")).toBe(false)
153
+ expect(
154
+ isAccountIdentifier(
155
+ "a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1"
156
+ )
157
+ ).toBe(false) // 63 chars
158
+ expect(
159
+ isAccountIdentifier(
160
+ "a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a"
161
+ )
162
+ ).toBe(false) // 65 chars
163
+ expect(
164
+ isAccountIdentifier(
165
+ "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg"
166
+ )
167
+ ).toBe(false) // invalid chars
168
+ })
169
+
170
+ it("should return false for non-string inputs", () => {
171
+ expect(isAccountIdentifier(123 as any)).toBe(false)
172
+ expect(isAccountIdentifier(null as any)).toBe(false)
173
+ })
174
+ })
175
+
176
+ describe("isIsoDate", () => {
177
+ it("should return true for valid ISO dates", () => {
178
+ expect(isIsoDate("2023-12-25T10:30:00Z")).toBe(true)
179
+ expect(isIsoDate("2023-12-25T10:30:00.123Z")).toBe(true)
180
+ expect(isIsoDate("2023-12-25T10:30:00+05:30")).toBe(true)
181
+ expect(isIsoDate("2023-12-25T10:30:00-08:00")).toBe(true)
182
+ })
183
+
184
+ it("should return false for invalid ISO dates", () => {
185
+ expect(isIsoDate("")).toBe(false)
186
+ expect(isIsoDate("2023-12-25")).toBe(false) // missing time
187
+ expect(isIsoDate("2023-12-25T10:30:00")).toBe(false) // missing timezone
188
+ expect(isIsoDate("invalid-date")).toBe(false)
189
+ expect(isIsoDate("2023-12-25T10:30:00Zextra")).toBe(false) // extra characters
190
+ })
191
+
192
+ it("should return false for non-string inputs", () => {
193
+ expect(isIsoDate(123 as any)).toBe(false)
194
+ expect(isIsoDate(null as any)).toBe(false)
195
+ })
196
+ })
197
+
198
+ describe("isUrl", () => {
199
+ it("should return true for valid URLs", () => {
200
+ expect(isUrl("http://example.com")).toBe(true)
201
+ expect(isUrl("https://example.com")).toBe(true)
202
+ expect(isUrl("https://example.com/path")).toBe(true)
203
+ expect(isUrl("https://example.com/path?query=value")).toBe(true)
204
+ })
205
+
206
+ it("should return false for invalid URLs", () => {
207
+ expect(isUrl("")).toBe(false)
208
+ expect(isUrl("example.com")).toBe(false) // missing protocol
209
+ expect(isUrl("ftp://example.com")).toBe(false) // unsupported protocol
210
+ expect(isUrl("not-a-url")).toBe(false)
211
+ })
212
+
213
+ it("should return false for non-string inputs", () => {
214
+ expect(isUrl(123 as any)).toBe(false)
215
+ expect(isUrl(null as any)).toBe(false)
216
+ })
217
+ })
218
+
219
+ describe("isImage", () => {
220
+ it("should return true for valid image URLs", () => {
221
+ expect(isImage("https://example.com/image.jpg")).toBe(true)
222
+ expect(isImage("https://example.com/image.jpeg")).toBe(true)
223
+ expect(isImage("https://example.com/image.png")).toBe(true)
224
+ expect(isImage("https://example.com/image.gif")).toBe(true)
225
+ expect(isImage("https://example.com/image.svg")).toBe(true)
226
+ })
227
+
228
+ it("should return true for base64 image data", () => {
229
+ expect(
230
+ isImage(
231
+ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="
232
+ )
233
+ ).toBe(true)
234
+ expect(
235
+ isImage(
236
+ "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/vAA="
237
+ )
238
+ ).toBe(true)
239
+ })
240
+
241
+ it("should return false for non-image URLs", () => {
242
+ expect(isImage("https://example.com/document.pdf")).toBe(false)
243
+ expect(isImage("https://example.com/video.mp4")).toBe(false)
244
+ expect(isImage("not-an-image")).toBe(false)
245
+ expect(isImage("")).toBe(false)
246
+ })
247
+
248
+ it("should return false for non-string inputs", () => {
249
+ expect(isImage(123 as any)).toBe(false)
250
+ expect(isImage(null as any)).toBe(false)
251
+ })
252
+ })
253
+
254
+ describe("isUuid", () => {
255
+ it("should return true for valid UUIDs", () => {
256
+ expect(isUuid("123e4567-e89b-12d3-a456-426614174000")).toBe(true)
257
+ expect(isUuid("123E4567-E89B-12D3-A456-426614174000")).toBe(true) // uppercase
258
+ expect(isUuid("123e4567-e89b-12d3-a456-426614174000")).toBe(true) // lowercase
259
+ })
260
+
261
+ it("should return false for invalid UUIDs", () => {
262
+ expect(isUuid("")).toBe(false)
263
+ expect(isUuid("123e4567-e89b-12d3-a456-42661417400")).toBe(false) // too short
264
+ expect(isUuid("123e4567-e89b-12d3-a456-4266141740000")).toBe(false) // too long
265
+ expect(isUuid("123e4567-e89b-12d3-a456-42661417400g")).toBe(false) // invalid char
266
+ expect(isUuid("not-a-uuid")).toBe(false)
267
+ })
268
+
269
+ it("should return false for non-string inputs", () => {
270
+ expect(isUuid(123 as any)).toBe(false)
271
+ expect(isUuid(null as any)).toBe(false)
272
+ })
273
+ })
274
+ })
@@ -1,4 +1,5 @@
1
1
  import { IDL } from "@icp-sdk/core/candid"
2
+ import { Principal } from "@icp-sdk/core/principal"
2
3
 
3
4
  export const extractAndSortArgs = <T extends Record<string, unknown>>(
4
5
  argsObject: T
@@ -174,8 +175,19 @@ export function isUuid(str: string): boolean {
174
175
  )
175
176
  }
176
177
 
178
+ export function isPrincipalId(str: string): boolean {
179
+ if (typeof str !== "string") return false
180
+ try {
181
+ Principal.fromText(str)
182
+ return true
183
+ } catch {
184
+ return false
185
+ }
186
+ }
187
+
177
188
  export function isCanisterId(str: string): boolean {
178
189
  if (typeof str !== "string") return false
190
+ if (!isPrincipalId(str)) return false
179
191
  if (str.length !== 27) return false
180
192
  // All canister IDs end with "-cai"
181
193
  return str.endsWith("-cai")
@@ -209,13 +221,3 @@ export function isIsoDate(str: string): boolean {
209
221
  str
210
222
  )
211
223
  }
212
-
213
- export function uint8ArrayToHexString(bytes: Uint8Array | number[]): string {
214
- if (!bytes) return ""
215
- if (Array.isArray(bytes)) {
216
- return bytes.map((b) => b.toString(16).padStart(2, "0")).join("")
217
- }
218
- return Array.from(bytes)
219
- .map((b) => b.toString(16).padStart(2, "0"))
220
- .join("")
221
- }