@hashgraphonline/standards-sdk 0.1.136 → 0.1.137-feat-hcs-21.canary.5802d65.32
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/cjs/hcs-21/base-client.d.ts +31 -0
- package/dist/cjs/hcs-21/base-client.d.ts.map +1 -0
- package/dist/cjs/hcs-21/browser.d.ts +20 -0
- package/dist/cjs/hcs-21/browser.d.ts.map +1 -0
- package/dist/cjs/hcs-21/errors.d.ts +6 -0
- package/dist/cjs/hcs-21/errors.d.ts.map +1 -0
- package/dist/cjs/hcs-21/index.d.ts +7 -0
- package/dist/cjs/hcs-21/index.d.ts.map +1 -0
- package/dist/cjs/hcs-21/sdk.d.ts +48 -0
- package/dist/cjs/hcs-21/sdk.d.ts.map +1 -0
- package/dist/cjs/hcs-21/tx.d.ts +20 -0
- package/dist/cjs/hcs-21/tx.d.ts.map +1 -0
- package/dist/cjs/hcs-21/types.d.ts +72 -0
- package/dist/cjs/hcs-21/types.d.ts.map +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
- package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
- package/dist/cjs/services/types.d.ts +1 -1
- package/dist/cjs/services/types.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +1 -1
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/hcs-21/base-client.d.ts +31 -0
- package/dist/es/hcs-21/base-client.d.ts.map +1 -0
- package/dist/es/hcs-21/browser.d.ts +20 -0
- package/dist/es/hcs-21/browser.d.ts.map +1 -0
- package/dist/es/hcs-21/errors.d.ts +6 -0
- package/dist/es/hcs-21/errors.d.ts.map +1 -0
- package/dist/es/hcs-21/index.d.ts +7 -0
- package/dist/es/hcs-21/index.d.ts.map +1 -0
- package/dist/es/hcs-21/sdk.d.ts +48 -0
- package/dist/es/hcs-21/sdk.d.ts.map +1 -0
- package/dist/es/hcs-21/tx.d.ts +20 -0
- package/dist/es/hcs-21/tx.d.ts.map +1 -0
- package/dist/es/hcs-21/types.d.ts +72 -0
- package/dist/es/hcs-21/types.d.ts.map +1 -0
- package/dist/es/index.d.ts +1 -0
- package/dist/es/index.d.ts.map +1 -1
- package/dist/es/services/registry-broker/client.d.ts.map +1 -1
- package/dist/es/services/registry-broker/types.d.ts.map +1 -1
- package/dist/es/services/types.d.ts +1 -1
- package/dist/es/services/types.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +66 -48
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es10.js +2 -2
- package/dist/es/standards-sdk.es100.js +231 -28
- package/dist/es/standards-sdk.es100.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +109 -18
- package/dist/es/standards-sdk.es101.js.map +1 -1
- package/dist/es/standards-sdk.es102.js +32 -158
- package/dist/es/standards-sdk.es102.js.map +1 -1
- package/dist/es/standards-sdk.es103.js +80 -204
- package/dist/es/standards-sdk.es103.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +21 -780
- package/dist/es/standards-sdk.es104.js.map +1 -1
- package/dist/es/standards-sdk.es105.js +140 -11
- package/dist/es/standards-sdk.es105.js.map +1 -1
- package/dist/es/standards-sdk.es106.js +29 -567
- package/dist/es/standards-sdk.es106.js.map +1 -1
- package/dist/es/standards-sdk.es107.js +17 -597
- package/dist/es/standards-sdk.es107.js.map +1 -1
- package/dist/es/standards-sdk.es108.js +159 -12
- package/dist/es/standards-sdk.es108.js.map +1 -1
- package/dist/es/standards-sdk.es109.js +208 -2
- package/dist/es/standards-sdk.es109.js.map +1 -1
- package/dist/es/standards-sdk.es110.js +774 -67
- package/dist/es/standards-sdk.es110.js.map +1 -1
- package/dist/es/standards-sdk.es111.js +11 -37
- package/dist/es/standards-sdk.es111.js.map +1 -1
- package/dist/es/standards-sdk.es112.js +567 -2
- package/dist/es/standards-sdk.es112.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +576 -197
- package/dist/es/standards-sdk.es113.js.map +1 -1
- package/dist/es/standards-sdk.es114.js +12 -1139
- package/dist/es/standards-sdk.es114.js.map +1 -1
- package/dist/es/standards-sdk.es115.js +2 -306
- package/dist/es/standards-sdk.es115.js.map +1 -1
- package/dist/es/standards-sdk.es116.js +79 -418
- package/dist/es/standards-sdk.es116.js.map +1 -1
- package/dist/es/standards-sdk.es117.js +35 -351
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es118.js +2 -761
- package/dist/es/standards-sdk.es118.js.map +1 -1
- package/dist/es/standards-sdk.es119.js +204 -185
- package/dist/es/standards-sdk.es119.js.map +1 -1
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es120.js +1055 -1482
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +264 -2046
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es122.js +420 -50
- package/dist/es/standards-sdk.es122.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +350 -82
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +741 -139
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es125.js +204 -7
- package/dist/es/standards-sdk.es125.js.map +1 -1
- package/dist/es/standards-sdk.es126.js +1533 -52
- package/dist/es/standards-sdk.es126.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +2077 -59
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +52 -28
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +80 -131
- package/dist/es/standards-sdk.es129.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +1 -1
- package/dist/es/standards-sdk.es130.js +152 -35
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +7 -694
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +53 -12241
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +61 -13
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +28 -56
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +128 -54
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +38 -168
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +694 -322
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +12220 -292
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +55 -452
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +1 -1
- package/dist/es/standards-sdk.es140.js +52 -319
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +162 -66
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +325 -0
- package/dist/es/standards-sdk.es142.js.map +1 -0
- package/dist/es/standards-sdk.es143.js +349 -0
- package/dist/es/standards-sdk.es143.js.map +1 -0
- package/dist/es/standards-sdk.es144.js +456 -0
- package/dist/es/standards-sdk.es144.js.map +1 -0
- package/dist/es/standards-sdk.es145.js +334 -0
- package/dist/es/standards-sdk.es145.js.map +1 -0
- package/dist/es/standards-sdk.es146.js +79 -0
- package/dist/es/standards-sdk.es146.js.map +1 -0
- package/dist/es/standards-sdk.es147.js +20 -0
- package/dist/es/standards-sdk.es147.js.map +1 -0
- package/dist/es/standards-sdk.es15.js +1 -1
- package/dist/es/standards-sdk.es16.js +17 -12
- package/dist/es/standards-sdk.es16.js.map +1 -1
- package/dist/es/standards-sdk.es17.js +5 -5
- package/dist/es/standards-sdk.es19.js +12 -12
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es2.js.map +1 -1
- package/dist/es/standards-sdk.es20.js +9 -9
- package/dist/es/standards-sdk.es21.js +1 -1
- package/dist/es/standards-sdk.es22.js +1 -1
- package/dist/es/standards-sdk.es23.js +1 -1
- package/dist/es/standards-sdk.es24.js +1 -1
- package/dist/es/standards-sdk.es25.js +1 -1
- package/dist/es/standards-sdk.es26.js +1 -1
- package/dist/es/standards-sdk.es27.js +1 -1
- package/dist/es/standards-sdk.es28.js +12 -12
- package/dist/es/standards-sdk.es3.js +2 -2
- package/dist/es/standards-sdk.es31.js +2 -2
- package/dist/es/standards-sdk.es32.js +4 -4
- package/dist/es/standards-sdk.es33.js +1 -1
- package/dist/es/standards-sdk.es36.js +6 -6
- package/dist/es/standards-sdk.es37.js +4 -4
- package/dist/es/standards-sdk.es38.js +2 -2
- package/dist/es/standards-sdk.es39.js +2 -2
- package/dist/es/standards-sdk.es40.js +1 -1
- package/dist/es/standards-sdk.es41.js +1 -1
- package/dist/es/standards-sdk.es42.js +2 -2
- package/dist/es/standards-sdk.es47.js +1 -1
- package/dist/es/standards-sdk.es5.js +2 -2
- package/dist/es/standards-sdk.es52.js +1 -1
- package/dist/es/standards-sdk.es54.js +1 -1
- package/dist/es/standards-sdk.es57.js +2 -2
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es6.js +2 -2
- package/dist/es/standards-sdk.es60.js +1 -1
- package/dist/es/standards-sdk.es61.js +7 -7
- package/dist/es/standards-sdk.es63.js +1 -1
- package/dist/es/standards-sdk.es65.js +2 -2
- package/dist/es/standards-sdk.es66.js +3 -3
- package/dist/es/standards-sdk.es69.js +2 -2
- package/dist/es/standards-sdk.es7.js +2 -2
- package/dist/es/standards-sdk.es70.js +3 -3
- package/dist/es/standards-sdk.es71.js +2 -2
- package/dist/es/standards-sdk.es72.js +1 -1
- package/dist/es/standards-sdk.es75.js +2 -2
- package/dist/es/standards-sdk.es77.js +2 -2
- package/dist/es/standards-sdk.es78.js +4 -4
- package/dist/es/standards-sdk.es79.js +1 -1
- package/dist/es/standards-sdk.es8.js +1 -1
- package/dist/es/standards-sdk.es80.js +25 -27
- package/dist/es/standards-sdk.es80.js.map +1 -1
- package/dist/es/standards-sdk.es81.js +6 -78
- package/dist/es/standards-sdk.es81.js.map +1 -1
- package/dist/es/standards-sdk.es82.js +27 -64
- package/dist/es/standards-sdk.es82.js.map +1 -1
- package/dist/es/standards-sdk.es83.js +67 -23
- package/dist/es/standards-sdk.es83.js.map +1 -1
- package/dist/es/standards-sdk.es84.js +165 -23
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +31 -166
- package/dist/es/standards-sdk.es85.js.map +1 -1
- package/dist/es/standards-sdk.es86.js +24 -127
- package/dist/es/standards-sdk.es86.js.map +1 -1
- package/dist/es/standards-sdk.es87.js +65 -142
- package/dist/es/standards-sdk.es87.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +52 -127
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +26 -41
- package/dist/es/standards-sdk.es89.js.map +1 -1
- package/dist/es/standards-sdk.es90.js +23 -261
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es91.js +162 -93
- package/dist/es/standards-sdk.es91.js.map +1 -1
- package/dist/es/standards-sdk.es92.js +112 -83
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +156 -28
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +133 -225
- package/dist/es/standards-sdk.es94.js.map +1 -1
- package/dist/es/standards-sdk.es95.js +40 -108
- package/dist/es/standards-sdk.es95.js.map +1 -1
- package/dist/es/standards-sdk.es96.js +253 -24
- package/dist/es/standards-sdk.es96.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +96 -80
- package/dist/es/standards-sdk.es97.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +91 -21
- package/dist/es/standards-sdk.es98.js.map +1 -1
- package/dist/es/standards-sdk.es99.js +28 -141
- package/dist/es/standards-sdk.es99.js.map +1 -1
- package/package.json +2 -1
|
@@ -1,30 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (params.accountMemo) {
|
|
22
|
-
tx.setAccountMemo(params.accountMemo);
|
|
23
|
-
}
|
|
24
|
-
return tx;
|
|
25
|
-
}
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const HCS21_PROTOCOL = "hcs-21";
|
|
3
|
+
const HCS21_MAX_MESSAGE_BYTES = 1024;
|
|
4
|
+
const HCS21MetadataPointerPattern = /^hcs:\/\/1\/0\.0\.\d+\/\d+$/;
|
|
5
|
+
var HCS21TopicType = /* @__PURE__ */ ((HCS21TopicType2) => {
|
|
6
|
+
HCS21TopicType2[HCS21TopicType2["REGISTRY"] = 0] = "REGISTRY";
|
|
7
|
+
return HCS21TopicType2;
|
|
8
|
+
})(HCS21TopicType || {});
|
|
9
|
+
const adapterDeclarationSchema = z.object({
|
|
10
|
+
p: z.literal(HCS21_PROTOCOL),
|
|
11
|
+
op: z.enum(["register", "update"]),
|
|
12
|
+
registry: z.enum(["npm", "pypi"]),
|
|
13
|
+
pkg: z.string().min(1),
|
|
14
|
+
name: z.string().min(1),
|
|
15
|
+
kind: z.enum(["web2", "web3"]),
|
|
16
|
+
metadata: z.string().regex(
|
|
17
|
+
HCS21MetadataPointerPattern,
|
|
18
|
+
"metadata must be an HCS-1 HRL (hcs://1/<topicId>/<sequence>)"
|
|
19
|
+
).optional()
|
|
20
|
+
});
|
|
26
21
|
export {
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
HCS21MetadataPointerPattern,
|
|
23
|
+
HCS21TopicType,
|
|
24
|
+
HCS21_MAX_MESSAGE_BYTES,
|
|
25
|
+
HCS21_PROTOCOL,
|
|
26
|
+
adapterDeclarationSchema
|
|
29
27
|
};
|
|
30
28
|
//# sourceMappingURL=standards-sdk.es80.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es80.js","sources":["../../src/hcs-
|
|
1
|
+
{"version":3,"file":"standards-sdk.es80.js","sources":["../../src/hcs-21/types.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport const HCS21_PROTOCOL = 'hcs-21';\nexport const HCS21_MAX_MESSAGE_BYTES = 1024;\n\nexport type AdapterPackageRegistry = 'npm' | 'pypi';\nexport type AdapterPlatformKind = 'web2' | 'web3';\nexport type AdapterOperation = 'register' | 'update';\n\nexport const HCS21MetadataPointerPattern = /^hcs:\\/\\/1\\/0\\.0\\.\\d+\\/\\d+$/;\n\nexport interface AdapterDeclaration {\n p: typeof HCS21_PROTOCOL;\n op: AdapterOperation;\n registry: AdapterPackageRegistry;\n pkg: string;\n name: string;\n kind: AdapterPlatformKind;\n metadata?: string;\n}\n\nexport interface AdapterMetadataRecord {\n name: string;\n pkg: string;\n registry: AdapterPackageRegistry;\n kind: AdapterPlatformKind;\n description?: string;\n website?: string;\n source?: string;\n contact?: string;\n capabilities?: string[];\n tags?: string[];\n [key: string]: unknown;\n}\n\nexport interface AdapterMetadataPointer {\n pointer: string;\n topicId: string;\n sequenceNumber: number;\n jobId?: string;\n transactionId?: string;\n}\n\nexport interface AdapterDeclarationEnvelope {\n declaration: AdapterDeclaration;\n consensusTimestamp?: string;\n sequenceNumber: number;\n payer?: string;\n}\n\nexport enum HCS21TopicType {\n REGISTRY = 0,\n}\n\nexport const adapterDeclarationSchema = z.object({\n p: z.literal(HCS21_PROTOCOL),\n op: z.enum(['register', 'update']),\n registry: z.enum(['npm', 'pypi']),\n pkg: z.string().min(1),\n name: z.string().min(1),\n kind: z.enum(['web2', 'web3']),\n metadata: z\n .string()\n .regex(\n HCS21MetadataPointerPattern,\n 'metadata must be an HCS-1 HRL (hcs://1/<topicId>/<sequence>)',\n )\n .optional(),\n});\n\nexport type AdapterDeclarationValidation = z.infer<\n typeof adapterDeclarationSchema\n>;\n"],"names":["HCS21TopicType"],"mappings":";AAEO,MAAM,iBAAiB;AACvB,MAAM,0BAA0B;AAMhC,MAAM,8BAA8B;AAyCpC,IAAK,mCAAAA,oBAAL;AACLA,kBAAAA,gBAAA,cAAW,CAAA,IAAX;AADU,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAIL,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,GAAG,EAAE,QAAQ,cAAc;AAAA,EAC3B,IAAI,EAAE,KAAK,CAAC,YAAY,QAAQ,CAAC;AAAA,EACjC,UAAU,EAAE,KAAK,CAAC,OAAO,MAAM,CAAC;AAAA,EAChC,KAAK,EAAE,SAAS,IAAI,CAAC;AAAA,EACrB,MAAM,EAAE,SAAS,IAAI,CAAC;AAAA,EACtB,MAAM,EAAE,KAAK,CAAC,QAAQ,MAAM,CAAC;AAAA,EAC7B,UAAU,EACP,OAAA,EACA;AAAA,IACC;AAAA,IACA;AAAA,EAAA,EAED,SAAA;AACL,CAAC;"}
|
|
@@ -1,83 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
constructor(config) {
|
|
7
|
-
super(config);
|
|
8
|
-
this.operatorId = AccountId.fromString(config.operatorId);
|
|
9
|
-
this.operatorCtx = createNodeOperatorContext({
|
|
10
|
-
network: this.network,
|
|
11
|
-
operatorId: this.operatorId,
|
|
12
|
-
operatorKey: config.operatorKey,
|
|
13
|
-
keyType: config.keyType,
|
|
14
|
-
mirrorNode: this.mirrorNode,
|
|
15
|
-
logger: this.logger,
|
|
16
|
-
client: this.network === "mainnet" ? Client.forMainnet() : Client.forTestnet()
|
|
17
|
-
});
|
|
18
|
-
this.client = this.operatorCtx.client;
|
|
19
|
-
}
|
|
20
|
-
getKeyType() {
|
|
21
|
-
return this.operatorCtx.keyType;
|
|
22
|
-
}
|
|
23
|
-
async close() {
|
|
24
|
-
try {
|
|
25
|
-
this.client.close();
|
|
26
|
-
} catch {
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Create a new base account with a newly generated ECDSA key and EVM alias.
|
|
31
|
-
*/
|
|
32
|
-
async createBaseAccount(options) {
|
|
33
|
-
const priv = PrivateKey.generateECDSA();
|
|
34
|
-
const pub = priv.publicKey;
|
|
35
|
-
const tx = buildHcs15BaseAccountCreateTx({
|
|
36
|
-
publicKey: pub,
|
|
37
|
-
initialBalance: new Hbar(options?.initialBalance ?? 10),
|
|
38
|
-
maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,
|
|
39
|
-
accountMemo: options?.accountMemo
|
|
40
|
-
});
|
|
41
|
-
const resp = await tx.execute(this.client);
|
|
42
|
-
const receipt = await resp.getReceipt(this.client);
|
|
43
|
-
if (!receipt.accountId) {
|
|
44
|
-
throw new Error("HCS-15 BASE_ACCOUNT_CREATE_FAILED");
|
|
45
|
-
}
|
|
46
|
-
const accountId = receipt.accountId.toString();
|
|
47
|
-
const evmAddress = `0x${pub.toEvmAddress()}`;
|
|
48
|
-
this.logger.info("Created HCS-15 base account", { accountId, evmAddress });
|
|
49
|
-
return {
|
|
50
|
-
accountId,
|
|
51
|
-
privateKey: priv,
|
|
52
|
-
privateKeyHex: priv.toStringRaw(),
|
|
53
|
-
publicKey: pub,
|
|
54
|
-
evmAddress,
|
|
55
|
-
receipt
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Create a Petal account that reuses the base account ECDSA key (no alias).
|
|
60
|
-
*/
|
|
61
|
-
async createPetalAccount(params) {
|
|
62
|
-
const baseKey = typeof params.basePrivateKey === "string" ? PrivateKey.fromStringECDSA(params.basePrivateKey) : params.basePrivateKey;
|
|
63
|
-
const pub = baseKey.publicKey;
|
|
64
|
-
const tx = buildHcs15PetalAccountCreateTx({
|
|
65
|
-
publicKey: pub,
|
|
66
|
-
initialBalance: new Hbar(params.initialBalance ?? 1),
|
|
67
|
-
maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,
|
|
68
|
-
accountMemo: params.accountMemo
|
|
69
|
-
});
|
|
70
|
-
const resp = await tx.execute(this.client);
|
|
71
|
-
const receipt = await resp.getReceipt(this.client);
|
|
72
|
-
if (!receipt.accountId) {
|
|
73
|
-
throw new Error("HCS-15 PETAL_ACCOUNT_CREATE_FAILED");
|
|
74
|
-
}
|
|
75
|
-
const accountId = receipt.accountId.toString();
|
|
76
|
-
this.logger.info("Created HCS-15 petal account", { accountId });
|
|
77
|
-
return { accountId, receipt };
|
|
1
|
+
class HCS21ValidationError extends Error {
|
|
2
|
+
constructor(message, code) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.code = code;
|
|
5
|
+
this.name = "HCS21ValidationError";
|
|
78
6
|
}
|
|
79
7
|
}
|
|
80
8
|
export {
|
|
81
|
-
|
|
9
|
+
HCS21ValidationError
|
|
82
10
|
};
|
|
83
11
|
//# sourceMappingURL=standards-sdk.es81.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es81.js","sources":["../../src/hcs-
|
|
1
|
+
{"version":3,"file":"standards-sdk.es81.js","sources":["../../src/hcs-21/errors.ts"],"sourcesContent":["export type HCS21ErrorCode =\n | 'size_exceeded'\n | 'invalid_payload'\n | 'missing_signature'\n | 'verification_failed';\n\nexport class HCS21ValidationError extends Error {\n constructor(\n message: string,\n public readonly code: HCS21ErrorCode,\n ) {\n super(message);\n this.name = 'HCS21ValidationError';\n }\n}\n"],"names":[],"mappings":"AAMO,MAAM,6BAA6B,MAAM;AAAA,EAC9C,YACE,SACgB,MAChB;AACA,UAAM,OAAO;AAFG,SAAA,OAAA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;"}
|
|
@@ -1,68 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,
|
|
26
|
-
accountMemo: options?.accountMemo
|
|
27
|
-
});
|
|
28
|
-
const frozen = await tx.freezeWithSigner(signer);
|
|
29
|
-
const res = await frozen.executeWithSigner(signer);
|
|
30
|
-
const receipt = await res.getReceiptWithSigner(signer);
|
|
31
|
-
const accountId = receipt?.accountId?.toString?.();
|
|
32
|
-
const evmAddress = `0x${pub.toEvmAddress()}`;
|
|
33
|
-
this.logger.info("Created HCS-15 base account (browser)", {
|
|
34
|
-
accountId,
|
|
35
|
-
evmAddress
|
|
36
|
-
});
|
|
37
|
-
return {
|
|
38
|
-
accountId,
|
|
39
|
-
privateKey: priv,
|
|
40
|
-
privateKeyHex: priv.toStringRaw(),
|
|
41
|
-
publicKey: pub,
|
|
42
|
-
evmAddress
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Create a petal account reusing a base ECDSA key, via wallet signer.
|
|
47
|
-
*/
|
|
48
|
-
async createPetalAccount(params) {
|
|
49
|
-
const signer = this.requireSigner();
|
|
50
|
-
const baseKey = typeof params.basePrivateKey === "string" ? PrivateKey.fromStringECDSA(params.basePrivateKey) : params.basePrivateKey;
|
|
51
|
-
const tx = buildHcs15PetalAccountCreateTx({
|
|
52
|
-
publicKey: baseKey.publicKey,
|
|
53
|
-
initialBalance: new Hbar(params.initialBalance ?? 1),
|
|
54
|
-
maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,
|
|
55
|
-
accountMemo: params.accountMemo
|
|
56
|
-
});
|
|
57
|
-
const frozen = await tx.freezeWithSigner(signer);
|
|
58
|
-
const res = await frozen.executeWithSigner(signer);
|
|
59
|
-
const receipt = await res.getReceiptWithSigner(signer);
|
|
60
|
-
const accountId = receipt?.accountId?.toString?.();
|
|
61
|
-
this.logger.info("Created HCS-15 petal account (browser)", { accountId });
|
|
62
|
-
return { accountId };
|
|
63
|
-
}
|
|
1
|
+
import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.es136.js";
|
|
2
|
+
import { HCS21TopicType } from "./standards-sdk.es80.js";
|
|
3
|
+
function buildHcs21RegistryMemo(params) {
|
|
4
|
+
const indexed = params.indexed ?? 0;
|
|
5
|
+
return `hcs-21:${indexed}:${params.ttl}:${HCS21TopicType.REGISTRY}`;
|
|
6
|
+
}
|
|
7
|
+
function buildHcs21CreateRegistryTx(params) {
|
|
8
|
+
const memo = buildHcs21RegistryMemo({
|
|
9
|
+
ttl: params.ttl,
|
|
10
|
+
indexed: params.indexed
|
|
11
|
+
});
|
|
12
|
+
return buildTopicCreateTx({
|
|
13
|
+
memo,
|
|
14
|
+
adminKey: params.adminKey,
|
|
15
|
+
submitKey: params.submitKey,
|
|
16
|
+
operatorPublicKey: params.operatorPublicKey
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function buildHcs21MessageTx(params) {
|
|
20
|
+
return buildMessageTx({
|
|
21
|
+
topicId: params.topicId,
|
|
22
|
+
message: JSON.stringify(params.declaration),
|
|
23
|
+
transactionMemo: params.transactionMemo
|
|
24
|
+
});
|
|
64
25
|
}
|
|
65
26
|
export {
|
|
66
|
-
|
|
27
|
+
buildHcs21CreateRegistryTx,
|
|
28
|
+
buildHcs21MessageTx,
|
|
29
|
+
buildHcs21RegistryMemo
|
|
67
30
|
};
|
|
68
31
|
//# sourceMappingURL=standards-sdk.es82.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es82.js","sources":["../../src/hcs-
|
|
1
|
+
{"version":3,"file":"standards-sdk.es82.js","sources":["../../src/hcs-21/tx.ts"],"sourcesContent":["import {\n PublicKey,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n} from '@hashgraph/sdk';\nimport {\n buildTopicCreateTx,\n buildMessageTx,\n MaybeKey,\n} from '../common/tx/tx-utils';\nimport { AdapterDeclaration, HCS21TopicType } from './types';\n\nexport function buildHcs21RegistryMemo(params: {\n ttl: number;\n indexed?: 0 | 1;\n}): string {\n const indexed = params.indexed ?? 0;\n return `hcs-21:${indexed}:${params.ttl}:${HCS21TopicType.REGISTRY}`;\n}\n\nexport function buildHcs21CreateRegistryTx(params: {\n ttl: number;\n indexed?: 0 | 1;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n operatorPublicKey?: PublicKey;\n}): TopicCreateTransaction {\n const memo = buildHcs21RegistryMemo({\n ttl: params.ttl,\n indexed: params.indexed,\n });\n return buildTopicCreateTx({\n memo,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: params.operatorPublicKey,\n });\n}\n\nexport function buildHcs21MessageTx(params: {\n topicId: string;\n declaration: AdapterDeclaration;\n transactionMemo?: string;\n}): TopicMessageSubmitTransaction {\n return buildMessageTx({\n topicId: params.topicId,\n message: JSON.stringify(params.declaration),\n transactionMemo: params.transactionMemo,\n });\n}\n"],"names":[],"mappings":";;AAYO,SAAS,uBAAuB,QAG5B;AACT,QAAM,UAAU,OAAO,WAAW;AAClC,SAAO,UAAU,OAAO,IAAI,OAAO,GAAG,IAAI,eAAe,QAAQ;AACnE;AAEO,SAAS,2BAA2B,QAMhB;AACzB,QAAM,OAAO,uBAAuB;AAAA,IAClC,KAAK,OAAO;AAAA,IACZ,SAAS,OAAO;AAAA,EAAA,CACjB;AACD,SAAO,mBAAmB;AAAA,IACxB;AAAA,IACA,UAAU,OAAO;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,mBAAmB,OAAO;AAAA,EAAA,CAC3B;AACH;AAEO,SAAS,oBAAoB,QAIF;AAChC,SAAO,eAAe;AAAA,IACpB,SAAS,OAAO;AAAA,IAChB,SAAS,KAAK,UAAU,OAAO,WAAW;AAAA,IAC1C,iBAAiB,OAAO;AAAA,EAAA,CACzB;AACH;"}
|
|
@@ -1,33 +1,77 @@
|
|
|
1
|
-
import { HederaMirrorNode } from "./standards-sdk.
|
|
2
|
-
import { Logger } from "./standards-sdk.
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
});
|
|
1
|
+
import { HederaMirrorNode } from "./standards-sdk.es126.js";
|
|
2
|
+
import { Logger } from "./standards-sdk.es105.js";
|
|
3
|
+
import { HCS21ValidationError } from "./standards-sdk.es81.js";
|
|
4
|
+
import { HCS21_PROTOCOL, adapterDeclarationSchema, HCS21_MAX_MESSAGE_BYTES } from "./standards-sdk.es80.js";
|
|
5
|
+
class HCS21BaseClient {
|
|
6
|
+
constructor(params) {
|
|
7
|
+
this.network = params.network;
|
|
8
|
+
this.logger = params.logger || new Logger({ level: "info", module: "HCS-21" });
|
|
10
9
|
this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {
|
|
11
|
-
customUrl:
|
|
10
|
+
customUrl: params.mirrorNodeUrl
|
|
12
11
|
});
|
|
13
12
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
buildDeclaration(params) {
|
|
14
|
+
const declaration = {
|
|
15
|
+
p: HCS21_PROTOCOL,
|
|
16
|
+
op: params.op,
|
|
17
|
+
registry: params.registry,
|
|
18
|
+
pkg: params.pkg,
|
|
19
|
+
name: params.name,
|
|
20
|
+
kind: params.kind,
|
|
21
|
+
metadata: params.metadata
|
|
22
|
+
};
|
|
23
|
+
return this.validateDeclaration(declaration);
|
|
24
|
+
}
|
|
25
|
+
validateDeclaration(input) {
|
|
18
26
|
try {
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
const payload = typeof input === "string" ? JSON.parse(input) : input;
|
|
28
|
+
const parsed = adapterDeclarationSchema.parse(
|
|
29
|
+
payload
|
|
30
|
+
);
|
|
31
|
+
this.assertSizeLimit(parsed);
|
|
32
|
+
return parsed;
|
|
33
|
+
} catch (error) {
|
|
34
|
+
const message = error instanceof Error ? error.message : "Invalid adapter declaration";
|
|
35
|
+
throw new HCS21ValidationError(message, "invalid_payload");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async fetchDeclarations(topicId, options) {
|
|
39
|
+
const rawMessages = await this.mirrorNode.getTopicMessages(topicId, {
|
|
40
|
+
limit: options?.limit,
|
|
41
|
+
order: options?.order
|
|
42
|
+
});
|
|
43
|
+
const envelopes = [];
|
|
44
|
+
for (const message of rawMessages) {
|
|
45
|
+
if (message.p !== HCS21_PROTOCOL) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const declaration = this.validateDeclaration(message);
|
|
50
|
+
envelopes.push({
|
|
51
|
+
declaration,
|
|
52
|
+
consensusTimestamp: message.consensus_timestamp,
|
|
53
|
+
sequenceNumber: message.sequence_number,
|
|
54
|
+
payer: message.payer
|
|
55
|
+
});
|
|
56
|
+
} catch (error) {
|
|
57
|
+
const detail = error instanceof Error ? error.message : "unknown error";
|
|
58
|
+
this.logger.warn(`Skipping invalid HCS-21 message: ${detail}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return envelopes;
|
|
62
|
+
}
|
|
63
|
+
assertSizeLimit(payload) {
|
|
64
|
+
const json = JSON.stringify(payload);
|
|
65
|
+
const bytes = Buffer.byteLength(json, "utf8");
|
|
66
|
+
if (bytes > HCS21_MAX_MESSAGE_BYTES) {
|
|
67
|
+
throw new HCS21ValidationError(
|
|
68
|
+
`HCS-21 payload exceeds 1024 bytes (${bytes})`,
|
|
69
|
+
"size_exceeded"
|
|
70
|
+
);
|
|
27
71
|
}
|
|
28
72
|
}
|
|
29
73
|
}
|
|
30
74
|
export {
|
|
31
|
-
|
|
75
|
+
HCS21BaseClient
|
|
32
76
|
};
|
|
33
77
|
//# sourceMappingURL=standards-sdk.es83.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es83.js","sources":["../../src/hcs-
|
|
1
|
+
{"version":3,"file":"standards-sdk.es83.js","sources":["../../src/hcs-21/base-client.ts"],"sourcesContent":["import { HederaMirrorNode } from '../services/mirror-node';\nimport { ILogger, Logger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\nimport { HCS21ValidationError } from './errors';\nimport {\n AdapterDeclaration,\n AdapterDeclarationEnvelope,\n AdapterOperation,\n AdapterPackageRegistry,\n AdapterPlatformKind,\n HCS21_MAX_MESSAGE_BYTES,\n HCS21_PROTOCOL,\n adapterDeclarationSchema,\n} from './types';\n\nexport interface BuildDeclarationParams {\n op: AdapterOperation;\n registry: AdapterPackageRegistry;\n pkg: string;\n name: string;\n kind: AdapterPlatformKind;\n metadata?: string;\n}\n\nexport interface FetchDeclarationsOptions {\n limit?: number;\n order?: 'asc' | 'desc';\n}\n\nexport class HCS21BaseClient {\n protected readonly network: NetworkType;\n protected readonly logger: ILogger;\n protected readonly mirrorNode: HederaMirrorNode;\n\n constructor(params: {\n network: NetworkType;\n logger?: ILogger;\n mirrorNodeUrl?: string;\n }) {\n this.network = params.network;\n this.logger =\n params.logger || new Logger({ level: 'info', module: 'HCS-21' });\n this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {\n customUrl: params.mirrorNodeUrl,\n });\n }\n\n buildDeclaration(params: BuildDeclarationParams): AdapterDeclaration {\n const declaration: AdapterDeclaration = {\n p: HCS21_PROTOCOL,\n op: params.op,\n registry: params.registry,\n pkg: params.pkg,\n name: params.name,\n kind: params.kind,\n metadata: params.metadata,\n };\n\n return this.validateDeclaration(declaration);\n }\n\n validateDeclaration(input: unknown): AdapterDeclaration {\n try {\n const payload = typeof input === 'string' ? JSON.parse(input) : input;\n const parsed = adapterDeclarationSchema.parse(\n payload,\n ) as AdapterDeclaration;\n this.assertSizeLimit(parsed);\n return parsed;\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Invalid adapter declaration';\n throw new HCS21ValidationError(message, 'invalid_payload');\n }\n }\n\n async fetchDeclarations(\n topicId: string,\n options?: FetchDeclarationsOptions,\n ): Promise<AdapterDeclarationEnvelope[]> {\n const rawMessages = await this.mirrorNode.getTopicMessages(topicId, {\n limit: options?.limit,\n order: options?.order,\n });\n\n const envelopes: AdapterDeclarationEnvelope[] = [];\n\n for (const message of rawMessages) {\n if (message.p !== HCS21_PROTOCOL) {\n continue;\n }\n\n try {\n const declaration = this.validateDeclaration(message);\n envelopes.push({\n declaration,\n consensusTimestamp: message.consensus_timestamp,\n sequenceNumber: message.sequence_number,\n payer: message.payer,\n });\n } catch (error) {\n const detail = error instanceof Error ? error.message : 'unknown error';\n this.logger.warn(`Skipping invalid HCS-21 message: ${detail}`);\n }\n }\n\n return envelopes;\n }\n\n protected assertSizeLimit(payload: AdapterDeclaration): void {\n const json = JSON.stringify(payload);\n const bytes = Buffer.byteLength(json, 'utf8');\n if (bytes > HCS21_MAX_MESSAGE_BYTES) {\n throw new HCS21ValidationError(\n `HCS-21 payload exceeds 1024 bytes (${bytes})`,\n 'size_exceeded',\n );\n }\n }\n}\n"],"names":[],"mappings":";;;;AA6BO,MAAM,gBAAgB;AAAA,EAK3B,YAAY,QAIT;AACD,SAAK,UAAU,OAAO;AACtB,SAAK,SACH,OAAO,UAAU,IAAI,OAAO,EAAE,OAAO,QAAQ,QAAQ,UAAU;AACjE,SAAK,aAAa,IAAI,iBAAiB,KAAK,SAAS,KAAK,QAAQ;AAAA,MAChE,WAAW,OAAO;AAAA,IAAA,CACnB;AAAA,EACH;AAAA,EAEA,iBAAiB,QAAoD;AACnE,UAAM,cAAkC;AAAA,MACtC,GAAG;AAAA,MACH,IAAI,OAAO;AAAA,MACX,UAAU,OAAO;AAAA,MACjB,KAAK,OAAO;AAAA,MACZ,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,UAAU,OAAO;AAAA,IAAA;AAGnB,WAAO,KAAK,oBAAoB,WAAW;AAAA,EAC7C;AAAA,EAEA,oBAAoB,OAAoC;AACtD,QAAI;AACF,YAAM,UAAU,OAAO,UAAU,WAAW,KAAK,MAAM,KAAK,IAAI;AAChE,YAAM,SAAS,yBAAyB;AAAA,QACtC;AAAA,MAAA;AAEF,WAAK,gBAAgB,MAAM;AAC3B,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU;AAC3C,YAAM,IAAI,qBAAqB,SAAS,iBAAiB;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,SACA,SACuC;AACvC,UAAM,cAAc,MAAM,KAAK,WAAW,iBAAiB,SAAS;AAAA,MAClE,OAAO,SAAS;AAAA,MAChB,OAAO,SAAS;AAAA,IAAA,CACjB;AAED,UAAM,YAA0C,CAAA;AAEhD,eAAW,WAAW,aAAa;AACjC,UAAI,QAAQ,MAAM,gBAAgB;AAChC;AAAA,MACF;AAEA,UAAI;AACF,cAAM,cAAc,KAAK,oBAAoB,OAAO;AACpD,kBAAU,KAAK;AAAA,UACb;AAAA,UACA,oBAAoB,QAAQ;AAAA,UAC5B,gBAAgB,QAAQ;AAAA,UACxB,OAAO,QAAQ;AAAA,QAAA,CAChB;AAAA,MACH,SAAS,OAAO;AACd,cAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU;AACxD,aAAK,OAAO,KAAK,oCAAoC,MAAM,EAAE;AAAA,MAC/D;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEU,gBAAgB,SAAmC;AAC3D,UAAM,OAAO,KAAK,UAAU,OAAO;AACnC,UAAM,QAAQ,OAAO,WAAW,MAAM,MAAM;AAC5C,QAAI,QAAQ,yBAAyB;AACnC,YAAM,IAAI;AAAA,QACR,sCAAsC,KAAK;AAAA,QAC3C;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AACF;"}
|
|
@@ -1,28 +1,170 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
this.
|
|
20
|
-
|
|
1
|
+
import { Client, Status } from "@hashgraph/sdk";
|
|
2
|
+
import { createNodeOperatorContext } from "./standards-sdk.es135.js";
|
|
3
|
+
import { Logger } from "./standards-sdk.es105.js";
|
|
4
|
+
import { HCS21BaseClient } from "./standards-sdk.es83.js";
|
|
5
|
+
import { HCS21MetadataPointerPattern } from "./standards-sdk.es80.js";
|
|
6
|
+
import { buildHcs21CreateRegistryTx, buildHcs21MessageTx } from "./standards-sdk.es82.js";
|
|
7
|
+
import { HCS21ValidationError } from "./standards-sdk.es81.js";
|
|
8
|
+
import { inscribe } from "./standards-sdk.es124.js";
|
|
9
|
+
import { getTopicId } from "./standards-sdk.es114.js";
|
|
10
|
+
class HCS21Client extends HCS21BaseClient {
|
|
11
|
+
constructor(config) {
|
|
12
|
+
const logger = config.logger || new Logger({ level: config.logLevel || "info", module: "HCS-21" });
|
|
13
|
+
super({
|
|
14
|
+
network: config.network,
|
|
15
|
+
logger,
|
|
16
|
+
mirrorNodeUrl: config.mirrorNodeUrl
|
|
17
|
+
});
|
|
18
|
+
const baseClient = config.network === "mainnet" ? Client.forMainnet() : Client.forTestnet();
|
|
19
|
+
this.operatorCtx = createNodeOperatorContext({
|
|
20
|
+
network: config.network,
|
|
21
|
+
operatorId: config.operatorId,
|
|
22
|
+
operatorKey: config.operatorKey,
|
|
23
|
+
keyType: config.keyType,
|
|
24
|
+
mirrorNode: this.mirrorNode,
|
|
25
|
+
logger: this.logger,
|
|
26
|
+
client: baseClient
|
|
27
|
+
});
|
|
28
|
+
void this.operatorCtx.ensureInitialized();
|
|
29
|
+
this.client = this.operatorCtx.client;
|
|
30
|
+
}
|
|
31
|
+
async inscribeMetadata(params) {
|
|
32
|
+
await this.operatorCtx.ensureInitialized();
|
|
33
|
+
const metadataJson = JSON.stringify(params.metadata, null, 2);
|
|
34
|
+
const buffer = Buffer.from(metadataJson, "utf8");
|
|
35
|
+
const inscriptionOptions = {
|
|
36
|
+
waitForConfirmation: true,
|
|
37
|
+
...params.inscriptionOptions || {},
|
|
38
|
+
metadata: {
|
|
39
|
+
...params.inscriptionOptions?.metadata || {},
|
|
40
|
+
...params.metadata
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const inscription = await inscribe(
|
|
44
|
+
{
|
|
45
|
+
type: "buffer",
|
|
46
|
+
buffer,
|
|
47
|
+
fileName: params.fileName || `hcs21-adapter-metadata-${Date.now()}.json`,
|
|
48
|
+
mimeType: "application/json"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
accountId: this.operatorCtx.operatorId.toString(),
|
|
52
|
+
privateKey: this.operatorCtx.operatorKey,
|
|
53
|
+
network: this.network
|
|
54
|
+
},
|
|
55
|
+
inscriptionOptions
|
|
56
|
+
);
|
|
57
|
+
if (!inscription.confirmed || !inscription.inscription) {
|
|
58
|
+
throw new HCS21ValidationError(
|
|
59
|
+
"Failed to inscribe adapter metadata",
|
|
60
|
+
"invalid_payload"
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
const topicId = inscription.inscription.jsonTopicId || inscription.inscription.topic_id || getTopicId(inscription.inscription);
|
|
64
|
+
if (!topicId) {
|
|
65
|
+
throw new HCS21ValidationError(
|
|
66
|
+
"Metadata inscription did not return a topic ID",
|
|
67
|
+
"invalid_payload"
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
const rawSequence = inscription.inscription.sequence_number ?? inscription.inscription.sequenceNumber;
|
|
71
|
+
const pointerResult = await this.resolveMetadataPointer(
|
|
72
|
+
topicId,
|
|
73
|
+
rawSequence
|
|
74
|
+
);
|
|
75
|
+
const resultDetails = inscription.result && "jobId" in inscription.result ? {
|
|
76
|
+
jobId: inscription.result.jobId,
|
|
77
|
+
transactionId: inscription.result.transactionId
|
|
78
|
+
} : {};
|
|
79
|
+
return {
|
|
80
|
+
pointer: pointerResult.pointer,
|
|
81
|
+
topicId,
|
|
82
|
+
sequenceNumber: pointerResult.sequenceNumber,
|
|
83
|
+
...resultDetails
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
async createRegistryTopic(params) {
|
|
87
|
+
await this.operatorCtx.ensureInitialized();
|
|
88
|
+
const tx = buildHcs21CreateRegistryTx({
|
|
89
|
+
ttl: params.ttl,
|
|
90
|
+
indexed: params.indexed,
|
|
91
|
+
adminKey: params.adminKey,
|
|
92
|
+
submitKey: params.submitKey,
|
|
93
|
+
operatorPublicKey: this.operatorCtx.operatorKey.publicKey
|
|
94
|
+
});
|
|
95
|
+
if (params.transactionMemo) {
|
|
96
|
+
tx.setTransactionMemo(params.transactionMemo);
|
|
97
|
+
}
|
|
98
|
+
const response = await tx.execute(this.client);
|
|
99
|
+
const receipt = await response.getReceipt(this.client);
|
|
100
|
+
if (receipt.status !== Status.Success || !receipt.topicId) {
|
|
101
|
+
throw new HCS21ValidationError(
|
|
102
|
+
"Failed to create HCS-21 registry topic",
|
|
103
|
+
"invalid_payload"
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
return receipt.topicId.toString();
|
|
107
|
+
}
|
|
108
|
+
async publishDeclaration(params) {
|
|
109
|
+
await this.operatorCtx.ensureInitialized();
|
|
110
|
+
const declaration = this.normalizeDeclarationInput(params.declaration);
|
|
111
|
+
const tx = buildHcs21MessageTx({
|
|
112
|
+
topicId: params.topicId,
|
|
113
|
+
declaration,
|
|
114
|
+
transactionMemo: params.transactionMemo
|
|
115
|
+
});
|
|
116
|
+
const response = await tx.execute(this.client);
|
|
117
|
+
const receipt = await response.getReceipt(this.client);
|
|
118
|
+
if (receipt.status !== Status.Success) {
|
|
119
|
+
throw new HCS21ValidationError(
|
|
120
|
+
"Failed to submit HCS-21 declaration",
|
|
121
|
+
"invalid_payload"
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
sequenceNumber: receipt.topicSequenceNumber?.toNumber(),
|
|
126
|
+
transactionId: response.transactionId.toString()
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
normalizeDeclarationInput(declaration) {
|
|
130
|
+
if ("p" in declaration) {
|
|
131
|
+
return this.validateDeclaration(declaration);
|
|
132
|
+
}
|
|
133
|
+
return this.buildDeclaration(declaration);
|
|
134
|
+
}
|
|
135
|
+
async resolveMetadataPointer(topicId, sequence) {
|
|
136
|
+
const numericSequence = typeof sequence === "string" ? Number(sequence) : sequence;
|
|
137
|
+
let resolvedSequence = typeof numericSequence === "number" && Number.isFinite(numericSequence) ? numericSequence : void 0;
|
|
138
|
+
if (!resolvedSequence) {
|
|
139
|
+
const [latest] = await this.mirrorNode.getTopicMessages(topicId, {
|
|
140
|
+
limit: 1,
|
|
141
|
+
order: "desc"
|
|
142
|
+
});
|
|
143
|
+
if (!latest || !latest.sequence_number) {
|
|
144
|
+
throw new HCS21ValidationError(
|
|
145
|
+
"Unable to resolve metadata sequence number",
|
|
146
|
+
"invalid_payload"
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
resolvedSequence = Number(latest.sequence_number);
|
|
150
|
+
}
|
|
151
|
+
if (!Number.isFinite(resolvedSequence)) {
|
|
152
|
+
throw new HCS21ValidationError(
|
|
153
|
+
"Invalid metadata sequence number",
|
|
154
|
+
"invalid_payload"
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
const pointer = `hcs://1/${topicId}/${resolvedSequence}`;
|
|
158
|
+
if (!HCS21MetadataPointerPattern.test(pointer)) {
|
|
159
|
+
throw new HCS21ValidationError(
|
|
160
|
+
"Metadata pointer format is invalid",
|
|
161
|
+
"invalid_payload"
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
return { pointer, sequenceNumber: resolvedSequence };
|
|
21
165
|
}
|
|
22
166
|
}
|
|
23
167
|
export {
|
|
24
|
-
|
|
25
|
-
FloraOperation,
|
|
26
|
-
FloraTopicType
|
|
168
|
+
HCS21Client
|
|
27
169
|
};
|
|
28
170
|
//# sourceMappingURL=standards-sdk.es84.js.map
|