@hark-protocol/protocol 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 (54) hide show
  1. package/README.md +21 -0
  2. package/dist/constants.d.ts +25 -0
  3. package/dist/constants.d.ts.map +1 -0
  4. package/dist/constants.js +24 -0
  5. package/dist/constants.js.map +1 -0
  6. package/dist/hcs14.d.ts +32 -0
  7. package/dist/hcs14.d.ts.map +1 -0
  8. package/dist/hcs14.js +45 -0
  9. package/dist/hcs14.js.map +1 -0
  10. package/dist/index.d.ts +12 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +12 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/pii.d.ts +2 -0
  15. package/dist/pii.d.ts.map +1 -0
  16. package/dist/pii.js +12 -0
  17. package/dist/pii.js.map +1 -0
  18. package/dist/schemas/assurance.d.ts +23 -0
  19. package/dist/schemas/assurance.d.ts.map +1 -0
  20. package/dist/schemas/assurance.js +10 -0
  21. package/dist/schemas/assurance.js.map +1 -0
  22. package/dist/schemas/campaign.d.ts +177 -0
  23. package/dist/schemas/campaign.d.ts.map +1 -0
  24. package/dist/schemas/campaign.js +47 -0
  25. package/dist/schemas/campaign.js.map +1 -0
  26. package/dist/schemas/delivery.d.ts +162 -0
  27. package/dist/schemas/delivery.d.ts.map +1 -0
  28. package/dist/schemas/delivery.js +35 -0
  29. package/dist/schemas/delivery.js.map +1 -0
  30. package/dist/schemas/intent.d.ts +244 -0
  31. package/dist/schemas/intent.d.ts.map +1 -0
  32. package/dist/schemas/intent.js +63 -0
  33. package/dist/schemas/intent.js.map +1 -0
  34. package/dist/schemas/opportunity.d.ts +177 -0
  35. package/dist/schemas/opportunity.d.ts.map +1 -0
  36. package/dist/schemas/opportunity.js +36 -0
  37. package/dist/schemas/opportunity.js.map +1 -0
  38. package/dist/schemas/publisher.d.ts +56 -0
  39. package/dist/schemas/publisher.d.ts.map +1 -0
  40. package/dist/schemas/publisher.js +21 -0
  41. package/dist/schemas/publisher.js.map +1 -0
  42. package/dist/schemas/reach.d.ts +100 -0
  43. package/dist/schemas/reach.d.ts.map +1 -0
  44. package/dist/schemas/reach.js +27 -0
  45. package/dist/schemas/reach.js.map +1 -0
  46. package/dist/taxonomy.d.ts +22 -0
  47. package/dist/taxonomy.d.ts.map +1 -0
  48. package/dist/taxonomy.js +81 -0
  49. package/dist/taxonomy.js.map +1 -0
  50. package/dist/tinybar.d.ts +4 -0
  51. package/dist/tinybar.d.ts.map +1 -0
  52. package/dist/tinybar.js +8 -0
  53. package/dist/tinybar.js.map +1 -0
  54. package/package.json +42 -0
package/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # @hark-protocol/protocol
2
+
3
+ Shared Zod schemas, taxonomy, tinybar helpers, and constants for [Hark
4
+ Protocol](https://github.com/SiddharthaMadhav/ETHOnline-2026) - an open
5
+ intent-advertising protocol with x402 machine payments on Hedera.
6
+
7
+ Publishers and advertising agents both build on these types: `Publisher`,
8
+ `Placement`, `HarkIntent`, `Campaign`, `HarkOpportunity`, `Delivery`, and the
9
+ `POST /v1/reach` request/response shapes, plus a small canonical topic
10
+ taxonomy (`isSameOrDescendant`, `topicDistance`).
11
+
12
+ ```ts
13
+ import { createIntentInputSchema, isSameOrDescendant } from "@hark-protocol/protocol";
14
+ ```
15
+
16
+ An optional `@hark-protocol/protocol/hcs14` subpath computes a
17
+ syntactically-valid HCS-14 "Universal Agent ID" - server-only (uses
18
+ `node:crypto`), kept out of the main browser-safe barrel on purpose.
19
+
20
+ Part of the [Hark Protocol](https://github.com/SiddharthaMadhav/ETHOnline-2026)
21
+ monorepo. See that repo for the full protocol spec, API, and demo apps.
@@ -0,0 +1,25 @@
1
+ /** Public ID prefixes per CLAUDE.md section 50. */
2
+ export declare const ID_PREFIX: {
3
+ readonly publisher: "pub_";
4
+ readonly placement: "plc_";
5
+ readonly intent: "int_";
6
+ readonly opportunity: "opp_";
7
+ readonly agent: "agt_";
8
+ readonly campaign: "cmp_";
9
+ readonly delivery: "del_";
10
+ readonly payment: "pay_";
11
+ };
12
+ export type IdKind = keyof typeof ID_PREFIX;
13
+ /** Intent TTL rules per CLAUDE.md section 9. */
14
+ export declare const INTENT_DEFAULT_TTL_SECONDS: number;
15
+ export declare const INTENT_MAX_TTL_SECONDS: number;
16
+ /** Opportunity TTL per CLAUDE.md section 13. */
17
+ export declare const OPPORTUNITY_TTL_SECONDS: number;
18
+ /** Semantic summary max length per CLAUDE.md section 9. */
19
+ export declare const SEMANTIC_SUMMARY_MAX_LENGTH = 280;
20
+ /** Payment network/asset defaults per CLAUDE.md section 5. */
21
+ export declare const HEDERA_TESTNET_NETWORK: "hedera:testnet";
22
+ export declare const HBAR_ASSET_ID: "0.0.0";
23
+ export declare const HBAR_DECIMALS = 8;
24
+ export declare const DEFAULT_REACH_PRICE_TINYBAR = "100000";
25
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,eAAO,MAAM,SAAS;;;;;;;;;CASZ,CAAC;AAEX,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,SAAS,CAAC;AAE5C,gDAAgD;AAChD,eAAO,MAAM,0BAA0B,QAAoB,CAAC;AAC5D,eAAO,MAAM,sBAAsB,QAAoB,CAAC;AAExD,gDAAgD;AAChD,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,2DAA2D;AAC3D,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,EAAG,gBAAyB,CAAC;AAChE,eAAO,MAAM,aAAa,EAAG,OAAgB,CAAC;AAC9C,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,2BAA2B,WAAW,CAAC"}
@@ -0,0 +1,24 @@
1
+ /** Public ID prefixes per CLAUDE.md section 50. */
2
+ export const ID_PREFIX = {
3
+ publisher: "pub_",
4
+ placement: "plc_",
5
+ intent: "int_",
6
+ opportunity: "opp_",
7
+ agent: "agt_",
8
+ campaign: "cmp_",
9
+ delivery: "del_",
10
+ payment: "pay_",
11
+ };
12
+ /** Intent TTL rules per CLAUDE.md section 9. */
13
+ export const INTENT_DEFAULT_TTL_SECONDS = 30 * 24 * 60 * 60; // 30 days
14
+ export const INTENT_MAX_TTL_SECONDS = 90 * 24 * 60 * 60; // 90 days
15
+ /** Opportunity TTL per CLAUDE.md section 13. */
16
+ export const OPPORTUNITY_TTL_SECONDS = 5 * 60; // 5 minutes
17
+ /** Semantic summary max length per CLAUDE.md section 9. */
18
+ export const SEMANTIC_SUMMARY_MAX_LENGTH = 280;
19
+ /** Payment network/asset defaults per CLAUDE.md section 5. */
20
+ export const HEDERA_TESTNET_NETWORK = "hedera:testnet";
21
+ export const HBAR_ASSET_ID = "0.0.0";
22
+ export const HBAR_DECIMALS = 8;
23
+ export const DEFAULT_REACH_PRICE_TINYBAR = "100000";
24
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,MAAM;IACd,WAAW,EAAE,MAAM;IACnB,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,MAAM;CACP,CAAC;AAIX,gDAAgD;AAChD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU;AACvE,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU;AAEnE,gDAAgD;AAChD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,YAAY;AAE3D,2DAA2D;AAC3D,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAE/C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAyB,CAAC;AAChE,MAAM,CAAC,MAAM,aAAa,GAAG,OAAgB,CAAC;AAC9C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,2BAA2B,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Computes a syntactically-valid HCS-14 ("Universal Agent ID") identifier,
3
+ * per the published grammar at hol.org/docs/standards/hcs-14:
4
+ *
5
+ * uaid:aid:{base58(sha384(canonicalJson))};uid=...;registry=...;proto=...;nativeId=...
6
+ *
7
+ * CLAUDE.md section 36 deliberately treats HCS-14 as optional and
8
+ * non-blocking, since it's still a draft standard with no stable public
9
+ * registry to integrate against. This computes a correctly-shaped id
10
+ * locally - it is NOT registered with, or resolvable via, any live
11
+ * Hashgraph Online (or other) HCS-14 registry. `registry`/`protocol` below
12
+ * are Hark's own self-declared namespace values, not officially assigned
13
+ * codes.
14
+ *
15
+ * Deliberately server-only (uses node:crypto) - imported via the
16
+ * `@hark-protocol/protocol/hcs14` subpath, not the package's main barrel, so
17
+ * it never ends up in a browser bundle (packages/protocol's main export is
18
+ * consumed by apps/web client components too).
19
+ */
20
+ export type Hcs14AgentInput = {
21
+ /** Stable identifier within the registry, e.g. the agent's slug. */
22
+ uid: string;
23
+ name: string;
24
+ /** CAIP-10-shaped native chain identifier, e.g. "hedera:testnet:0.0.12345". */
25
+ nativeId: string;
26
+ registry?: string;
27
+ protocol?: string;
28
+ version?: string;
29
+ skills?: string[];
30
+ };
31
+ export declare function computeHcs14Id(input: Hcs14AgentInput): string;
32
+ //# sourceMappingURL=hcs14.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcs14.d.ts","sourceRoot":"","sources":["../src/hcs14.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAkCF,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAkB7D"}
package/dist/hcs14.js ADDED
@@ -0,0 +1,45 @@
1
+ import { createHash } from "node:crypto";
2
+ const BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
3
+ function base58Encode(bytes) {
4
+ const digits = [0];
5
+ for (const byte of bytes) {
6
+ let carry = byte;
7
+ for (let i = 0; i < digits.length; i += 1) {
8
+ carry += digits[i] * 256;
9
+ digits[i] = carry % 58;
10
+ carry = Math.floor(carry / 58);
11
+ }
12
+ while (carry > 0) {
13
+ digits.push(carry % 58);
14
+ carry = Math.floor(carry / 58);
15
+ }
16
+ }
17
+ let leadingZeros = 0;
18
+ for (const byte of bytes) {
19
+ if (byte !== 0)
20
+ break;
21
+ leadingZeros += 1;
22
+ }
23
+ return (BASE58_ALPHABET[0].repeat(leadingZeros) +
24
+ digits
25
+ .reverse()
26
+ .map((digit) => BASE58_ALPHABET[digit])
27
+ .join(""));
28
+ }
29
+ export function computeHcs14Id(input) {
30
+ const registry = input.registry ?? "hark-protocol";
31
+ const protocol = input.protocol ?? "hark-x402";
32
+ const version = input.version ?? "0.1.0";
33
+ const canonical = JSON.stringify({
34
+ registry,
35
+ name: input.name,
36
+ version,
37
+ protocol,
38
+ nativeId: input.nativeId,
39
+ skills: input.skills ?? [],
40
+ });
41
+ const hash = createHash("sha384").update(canonical).digest();
42
+ const id = base58Encode(hash);
43
+ return `uaid:aid:${id};uid=${input.uid};registry=${registry};proto=${protocol};nativeId=${input.nativeId}`;
44
+ }
45
+ //# sourceMappingURL=hcs14.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hcs14.js","sourceRoot":"","sources":["../src/hcs14.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiCzC,MAAM,eAAe,GAAG,4DAA4D,CAAC;AAErF,SAAS,YAAY,CAAC,KAAiB;IACrC,MAAM,MAAM,GAAa,CAAC,CAAC,CAAC,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,KAAK,IAAI,MAAM,CAAC,CAAC,CAAE,GAAG,GAAG,CAAC;YAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YACvB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YACxB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,CAAC;YAAE,MAAM;QACtB,YAAY,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CACL,eAAe,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,YAAY,CAAC;QACxC,MAAM;aACH,OAAO,EAAE;aACT,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAE,CAAC;aACvC,IAAI,CAAC,EAAE,CAAC,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,eAAe,CAAC;IACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC;IAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,QAAQ;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO;QACP,QAAQ;QACR,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;KAC3B,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7D,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAE9B,OAAO,YAAY,EAAE,QAAQ,KAAK,CAAC,GAAG,aAAa,QAAQ,UAAU,QAAQ,aAAa,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC7G,CAAC"}
@@ -0,0 +1,12 @@
1
+ export * from "./constants.js";
2
+ export * from "./taxonomy.js";
3
+ export * from "./pii.js";
4
+ export * from "./tinybar.js";
5
+ export * from "./schemas/assurance.js";
6
+ export * from "./schemas/publisher.js";
7
+ export * from "./schemas/intent.js";
8
+ export * from "./schemas/campaign.js";
9
+ export * from "./schemas/opportunity.js";
10
+ export * from "./schemas/delivery.js";
11
+ export * from "./schemas/reach.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ export * from "./constants.js";
2
+ export * from "./taxonomy.js";
3
+ export * from "./pii.js";
4
+ export * from "./tinybar.js";
5
+ export * from "./schemas/assurance.js";
6
+ export * from "./schemas/publisher.js";
7
+ export * from "./schemas/intent.js";
8
+ export * from "./schemas/campaign.js";
9
+ export * from "./schemas/opportunity.js";
10
+ export * from "./schemas/delivery.js";
11
+ export * from "./schemas/reach.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC"}
package/dist/pii.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function containsObviousPii(text: string): boolean;
2
+ //# sourceMappingURL=pii.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pii.d.ts","sourceRoot":"","sources":["../src/pii.ts"],"names":[],"mappings":"AASA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD"}
package/dist/pii.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Minimal PII heuristics for sanitized semantic summaries (CLAUDE.md section 24).
3
+ * This is NOT a complete PII detection system - it only catches obvious
4
+ * email addresses and phone numbers so publishers don't accidentally leak
5
+ * raw private conversation into Hark.
6
+ */
7
+ const EMAIL_PATTERN = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/;
8
+ const PHONE_PATTERN = /(\+?\d[\d\-.\s]{7,}\d)/;
9
+ export function containsObviousPii(text) {
10
+ return EMAIL_PATTERN.test(text) || PHONE_PATTERN.test(text);
11
+ }
12
+ //# sourceMappingURL=pii.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pii.js","sourceRoot":"","sources":["../src/pii.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,aAAa,GAAG,gDAAgD,CAAC;AACvE,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAE/C,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { z } from "zod";
2
+ /** Optional publisher-supplied assurance metadata (CLAUDE.md section 2.4). */
3
+ export declare const assuranceSchema: z.ZodObject<{
4
+ type: z.ZodString;
5
+ provider: z.ZodString;
6
+ level: z.ZodOptional<z.ZodString>;
7
+ issuedAt: z.ZodOptional<z.ZodString>;
8
+ expiresAt: z.ZodOptional<z.ZodString>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ type: string;
11
+ provider: string;
12
+ level?: string | undefined;
13
+ issuedAt?: string | undefined;
14
+ expiresAt?: string | undefined;
15
+ }, {
16
+ type: string;
17
+ provider: string;
18
+ level?: string | undefined;
19
+ issuedAt?: string | undefined;
20
+ expiresAt?: string | undefined;
21
+ }>;
22
+ export type Assurance = z.infer<typeof assuranceSchema>;
23
+ //# sourceMappingURL=assurance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assurance.d.ts","sourceRoot":"","sources":["../../src/schemas/assurance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8EAA8E;AAC9E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;EAM1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { z } from "zod";
2
+ /** Optional publisher-supplied assurance metadata (CLAUDE.md section 2.4). */
3
+ export const assuranceSchema = z.object({
4
+ type: z.string().min(1),
5
+ provider: z.string().min(1),
6
+ level: z.string().optional(),
7
+ issuedAt: z.string().datetime().optional(),
8
+ expiresAt: z.string().datetime().optional(),
9
+ });
10
+ //# sourceMappingURL=assurance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assurance.js","sourceRoot":"","sources":["../../src/schemas/assurance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8EAA8E;AAC9E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC1C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC"}
@@ -0,0 +1,177 @@
1
+ import { z } from "zod";
2
+ export declare const tinybarAmountSchema: z.ZodString;
3
+ export declare const creativeSchema: z.ZodObject<{
4
+ headline: z.ZodString;
5
+ body: z.ZodString;
6
+ imageUrl: z.ZodOptional<z.ZodString>;
7
+ ctaLabel: z.ZodString;
8
+ destinationUrl: z.ZodString;
9
+ }, "strip", z.ZodTypeAny, {
10
+ headline: string;
11
+ body: string;
12
+ ctaLabel: string;
13
+ destinationUrl: string;
14
+ imageUrl?: string | undefined;
15
+ }, {
16
+ headline: string;
17
+ body: string;
18
+ ctaLabel: string;
19
+ destinationUrl: string;
20
+ imageUrl?: string | undefined;
21
+ }>;
22
+ export type Creative = z.infer<typeof creativeSchema>;
23
+ /** Canonical Hark campaign object (CLAUDE.md section 9). */
24
+ export declare const campaignSchema: z.ZodObject<{
25
+ id: z.ZodString;
26
+ advertiserAgentId: z.ZodString;
27
+ advertiserName: z.ZodString;
28
+ /** CLAUDE.md section 36 (HCS-14 bonus): optional, non-blocking agent identity metadata. */
29
+ advertiserHederaAccountId: z.ZodOptional<z.ZodString>;
30
+ advertiserHcs14Id: z.ZodOptional<z.ZodString>;
31
+ name: z.ZodString;
32
+ productSummary: z.ZodString;
33
+ targetTopics: z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">;
34
+ minRelevance: z.ZodNumber;
35
+ maxPriceTinybar: z.ZodString;
36
+ totalBudgetTinybar: z.ZodString;
37
+ creative: z.ZodObject<{
38
+ headline: z.ZodString;
39
+ body: z.ZodString;
40
+ imageUrl: z.ZodOptional<z.ZodString>;
41
+ ctaLabel: z.ZodString;
42
+ destinationUrl: z.ZodString;
43
+ }, "strip", z.ZodTypeAny, {
44
+ headline: string;
45
+ body: string;
46
+ ctaLabel: string;
47
+ destinationUrl: string;
48
+ imageUrl?: string | undefined;
49
+ }, {
50
+ headline: string;
51
+ body: string;
52
+ ctaLabel: string;
53
+ destinationUrl: string;
54
+ imageUrl?: string | undefined;
55
+ }>;
56
+ active: z.ZodBoolean;
57
+ startsAt: z.ZodOptional<z.ZodString>;
58
+ endsAt: z.ZodOptional<z.ZodString>;
59
+ createdAt: z.ZodString;
60
+ }, "strip", z.ZodTypeAny, {
61
+ id: string;
62
+ name: string;
63
+ active: boolean;
64
+ createdAt: string;
65
+ advertiserAgentId: string;
66
+ advertiserName: string;
67
+ productSummary: string;
68
+ targetTopics: string[];
69
+ minRelevance: number;
70
+ maxPriceTinybar: string;
71
+ totalBudgetTinybar: string;
72
+ creative: {
73
+ headline: string;
74
+ body: string;
75
+ ctaLabel: string;
76
+ destinationUrl: string;
77
+ imageUrl?: string | undefined;
78
+ };
79
+ advertiserHederaAccountId?: string | undefined;
80
+ advertiserHcs14Id?: string | undefined;
81
+ startsAt?: string | undefined;
82
+ endsAt?: string | undefined;
83
+ }, {
84
+ id: string;
85
+ name: string;
86
+ active: boolean;
87
+ createdAt: string;
88
+ advertiserAgentId: string;
89
+ advertiserName: string;
90
+ productSummary: string;
91
+ targetTopics: string[];
92
+ minRelevance: number;
93
+ maxPriceTinybar: string;
94
+ totalBudgetTinybar: string;
95
+ creative: {
96
+ headline: string;
97
+ body: string;
98
+ ctaLabel: string;
99
+ destinationUrl: string;
100
+ imageUrl?: string | undefined;
101
+ };
102
+ advertiserHederaAccountId?: string | undefined;
103
+ advertiserHcs14Id?: string | undefined;
104
+ startsAt?: string | undefined;
105
+ endsAt?: string | undefined;
106
+ }>;
107
+ export type Campaign = z.infer<typeof campaignSchema>;
108
+ /** POST /v1/campaigns request body. */
109
+ export declare const createCampaignInputSchema: z.ZodObject<{
110
+ advertiserAgentId: z.ZodString;
111
+ advertiserName: z.ZodString;
112
+ name: z.ZodString;
113
+ productSummary: z.ZodString;
114
+ targetTopics: z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">;
115
+ minRelevance: z.ZodDefault<z.ZodNumber>;
116
+ maxPriceTinybar: z.ZodString;
117
+ totalBudgetTinybar: z.ZodString;
118
+ creative: z.ZodObject<{
119
+ headline: z.ZodString;
120
+ body: z.ZodString;
121
+ imageUrl: z.ZodOptional<z.ZodString>;
122
+ ctaLabel: z.ZodString;
123
+ destinationUrl: z.ZodString;
124
+ }, "strip", z.ZodTypeAny, {
125
+ headline: string;
126
+ body: string;
127
+ ctaLabel: string;
128
+ destinationUrl: string;
129
+ imageUrl?: string | undefined;
130
+ }, {
131
+ headline: string;
132
+ body: string;
133
+ ctaLabel: string;
134
+ destinationUrl: string;
135
+ imageUrl?: string | undefined;
136
+ }>;
137
+ startsAt: z.ZodOptional<z.ZodString>;
138
+ endsAt: z.ZodOptional<z.ZodString>;
139
+ }, "strip", z.ZodTypeAny, {
140
+ name: string;
141
+ advertiserAgentId: string;
142
+ advertiserName: string;
143
+ productSummary: string;
144
+ targetTopics: string[];
145
+ minRelevance: number;
146
+ maxPriceTinybar: string;
147
+ totalBudgetTinybar: string;
148
+ creative: {
149
+ headline: string;
150
+ body: string;
151
+ ctaLabel: string;
152
+ destinationUrl: string;
153
+ imageUrl?: string | undefined;
154
+ };
155
+ startsAt?: string | undefined;
156
+ endsAt?: string | undefined;
157
+ }, {
158
+ name: string;
159
+ advertiserAgentId: string;
160
+ advertiserName: string;
161
+ productSummary: string;
162
+ targetTopics: string[];
163
+ maxPriceTinybar: string;
164
+ totalBudgetTinybar: string;
165
+ creative: {
166
+ headline: string;
167
+ body: string;
168
+ ctaLabel: string;
169
+ destinationUrl: string;
170
+ imageUrl?: string | undefined;
171
+ };
172
+ minRelevance?: number | undefined;
173
+ startsAt?: string | undefined;
174
+ endsAt?: string | undefined;
175
+ }>;
176
+ export type CreateCampaignInput = z.infer<typeof createCampaignInputSchema>;
177
+ //# sourceMappingURL=campaign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campaign.d.ts","sourceRoot":"","sources":["../../src/schemas/campaign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB,aAE4C,CAAC;AAE7E,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;EAMzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,4DAA4D;AAC5D,eAAO,MAAM,cAAc;;;;IAIzB,2FAA2F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc3F,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,uCAAuC;AACvC,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { z } from "zod";
2
+ import { isValidTopicId } from "../taxonomy.js";
3
+ export const tinybarAmountSchema = z
4
+ .string()
5
+ .regex(/^\d+$/, "Amount must be a non-negative integer string of tinybar");
6
+ export const creativeSchema = z.object({
7
+ headline: z.string().min(1),
8
+ body: z.string().min(1),
9
+ imageUrl: z.string().url().optional(),
10
+ ctaLabel: z.string().min(1),
11
+ destinationUrl: z.string().url(),
12
+ });
13
+ /** Canonical Hark campaign object (CLAUDE.md section 9). */
14
+ export const campaignSchema = z.object({
15
+ id: z.string(),
16
+ advertiserAgentId: z.string(),
17
+ advertiserName: z.string(),
18
+ /** CLAUDE.md section 36 (HCS-14 bonus): optional, non-blocking agent identity metadata. */
19
+ advertiserHederaAccountId: z.string().optional(),
20
+ advertiserHcs14Id: z.string().optional(),
21
+ name: z.string(),
22
+ productSummary: z.string(),
23
+ targetTopics: z.array(z.string().refine(isValidTopicId, { message: "Unknown topic id" })).min(1),
24
+ minRelevance: z.number().min(0).max(1),
25
+ maxPriceTinybar: tinybarAmountSchema,
26
+ totalBudgetTinybar: tinybarAmountSchema,
27
+ creative: creativeSchema,
28
+ active: z.boolean(),
29
+ startsAt: z.string().datetime().optional(),
30
+ endsAt: z.string().datetime().optional(),
31
+ createdAt: z.string().datetime(),
32
+ });
33
+ /** POST /v1/campaigns request body. */
34
+ export const createCampaignInputSchema = z.object({
35
+ advertiserAgentId: z.string().min(1),
36
+ advertiserName: z.string().min(1),
37
+ name: z.string().min(1),
38
+ productSummary: z.string().min(1),
39
+ targetTopics: z.array(z.string().refine(isValidTopicId, { message: "Unknown topic id" })).min(1),
40
+ minRelevance: z.number().min(0).max(1).default(0.7),
41
+ maxPriceTinybar: tinybarAmountSchema,
42
+ totalBudgetTinybar: tinybarAmountSchema,
43
+ creative: creativeSchema,
44
+ startsAt: z.string().datetime().optional(),
45
+ endsAt: z.string().datetime().optional(),
46
+ });
47
+ //# sourceMappingURL=campaign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campaign.js","sourceRoot":"","sources":["../../src/schemas/campaign.ts"],"names":[],"mappings":"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"}