@keetanetwork/anchor 0.0.64 → 0.0.66

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 (38) hide show
  1. package/lib/anchor-external.d.ts +236 -0
  2. package/lib/anchor-external.d.ts.map +1 -0
  3. package/lib/anchor-external.generated.d.ts +3 -0
  4. package/lib/anchor-external.generated.d.ts.map +1 -0
  5. package/lib/anchor-external.generated.js +209 -0
  6. package/lib/anchor-external.generated.js.map +1 -0
  7. package/lib/anchor-external.js +506 -0
  8. package/lib/anchor-external.js.map +1 -0
  9. package/lib/chaining.d.ts.map +1 -1
  10. package/lib/chaining.js +74 -85
  11. package/lib/chaining.js.map +1 -1
  12. package/lib/index.d.ts +1 -0
  13. package/lib/index.d.ts.map +1 -1
  14. package/lib/index.js +1 -0
  15. package/lib/index.js.map +1 -1
  16. package/lib/utils/buffer.d.ts +4 -0
  17. package/lib/utils/buffer.d.ts.map +1 -1
  18. package/lib/utils/buffer.js +17 -0
  19. package/lib/utils/buffer.js.map +1 -1
  20. package/lib/utils/signing.d.ts +5 -0
  21. package/lib/utils/signing.d.ts.map +1 -1
  22. package/lib/utils/signing.js +1 -1
  23. package/lib/utils/signing.js.map +1 -1
  24. package/npm-shrinkwrap.json +8 -8
  25. package/package.json +2 -2
  26. package/services/asset-movement/client.d.ts +14 -8
  27. package/services/asset-movement/client.d.ts.map +1 -1
  28. package/services/asset-movement/client.js +43 -6
  29. package/services/asset-movement/client.js.map +1 -1
  30. package/services/asset-movement/common.d.ts +14 -7
  31. package/services/asset-movement/common.d.ts.map +1 -1
  32. package/services/asset-movement/common.generated.js +552 -557
  33. package/services/asset-movement/common.generated.js.map +1 -1
  34. package/services/asset-movement/common.js +2 -2
  35. package/services/asset-movement/common.js.map +1 -1
  36. package/services/storage/clients/contacts.generated.js +6 -6
  37. package/services/username/server.js +1 -1
  38. package/services/username/server.js.map +1 -1
@@ -32,4 +32,21 @@ export function arrayBufferLikeToBuffer(buffer) {
32
32
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
33
33
  return (toBuffer(buffer));
34
34
  }
35
+ /**
36
+ * Regular expression to match base64 input.
37
+ */
38
+ const BASE64_INPUT_REGEX = /^[-_A-Za-z0-9+/=\s]*$/;
39
+ /**
40
+ * Decode a base64 string into a {@link Buffer}.
41
+ */
42
+ export function decodeBase64Strict(input) {
43
+ if (!BASE64_INPUT_REGEX.test(input)) {
44
+ return (undefined);
45
+ }
46
+ const decoded = Buffer.from(input, 'base64');
47
+ if (decoded.length === 0) {
48
+ return (undefined);
49
+ }
50
+ return (decoded);
51
+ }
35
52
  //# sourceMappingURL=buffer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/lib/utils/buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGnE,MAAM,CAAC,MAAM,MAAM,GAA2C,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAE9F;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAwD,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAEpK,SAAS,QAAQ,CAAC,GAAkC;IACnD,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,+DAA+D;QAC/D,yEAAyE;QACzE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAuB,CAAC;IACtF,CAAC;IAED,qBAAqB;IACrB,gDAAgD;IAChD,yEAAyE;IACzE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAuB,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAwB;IAC3D,OAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAyC;IAChF,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,yEAAyE;IACzE,OAAM,CAAC,QAAQ,CAAC,MAAqB,CAAC,CAAC,CAAC;AACzC,CAAC","sourcesContent":["import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';\n\nexport type Buffer = InstanceType<typeof KeetaNetLib.Utils.Buffer.Buffer>;\nexport const Buffer: typeof KeetaNetLib.Utils.Buffer.Buffer = KeetaNetLib.Utils.Buffer.Buffer;\n\n/*\n * Because our public interfaces are ArrayBuffers we often need to convert\n * Buffers to ArrayBuffers -- an alias to the Node function to do that\n */\nexport const bufferToArrayBuffer: typeof KeetaNetLib.Utils.Helper.bufferToArrayBuffer = KeetaNetLib.Utils.Helper.bufferToArrayBuffer.bind(KeetaNetLib.Utils.Helper);\n\nfunction toBuffer(src: ArrayBufferView | ArrayBuffer): Buffer {\n\tif (ArrayBuffer.isView(src)) {\n\t\t// Zero-copy: Buffer will reference the same ArrayBuffer range.\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\treturn(Buffer.from(src.buffer, src.byteOffset, src.byteLength) as unknown as Buffer);\n\t}\n\n\t// src is ArrayBuffer\n\t// Zero-copy: shares memory with the ArrayBuffer\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\treturn(Buffer.from(src) as unknown as Buffer);\n}\n\n/*\n * Helper to convert ArrayBuffer back to Buffer\n */\nexport function arrayBufferToBuffer(arrayBuffer: ArrayBuffer): Buffer {\n\treturn(toBuffer(arrayBuffer));\n}\n\n/*\n * Converts a Buffer backed by ArrayBufferLike storage into one backed by an ArrayBuffer.\n */\nexport function arrayBufferLikeToBuffer(buffer: ArrayBufferLike | ArrayBufferView): Buffer {\n\tif (ArrayBuffer.isView(buffer)) {\n\t\treturn(toBuffer(buffer));\n\t}\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\treturn(toBuffer(buffer as ArrayBuffer));\n}\n"]}
1
+ {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/lib/utils/buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGnE,MAAM,CAAC,MAAM,MAAM,GAA2C,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAE9F;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAwD,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAEpK,SAAS,QAAQ,CAAC,GAAkC;IACnD,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,+DAA+D;QAC/D,yEAAyE;QACzE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAuB,CAAC;IACtF,CAAC;IAED,qBAAqB;IACrB,gDAAgD;IAChD,yEAAyE;IACzE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAuB,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAwB;IAC3D,OAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAyC;IAChF,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,yEAAyE;IACzE,OAAM,CAAC,QAAQ,CAAC,MAAqB,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAEnD;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC/C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAM,CAAC,SAAS,CAAC,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAM,CAAC,SAAS,CAAC,CAAC;IACnB,CAAC;IAED,OAAM,CAAC,OAAO,CAAC,CAAC;AACjB,CAAC","sourcesContent":["import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';\n\nexport type Buffer = InstanceType<typeof KeetaNetLib.Utils.Buffer.Buffer>;\nexport const Buffer: typeof KeetaNetLib.Utils.Buffer.Buffer = KeetaNetLib.Utils.Buffer.Buffer;\n\n/*\n * Because our public interfaces are ArrayBuffers we often need to convert\n * Buffers to ArrayBuffers -- an alias to the Node function to do that\n */\nexport const bufferToArrayBuffer: typeof KeetaNetLib.Utils.Helper.bufferToArrayBuffer = KeetaNetLib.Utils.Helper.bufferToArrayBuffer.bind(KeetaNetLib.Utils.Helper);\n\nfunction toBuffer(src: ArrayBufferView | ArrayBuffer): Buffer {\n\tif (ArrayBuffer.isView(src)) {\n\t\t// Zero-copy: Buffer will reference the same ArrayBuffer range.\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\treturn(Buffer.from(src.buffer, src.byteOffset, src.byteLength) as unknown as Buffer);\n\t}\n\n\t// src is ArrayBuffer\n\t// Zero-copy: shares memory with the ArrayBuffer\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\treturn(Buffer.from(src) as unknown as Buffer);\n}\n\n/*\n * Helper to convert ArrayBuffer back to Buffer\n */\nexport function arrayBufferToBuffer(arrayBuffer: ArrayBuffer): Buffer {\n\treturn(toBuffer(arrayBuffer));\n}\n\n/*\n * Converts a Buffer backed by ArrayBufferLike storage into one backed by an ArrayBuffer.\n */\nexport function arrayBufferLikeToBuffer(buffer: ArrayBufferLike | ArrayBufferView): Buffer {\n\tif (ArrayBuffer.isView(buffer)) {\n\t\treturn(toBuffer(buffer));\n\t}\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\treturn(toBuffer(buffer as ArrayBuffer));\n}\n\n/**\n * Regular expression to match base64 input.\n */\nconst BASE64_INPUT_REGEX = /^[-_A-Za-z0-9+/=\\s]*$/;\n\n/**\n * Decode a base64 string into a {@link Buffer}.\n */\nexport function decodeBase64Strict(input: string): Buffer | undefined {\n\tif (!BASE64_INPUT_REGEX.test(input)) {\n\t\treturn(undefined);\n\t}\n\n\tconst decoded = Buffer.from(input, 'base64');\n\tif (decoded.length === 0) {\n\t\treturn(undefined);\n\t}\n\n\treturn(decoded);\n}\n"]}
@@ -9,6 +9,11 @@ export type Signable = (string | number | bigint | InstanceType<typeof KeetaNetL
9
9
  export type SignableInput = {
10
10
  [key: string | number | symbol]: unknown;
11
11
  } | SignableInput[] | Signable[number] | undefined | null | boolean;
12
+ /**
13
+ * Serialize a JSON-shaped value following JCS
14
+ * ({@link https://www.rfc-editor.org/rfc/rfc8785 RFC 8785}).
15
+ */
16
+ export declare function canonicalizeJson(value: unknown): string;
12
17
  /**
13
18
  * Canonicalize a tree into a {@link Signable} via {@link canonicalizeJson}.
14
19
  * {@link KeetaNetLib.Account} instances are replaced by their `publicKeyAndTypeString`.
@@ -1 +1 @@
1
- {"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/signing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAMnE,OAAO,EAAE,MAAM,EAAgD,MAAM,2BAA2B,CAAC;AAKjG,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AACpG,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;AACzE,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;AAE/F;;GAEG;AACH,MAAM,MAAM,aAAa,GACxB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,GAC5C,aAAa,EAAE,GACf,QAAQ,CAAC,MAAM,CAAC,GAChB,SAAS,GACT,IAAI,GACJ,OAAO,CAAC;AA2GT;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,QAAQ,CA2D9D;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,aAAa,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;CAAE,CAoDjL;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;CAAE,CAAC,CAS1I;AAED,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,EAC5C,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
1
+ {"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/signing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAMnE,OAAO,EAAE,MAAM,EAAgD,MAAM,2BAA2B,CAAC;AAKjG,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AACpG,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;AACzE,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;AAE/F;;GAEG;AACH,MAAM,MAAM,aAAa,GACxB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,GAC5C,aAAa,EAAE,GACf,QAAQ,CAAC,MAAM,CAAC,GAChB,SAAS,GACT,IAAI,GACJ,OAAO,CAAC;AAYT;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAyFvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,QAAQ,CA2D9D;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,aAAa,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;CAAE,CAoDjL;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;CAAE,CAAC,CAS1I;AAED,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,EAC5C,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,OAAO,CAAC,CA6BlB"}
@@ -15,7 +15,7 @@ const LONE_SURROGATE_PATTERN = /[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\
15
15
  * Serialize a JSON-shaped value following JCS
16
16
  * ({@link https://www.rfc-editor.org/rfc/rfc8785 RFC 8785}).
17
17
  */
18
- function canonicalizeJson(value) {
18
+ export function canonicalizeJson(value) {
19
19
  /**
20
20
  * Literal serialization (Section 3.2.2.1).
21
21
  */
@@ -1 +1 @@
1
- {"version":3,"file":"signing.js","sourceRoot":"","sources":["../../../src/lib/utils/signing.ts"],"names":[],"mappings":"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","sourcesContent":["import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';\nimport type {\n\tValidateASN1 as KeetaNetASN1Validation,\n\tASN1AnyJS as KeetaNetASN1AnyJS\n} from '@keetanetwork/keetanet-client/lib/utils/asn1.js';\n\nimport { Buffer, bufferToArrayBuffer, arrayBufferLikeToBuffer } from '../../lib/utils/buffer.js';\nimport crypto from '../../lib/utils/crypto.js';\nimport { assertNever } from '../../lib/utils/never.js';\nimport { KeetaAnchorError } from '../error.js';\n\nexport type SignableAccount = ReturnType<InstanceType<typeof KeetaNetLib.Account>['assertAccount']>;\nexport type VerifiableAccount = InstanceType<typeof KeetaNetLib.Account>;\nexport type Signable = (string | number | bigint | InstanceType<typeof KeetaNetLib.Account>)[];\n\n/**\n * Structural input to {@link objectToSignable}.\n */\nexport type SignableInput =\n\t{ [key: string | number | symbol]: unknown } |\n\tSignableInput[] |\n\tSignable[number] |\n\tundefined |\n\tnull |\n\tboolean;\n\nconst TO_SIGNABLE_MAX_NODES = 1000;\nconst TO_SIGNABLE_MAX_OUTPUT_BYTES = 65536;\n\n/**\n * Detects unpaired UTF-16 surrogate code units. JCS\n * ({@link https://www.rfc-editor.org/rfc/rfc8785 RFC 8785} Section 3.2.2.2)\n * requires implementations to reject such strings.\n */\nconst LONE_SURROGATE_PATTERN = /[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?<![\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]/;\n\n/**\n * Serialize a JSON-shaped value following JCS\n * ({@link https://www.rfc-editor.org/rfc/rfc8785 RFC 8785}).\n */\nfunction canonicalizeJson(value: unknown): string {\n\t/**\n\t * Literal serialization (Section 3.2.2.1).\n\t */\n\tif (value === null || typeof value === 'boolean') {\n\t\treturn(JSON.stringify(value));\n\t}\n\n\t/**\n\t * String serialization (Section 3.2.2.2). Lone UTF-16 surrogates MUST cause termination.\n\t */\n\tif (typeof value === 'string') {\n\t\tif (LONE_SURROGATE_PATTERN.test(value)) {\n\t\t\tthrow(new KeetaAnchorError('Lone UTF-16 surrogate in canonicalizeJson'));\n\t\t}\n\n\t\treturn(JSON.stringify(value));\n\t}\n\n\t/**\n\t * Number serialization (Section 3.2.2.3). NaN and Infinity MUST cause termination.\n\t */\n\tif (typeof value === 'number') {\n\t\tif (!Number.isFinite(value)) {\n\t\t\tthrow(new KeetaAnchorError('non-finite number in canonicalizeJson'));\n\t\t}\n\n\t\treturn(JSON.stringify(value));\n\t}\n\n\t/**\n\t * Big integer serialization (Appendix D); I-JSON safe-integer range required.\n\t */\n\tif (typeof value === 'bigint') {\n\t\tif (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) {\n\t\t\tthrow(new KeetaAnchorError('bigint out of safe integer range in canonicalizeJson'));\n\t\t}\n\n\t\treturn(value.toString());\n\t}\n\n\t/**\n\t * Array element order MUST NOT be changed (Section 3.2.3); sparse holes serialize as JSON `null`.\n\t */\n\tif (Array.isArray(value)) {\n\t\tconst parts: string[] = [];\n\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\tparts.push(i in value ? canonicalizeJson(value[i]) : 'null');\n\t\t}\n\n\t\treturn(`[${parts.join(',')}]`);\n\t}\n\n\t/**\n\t * Object property sorting by UTF-16 code unit (Section 3.2.3); recursion required.\n\t * Only plain objects are permitted; class instances (Date, Map, etc.) are rejected.\n\t */\n\tif (typeof value === 'object') {\n\t\tif (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) {\n\t\t\tthrow(new KeetaAnchorError('Non-plain object in canonicalizeJson'));\n\t\t}\n\n\t\tconst entries = Object.entries(value);\n\t\tfor (const [ key ] of entries) {\n\t\t\tif (LONE_SURROGATE_PATTERN.test(key)) {\n\t\t\t\tthrow(new KeetaAnchorError('Lone UTF-16 surrogate in object key'));\n\t\t\t}\n\t\t}\n\n\t\tentries.sort(([ a ], [ b ]) => {\n\t\t\tif (a < b) {\n\t\t\t\treturn(-1);\n\t\t\t}\n\t\t\tif (a > b) {\n\t\t\t\treturn(1);\n\t\t\t}\n\n\t\t\treturn(0);\n\t\t});\n\n\t\tconst parts: string[] = [];\n\t\tfor (const [ key, child ] of entries) {\n\t\t\tparts.push(`${JSON.stringify(key)}:${canonicalizeJson(child)}`);\n\t\t}\n\n\t\treturn(`{${parts.join(',')}}`);\n\t}\n\n\tthrow(new KeetaAnchorError('Unsupported value type in canonicalizeJson'));\n}\n\n/**\n * Canonicalize a tree into a {@link Signable} via {@link canonicalizeJson}.\n * {@link KeetaNetLib.Account} instances are replaced by their `publicKeyAndTypeString`.\n * {@link Date} instances are replaced by their ISO 8601 string.\n */\nexport function objectToSignable(item: SignableInput): Signable {\n\tlet nodeCount = 0;\n\tfunction visit(value: unknown): unknown {\n\t\tnodeCount++;\n\t\tif (nodeCount > TO_SIGNABLE_MAX_NODES) {\n\t\t\tthrow(new KeetaAnchorError('Too much data to sign in objectToSignable'));\n\t\t}\n\n\t\tif (value === undefined || value === null) {\n\t\t\treturn(null);\n\t\t}\n\t\tif (value instanceof Date) {\n\t\t\tif (Number.isNaN(value.valueOf())) {\n\t\t\t\tthrow(new KeetaAnchorError('Invalid Date in objectToSignable'));\n\t\t\t}\n\n\t\t\treturn(value.toISOString());\n\t\t}\n\t\tif (KeetaNetLib.Account.isInstance(value)) {\n\t\t\treturn(value.publicKeyAndTypeString);\n\t\t}\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length > TO_SIGNABLE_MAX_NODES - nodeCount) {\n\t\t\t\tthrow(new KeetaAnchorError('Too much data to sign in objectToSignable'));\n\t\t\t}\n\n\t\t\tconst result: unknown[] = [];\n\t\t\tfor (const child of value) {\n\t\t\t\tresult.push(visit(child));\n\t\t\t}\n\n\t\t\treturn(result);\n\t\t}\n\t\tif (typeof value === 'object') {\n\t\t\tif (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) {\n\t\t\t\tthrow(new KeetaAnchorError('Non-plain object in objectToSignable'));\n\t\t\t}\n\n\t\t\tconst result: { [key: string]: unknown } = {};\n\t\t\tfor (const [ key, child ] of Object.entries(value)) {\n\t\t\t\tif (child === undefined) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tresult[key] = visit(child);\n\t\t\t}\n\n\t\t\treturn(result);\n\t\t}\n\n\t\treturn(value);\n\t}\n\n\tconst canonical = canonicalizeJson(visit(item));\n\tif (Buffer.byteLength(canonical, 'utf8') > TO_SIGNABLE_MAX_OUTPUT_BYTES) {\n\t\tthrow(new KeetaAnchorError('Canonical output exceeds size limit in objectToSignable'));\n\t}\n\n\treturn([ canonical ]);\n}\n\n/**\n * Options for signature verification\n */\nexport interface VerifyOptions {\n\t/** Maximum allowed time difference in milliseconds (default: 5 * 60 * 1000 = 5 minutes) */\n\tmaxSkewMs?: number;\n\t/** Reference time for skew calculation (default: new Date()) */\n\treferenceTime?: Date;\n}\n\nexport function FormatData(account: VerifiableAccount, data: Signable, nonce?: string, timestamp?: string | Date): { nonce: string; timestamp: string; verificationData: Buffer; } {\n\tnonce ??= crypto.randomUUID();\n\ttimestamp ??= new Date();\n\n\tlet timestampString: string;\n\tif (typeof timestamp === 'string') {\n\t\ttimestampString = timestamp;\n\t} else {\n\t\ttimestampString = timestamp.toISOString();\n\t}\n\n\tconst input: KeetaNetASN1AnyJS[] = [\n\t\tnonce,\n\t\ttimestampString,\n\t\taccount.publicKeyAndType\n\t];\n\n\tconst schema: KeetaNetASN1Validation.Schema[] = [\n\t\t{ type: 'string', kind: 'utf8' },\n\t\t{ type: 'string', kind: 'utf8' },\n\t\tKeetaNetLib.Utils.ASN1.ValidateASN1.IsOctetString\n\t];\n\n\tfor (const item of data) {\n\t\tif (typeof item === 'string') {\n\t\t\tinput.push(item);\n\t\t\tschema.push({ type: 'string', kind: 'utf8' });\n\t\t} else if (typeof item === 'number' || typeof item === 'bigint') {\n\t\t\tinput.push(item);\n\t\t\tschema.push(KeetaNetLib.Utils.ASN1.ValidateASN1.IsInteger);\n\t\t} else if (KeetaNetLib.Account.isInstance(item)) {\n\t\t\tinput.push(item.publicKeyAndType);\n\t\t\tschema.push(KeetaNetLib.Utils.ASN1.ValidateASN1.IsOctetString);\n\t\t} else {\n\t\t\tassertNever(item);\n\t\t}\n\t}\n\n\t/*\n\t * Verify that the generated ASN.1 data matches the expected schema before returning it.\n\t */\n\t// @ts-ignore\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\tconst inputCanonical = KeetaNetLib.Utils.ASN1.ValidateASN1.againstSchema(input, schema);\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\tconst verificationData = KeetaNetLib.Utils.ASN1.JStoASN1(inputCanonical);\n\n\treturn({\n\t\tnonce: nonce,\n\t\ttimestamp: timestampString,\n\t\tverificationData: arrayBufferLikeToBuffer(verificationData.toBER())\n\t});\n}\n\nexport async function SignData(account: SignableAccount, data: Signable): Promise<{ nonce: string; timestamp: string; signature: string; }> {\n\tconst { nonce, timestamp, verificationData } = FormatData(account, data);\n\tconst signature = await account.sign(bufferToArrayBuffer(verificationData));\n\n\treturn({\n\t\tnonce: nonce,\n\t\ttimestamp: timestamp,\n\t\tsignature: signature.getBuffer().toString('base64')\n\t});\n}\n\nexport async function VerifySignedData(\n\taccount: VerifiableAccount,\n\tdata: Signable,\n\tsigned: Awaited<ReturnType<typeof SignData>>,\n\toptions?: VerifyOptions\n): Promise<boolean> {\n\tconst nonce = signed.nonce;\n\tconst timestampString = signed.timestamp;\n\tconst signatureBuffer = Buffer.from(signed.signature, 'base64');\n\n\tconst timestamp = new Date(timestampString);\n\t/*\n\t * Enforce that the timestamp string is in valid ISO 8601 format,\n\t * not just a date that can be parsed\n\t *\n\t * XXX:TODO: This is not a perfect check since ISO 8601 does not require millisecond-level\n\t * precision and technically allows other timezones (though we will not support\n\t * those). This will be changed in the future to be more robust.\n\t */\n\tif (timestamp.toISOString() !== timestampString) {\n\t\treturn(false);\n\t}\n\n\tconst maxSkewMs = options?.maxSkewMs ?? 5 * 60 * 1000;\n\tconst referenceTime = options?.referenceTime ?? new Date();\n\tif (Math.abs(timestamp.valueOf() - referenceTime.valueOf()) > maxSkewMs) {\n\t\t/* Timestamp exceeds allowed skew from reference time */\n\t\treturn(false);\n\t}\n\n\t/* XXX:TODO: Verify that the timestamp is a valid ISO 8601 date string within a reasonable range */\n\tconst { verificationData } = FormatData(account, data, nonce, timestampString);\n\n\treturn(account.verify(KeetaNetLib.Utils.Helper.bufferToArrayBuffer(verificationData), KeetaNetLib.Utils.Helper.bufferToArrayBuffer(signatureBuffer)));\n}\n"]}
1
+ {"version":3,"file":"signing.js","sourceRoot":"","sources":["../../../src/lib/utils/signing.ts"],"names":[],"mappings":"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","sourcesContent":["import { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';\nimport type {\n\tValidateASN1 as KeetaNetASN1Validation,\n\tASN1AnyJS as KeetaNetASN1AnyJS\n} from '@keetanetwork/keetanet-client/lib/utils/asn1.js';\n\nimport { Buffer, bufferToArrayBuffer, arrayBufferLikeToBuffer } from '../../lib/utils/buffer.js';\nimport crypto from '../../lib/utils/crypto.js';\nimport { assertNever } from '../../lib/utils/never.js';\nimport { KeetaAnchorError } from '../error.js';\n\nexport type SignableAccount = ReturnType<InstanceType<typeof KeetaNetLib.Account>['assertAccount']>;\nexport type VerifiableAccount = InstanceType<typeof KeetaNetLib.Account>;\nexport type Signable = (string | number | bigint | InstanceType<typeof KeetaNetLib.Account>)[];\n\n/**\n * Structural input to {@link objectToSignable}.\n */\nexport type SignableInput =\n\t{ [key: string | number | symbol]: unknown } |\n\tSignableInput[] |\n\tSignable[number] |\n\tundefined |\n\tnull |\n\tboolean;\n\nconst TO_SIGNABLE_MAX_NODES = 1000;\nconst TO_SIGNABLE_MAX_OUTPUT_BYTES = 65536;\n\n/**\n * Detects unpaired UTF-16 surrogate code units. JCS\n * ({@link https://www.rfc-editor.org/rfc/rfc8785 RFC 8785} Section 3.2.2.2)\n * requires implementations to reject such strings.\n */\nconst LONE_SURROGATE_PATTERN = /[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?<![\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]/;\n\n/**\n * Serialize a JSON-shaped value following JCS\n * ({@link https://www.rfc-editor.org/rfc/rfc8785 RFC 8785}).\n */\nexport function canonicalizeJson(value: unknown): string {\n\t/**\n\t * Literal serialization (Section 3.2.2.1).\n\t */\n\tif (value === null || typeof value === 'boolean') {\n\t\treturn(JSON.stringify(value));\n\t}\n\n\t/**\n\t * String serialization (Section 3.2.2.2). Lone UTF-16 surrogates MUST cause termination.\n\t */\n\tif (typeof value === 'string') {\n\t\tif (LONE_SURROGATE_PATTERN.test(value)) {\n\t\t\tthrow(new KeetaAnchorError('Lone UTF-16 surrogate in canonicalizeJson'));\n\t\t}\n\n\t\treturn(JSON.stringify(value));\n\t}\n\n\t/**\n\t * Number serialization (Section 3.2.2.3). NaN and Infinity MUST cause termination.\n\t */\n\tif (typeof value === 'number') {\n\t\tif (!Number.isFinite(value)) {\n\t\t\tthrow(new KeetaAnchorError('non-finite number in canonicalizeJson'));\n\t\t}\n\n\t\treturn(JSON.stringify(value));\n\t}\n\n\t/**\n\t * Big integer serialization (Appendix D); I-JSON safe-integer range required.\n\t */\n\tif (typeof value === 'bigint') {\n\t\tif (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) {\n\t\t\tthrow(new KeetaAnchorError('bigint out of safe integer range in canonicalizeJson'));\n\t\t}\n\n\t\treturn(value.toString());\n\t}\n\n\t/**\n\t * Array element order MUST NOT be changed (Section 3.2.3); sparse holes serialize as JSON `null`.\n\t */\n\tif (Array.isArray(value)) {\n\t\tconst parts: string[] = [];\n\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\tparts.push(i in value ? canonicalizeJson(value[i]) : 'null');\n\t\t}\n\n\t\treturn(`[${parts.join(',')}]`);\n\t}\n\n\t/**\n\t * Object property sorting by UTF-16 code unit (Section 3.2.3); recursion required.\n\t * Only plain objects are permitted; class instances (Date, Map, etc.) are rejected.\n\t */\n\tif (typeof value === 'object') {\n\t\tif (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) {\n\t\t\tthrow(new KeetaAnchorError('Non-plain object in canonicalizeJson'));\n\t\t}\n\n\t\tconst entries = Object.entries(value);\n\t\tfor (const [ key ] of entries) {\n\t\t\tif (LONE_SURROGATE_PATTERN.test(key)) {\n\t\t\t\tthrow(new KeetaAnchorError('Lone UTF-16 surrogate in object key'));\n\t\t\t}\n\t\t}\n\n\t\tentries.sort(([ a ], [ b ]) => {\n\t\t\tif (a < b) {\n\t\t\t\treturn(-1);\n\t\t\t}\n\t\t\tif (a > b) {\n\t\t\t\treturn(1);\n\t\t\t}\n\n\t\t\treturn(0);\n\t\t});\n\n\t\tconst parts: string[] = [];\n\t\tfor (const [ key, child ] of entries) {\n\t\t\tparts.push(`${JSON.stringify(key)}:${canonicalizeJson(child)}`);\n\t\t}\n\n\t\treturn(`{${parts.join(',')}}`);\n\t}\n\n\tthrow(new KeetaAnchorError('Unsupported value type in canonicalizeJson'));\n}\n\n/**\n * Canonicalize a tree into a {@link Signable} via {@link canonicalizeJson}.\n * {@link KeetaNetLib.Account} instances are replaced by their `publicKeyAndTypeString`.\n * {@link Date} instances are replaced by their ISO 8601 string.\n */\nexport function objectToSignable(item: SignableInput): Signable {\n\tlet nodeCount = 0;\n\tfunction visit(value: unknown): unknown {\n\t\tnodeCount++;\n\t\tif (nodeCount > TO_SIGNABLE_MAX_NODES) {\n\t\t\tthrow(new KeetaAnchorError('Too much data to sign in objectToSignable'));\n\t\t}\n\n\t\tif (value === undefined || value === null) {\n\t\t\treturn(null);\n\t\t}\n\t\tif (value instanceof Date) {\n\t\t\tif (Number.isNaN(value.valueOf())) {\n\t\t\t\tthrow(new KeetaAnchorError('Invalid Date in objectToSignable'));\n\t\t\t}\n\n\t\t\treturn(value.toISOString());\n\t\t}\n\t\tif (KeetaNetLib.Account.isInstance(value)) {\n\t\t\treturn(value.publicKeyAndTypeString);\n\t\t}\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length > TO_SIGNABLE_MAX_NODES - nodeCount) {\n\t\t\t\tthrow(new KeetaAnchorError('Too much data to sign in objectToSignable'));\n\t\t\t}\n\n\t\t\tconst result: unknown[] = [];\n\t\t\tfor (const child of value) {\n\t\t\t\tresult.push(visit(child));\n\t\t\t}\n\n\t\t\treturn(result);\n\t\t}\n\t\tif (typeof value === 'object') {\n\t\t\tif (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null) {\n\t\t\t\tthrow(new KeetaAnchorError('Non-plain object in objectToSignable'));\n\t\t\t}\n\n\t\t\tconst result: { [key: string]: unknown } = {};\n\t\t\tfor (const [ key, child ] of Object.entries(value)) {\n\t\t\t\tif (child === undefined) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tresult[key] = visit(child);\n\t\t\t}\n\n\t\t\treturn(result);\n\t\t}\n\n\t\treturn(value);\n\t}\n\n\tconst canonical = canonicalizeJson(visit(item));\n\tif (Buffer.byteLength(canonical, 'utf8') > TO_SIGNABLE_MAX_OUTPUT_BYTES) {\n\t\tthrow(new KeetaAnchorError('Canonical output exceeds size limit in objectToSignable'));\n\t}\n\n\treturn([ canonical ]);\n}\n\n/**\n * Options for signature verification\n */\nexport interface VerifyOptions {\n\t/** Maximum allowed time difference in milliseconds (default: 5 * 60 * 1000 = 5 minutes) */\n\tmaxSkewMs?: number;\n\t/** Reference time for skew calculation (default: new Date()) */\n\treferenceTime?: Date;\n}\n\nexport function FormatData(account: VerifiableAccount, data: Signable, nonce?: string, timestamp?: string | Date): { nonce: string; timestamp: string; verificationData: Buffer; } {\n\tnonce ??= crypto.randomUUID();\n\ttimestamp ??= new Date();\n\n\tlet timestampString: string;\n\tif (typeof timestamp === 'string') {\n\t\ttimestampString = timestamp;\n\t} else {\n\t\ttimestampString = timestamp.toISOString();\n\t}\n\n\tconst input: KeetaNetASN1AnyJS[] = [\n\t\tnonce,\n\t\ttimestampString,\n\t\taccount.publicKeyAndType\n\t];\n\n\tconst schema: KeetaNetASN1Validation.Schema[] = [\n\t\t{ type: 'string', kind: 'utf8' },\n\t\t{ type: 'string', kind: 'utf8' },\n\t\tKeetaNetLib.Utils.ASN1.ValidateASN1.IsOctetString\n\t];\n\n\tfor (const item of data) {\n\t\tif (typeof item === 'string') {\n\t\t\tinput.push(item);\n\t\t\tschema.push({ type: 'string', kind: 'utf8' });\n\t\t} else if (typeof item === 'number' || typeof item === 'bigint') {\n\t\t\tinput.push(item);\n\t\t\tschema.push(KeetaNetLib.Utils.ASN1.ValidateASN1.IsInteger);\n\t\t} else if (KeetaNetLib.Account.isInstance(item)) {\n\t\t\tinput.push(item.publicKeyAndType);\n\t\t\tschema.push(KeetaNetLib.Utils.ASN1.ValidateASN1.IsOctetString);\n\t\t} else {\n\t\t\tassertNever(item);\n\t\t}\n\t}\n\n\t/*\n\t * Verify that the generated ASN.1 data matches the expected schema before returning it.\n\t */\n\t// @ts-ignore\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\tconst inputCanonical = KeetaNetLib.Utils.ASN1.ValidateASN1.againstSchema(input, schema);\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\tconst verificationData = KeetaNetLib.Utils.ASN1.JStoASN1(inputCanonical);\n\n\treturn({\n\t\tnonce: nonce,\n\t\ttimestamp: timestampString,\n\t\tverificationData: arrayBufferLikeToBuffer(verificationData.toBER())\n\t});\n}\n\nexport async function SignData(account: SignableAccount, data: Signable): Promise<{ nonce: string; timestamp: string; signature: string; }> {\n\tconst { nonce, timestamp, verificationData } = FormatData(account, data);\n\tconst signature = await account.sign(bufferToArrayBuffer(verificationData));\n\n\treturn({\n\t\tnonce: nonce,\n\t\ttimestamp: timestamp,\n\t\tsignature: signature.getBuffer().toString('base64')\n\t});\n}\n\nexport async function VerifySignedData(\n\taccount: VerifiableAccount,\n\tdata: Signable,\n\tsigned: Awaited<ReturnType<typeof SignData>>,\n\toptions?: VerifyOptions\n): Promise<boolean> {\n\tconst nonce = signed.nonce;\n\tconst timestampString = signed.timestamp;\n\tconst signatureBuffer = Buffer.from(signed.signature, 'base64');\n\n\tconst timestamp = new Date(timestampString);\n\t/*\n\t * Enforce that the timestamp string is in valid ISO 8601 format,\n\t * not just a date that can be parsed\n\t *\n\t * XXX:TODO: This is not a perfect check since ISO 8601 does not require millisecond-level\n\t * precision and technically allows other timezones (though we will not support\n\t * those). This will be changed in the future to be more robust.\n\t */\n\tif (timestamp.toISOString() !== timestampString) {\n\t\treturn(false);\n\t}\n\n\tconst maxSkewMs = options?.maxSkewMs ?? 5 * 60 * 1000;\n\tconst referenceTime = options?.referenceTime ?? new Date();\n\tif (Math.abs(timestamp.valueOf() - referenceTime.valueOf()) > maxSkewMs) {\n\t\t/* Timestamp exceeds allowed skew from reference time */\n\t\treturn(false);\n\t}\n\n\t/* XXX:TODO: Verify that the timestamp is a valid ISO 8601 date string within a reasonable range */\n\tconst { verificationData } = FormatData(account, data, nonce, timestampString);\n\n\treturn(account.verify(KeetaNetLib.Utils.Helper.bufferToArrayBuffer(verificationData), KeetaNetLib.Utils.Helper.bufferToArrayBuffer(signatureBuffer)));\n}\n"]}
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@keetanetwork/anchor",
3
- "version": "0.0.64",
3
+ "version": "0.0.66",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@keetanetwork/anchor",
9
- "version": "0.0.64",
9
+ "version": "0.0.66",
10
10
  "license": "SEE LICENSE IN LICENSE",
11
11
  "dependencies": {
12
12
  "@keetanetwork/currency-info": "1.2.5",
13
- "@keetanetwork/keetanet-client": "0.16.2",
13
+ "@keetanetwork/keetanet-client": "0.18.0",
14
14
  "typia": "9.5.0"
15
15
  },
16
16
  "engines": {
@@ -185,8 +185,8 @@
185
185
  "license": "ISC"
186
186
  },
187
187
  "node_modules/@keetanetwork/keetanet-client": {
188
- "version": "0.16.2",
189
- "integrity": "sha512-ifhICBG8k4r1Fyi+SaMgu9DUCIHuu5iV/YVmn2NKCwF7U+6kOoEJeRgrVyan9Vd8tF+xHtrj2O8dIwAWu44x9w==",
188
+ "version": "0.18.0",
189
+ "integrity": "sha512-WVUSOaWENdlQDCk1lMajrSesiU6ZW2SZthpWnB/petGbAeJ3kph2NU4pLr69DSwQde/OcbCmmOVneUfkXTAuqA==",
190
190
  "license": "see LICENSE",
191
191
  "dependencies": {
192
192
  "secp256k1": "5.0.1"
@@ -1687,8 +1687,8 @@
1687
1687
  }
1688
1688
  },
1689
1689
  "node_modules/protobufjs": {
1690
- "version": "7.5.9",
1691
- "integrity": "sha512-Od4muIm3HW1AouyHF5lONOf1FWo3hY1NbFDoy191X9GzhpgW1clCoaFjfVs2rKJNFYpTNJbje4cbAIDBZJ63ZA==",
1690
+ "version": "7.6.0",
1691
+ "integrity": "sha512-LtESOsMPTZgyYtwxhvdgdjGL0HmXEaRA/hVD6sol4zA60hVXXXP/SGmxnqDbgGE8gy7pYex7cym+5vYPcmaXBQ==",
1692
1692
  "hasInstallScript": true,
1693
1693
  "license": "BSD-3-Clause",
1694
1694
  "optional": true,
@@ -1704,7 +1704,7 @@
1704
1704
  "@protobufjs/pool": "^1.1.0",
1705
1705
  "@protobufjs/utf8": "^1.1.1",
1706
1706
  "@types/node": ">=13.7.0",
1707
- "long": "^5.0.0"
1707
+ "long": "^5.3.2"
1708
1708
  },
1709
1709
  "engines": {
1710
1710
  "node": ">=12.0.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keetanetwork/anchor",
3
- "version": "0.0.64",
3
+ "version": "0.0.66",
4
4
  "description": "KeetaNetwork Network Anchor",
5
5
  "main": "client/index.js",
6
6
  "scripts": {
@@ -24,7 +24,7 @@
24
24
  "sideEffects": false,
25
25
  "dependencies": {
26
26
  "@keetanetwork/currency-info": "1.2.5",
27
- "@keetanetwork/keetanet-client": "0.16.2",
27
+ "@keetanetwork/keetanet-client": "0.18.0",
28
28
  "typia": "9.5.0"
29
29
  },
30
30
  "engines": {
@@ -80,28 +80,33 @@ declare class KeetaAssetMovementAnchorBase {
80
80
  constructor(config: KeetaAssetMovementAnchorBaseConfig);
81
81
  }
82
82
  type SimulationOrTransferResponse = ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse> | ExtractOk<KeetaAssetMovementAnchorSimulateTransferResponse>;
83
- interface BaseKeetaAssetMovementTransferConstructorArguments<Transfer extends SimulationOrTransferResponse> {
83
+ interface BaseKeetaAssetMovementTransferConstructorArguments<Request extends KeetaAssetMovementAnchorInitiateTransferClientRequest | KeetaAssetMovementAnchorSimulateTransferClientRequest, Transfer extends SimulationOrTransferResponse> {
84
84
  provider: KeetaAssetMovementAnchorProvider;
85
- request: KeetaAssetMovementAnchorInitiateTransferClientRequest;
85
+ request: Request;
86
86
  transfer: Transfer;
87
87
  }
88
- declare class BaseKeetaAssetMovementTransfer<Transfer extends SimulationOrTransferResponse> {
88
+ declare abstract class BaseKeetaAssetMovementTransfer<Request extends KeetaAssetMovementAnchorInitiateTransferClientRequest | KeetaAssetMovementAnchorSimulateTransferClientRequest, Transfer extends SimulationOrTransferResponse> {
89
89
  readonly provider: KeetaAssetMovementAnchorProvider;
90
- readonly request: KeetaAssetMovementAnchorInitiateTransferClientRequest;
90
+ readonly request: Request;
91
91
  readonly transfer: Transfer;
92
- constructor({ request, transfer, provider }: BaseKeetaAssetMovementTransferConstructorArguments<Transfer>);
92
+ readonly abstract isSimulation: Request extends KeetaAssetMovementAnchorInitiateTransferClientRequest ? false : true;
93
+ constructor({ request, transfer, provider }: BaseKeetaAssetMovementTransferConstructorArguments<Request, Transfer>);
93
94
  get instructions(): Transfer['instructionChoices'];
94
95
  }
95
96
  /**
96
97
  * Represents an in-progress Asset Movement request.
97
98
  */
98
- declare class KeetaAssetMovementTransfer extends BaseKeetaAssetMovementTransfer<ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse>> {
99
+ declare class KeetaAssetMovementTransfer extends BaseKeetaAssetMovementTransfer<KeetaAssetMovementAnchorInitiateTransferClientRequest, ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse>> {
100
+ readonly isSimulation: false;
99
101
  get transferId(): string;
100
102
  getTransferStatus(): Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>>;
101
103
  executeTransfer(input: Omit<KeetaAssetMovementAnchorExecuteTransferClientRequest, 'id'>): Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>>;
102
104
  }
103
- declare class KeetaAssetMovementSimulatedTransfer extends BaseKeetaAssetMovementTransfer<ExtractOk<KeetaAssetMovementAnchorSimulateTransferResponse>> {
104
- createTransfer(): Promise<KeetaAssetMovementTransfer>;
105
+ declare class KeetaAssetMovementSimulatedTransfer extends BaseKeetaAssetMovementTransfer<KeetaAssetMovementAnchorSimulateTransferClientRequest, ExtractOk<KeetaAssetMovementAnchorSimulateTransferResponse>> {
106
+ readonly isSimulation: true;
107
+ createTransfer(overrides?: {
108
+ to: Partial<Pick<KeetaAssetMovementAnchorInitiateTransferClientRequest['to'], 'depositMessage' | 'recipient'>>;
109
+ }): Promise<KeetaAssetMovementTransfer>;
105
110
  }
106
111
  interface AwaitPromiseURLOptions {
107
112
  defaultPollIntervalMs?: number;
@@ -114,6 +119,7 @@ declare class KeetaAssetMovementAnchorProvider extends KeetaAssetMovementAnchorB
114
119
  readonly providerID: ProviderID;
115
120
  private readonly parent;
116
121
  constructor(serviceInfo: KeetaAssetMovementServiceInfo, providerID: ProviderID, parent: KeetaAssetMovementAnchorClient);
122
+ isOperationSupported(operationName: keyof KeetaAssetMovementAnchorOperations): Promise<boolean>;
117
123
  initiateTransfer(request: KeetaAssetMovementAnchorInitiateTransferClientRequest): Promise<KeetaAssetMovementTransfer>;
118
124
  simulateTransfer(request: KeetaAssetMovementAnchorSimulateTransferClientRequest): Promise<KeetaAssetMovementSimulatedTransfer>;
119
125
  executeTransfer(request: KeetaAssetMovementAnchorExecuteTransferClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/asset-movement/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/asset-movement/client.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as __typia_transform__assertGuard from "typia/lib/internal/_assertGuard.js";
2
2
  import * as __typia_transform__accessExpressionAsString from "typia/lib/internal/_accessExpressionAsString.js";
3
3
  import { getDefaultResolver } from '../../config.js';
4
- import { assertKeetaSupportedAssetsMetadataItem, convertAssetLocationToString, convertAssetOrPairSearchInputToCanonical, convertAssetSearchInputToCanonical, getKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData, isKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse, getKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData, getKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData, getKeetaAssetMovementAnchorExecuteTransferRequestSigningData, getKeetaAssetMovementAnchorGetTransferStatusRequestSigningData, getKeetaAssetMovementAnchorInitiateTransferRequestSigningData, getKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData, getKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData, getKeetaAssetMovementAnchorlistTransactionsRequestSigningData, getKeetaAssetMovementAnchorShareKYCRequestSigningData, isKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse, isKeetaAssetMovementAnchorCreatePersistentForwardingResponse, isKeetaAssetMovementAnchorExecuteTransferResponse, isKeetaAssetMovementAnchorGetExchangeStatusResponse, isKeetaAssetMovementAnchorInitiateTransferResponse, isKeetaAssetMovementAnchorListForwardingAddressTemplateResponse, isKeetaAssetMovementAnchorListPersistentForwardingResponse, isKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse, isKeetaAssetMovementAnchorShareKYCResponse, toAssetLocationFromString, isExternalChainAsset, isAnchorTokenLocationMetadata, isKeetaAssetMovementAnchorSimulateTransferResponse, getKeetaAssetMovementAnchorSimulateTransferRequestSigningData } from './common.js';
4
+ import { assertKeetaSupportedAssetsMetadataItem, convertAssetLocationToString, convertAssetOrPairSearchInputToCanonical, convertAssetSearchInputToCanonical, getKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData, isKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse, getKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData, getKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData, getKeetaAssetMovementAnchorExecuteTransferRequestSigningData, getKeetaAssetMovementAnchorGetTransferStatusRequestSigningData, getKeetaAssetMovementAnchorInitiateTransferRequestSigningData, getKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData, getKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData, getKeetaAssetMovementAnchorlistTransactionsRequestSigningData, getKeetaAssetMovementAnchorShareKYCRequestSigningData, isKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse, isKeetaAssetMovementAnchorCreatePersistentForwardingResponse, isKeetaAssetMovementAnchorExecuteTransferResponse, isKeetaAssetMovementAnchorGetExchangeStatusResponse, isKeetaAssetMovementAnchorInitiateTransferResponse, isKeetaAssetMovementAnchorListForwardingAddressTemplateResponse, isKeetaAssetMovementAnchorListPersistentForwardingResponse, isKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse, isKeetaAssetMovementAnchorShareKYCResponse, toAssetLocationFromString, isExternalChainAsset, isAnchorTokenLocationMetadata, isKeetaAssetMovementAnchorSimulateTransferResponse, getKeetaAssetMovementAnchorSimulateTransferRequestSigningData, Errors } from './common.js';
5
5
  import Resolver from "../../lib/resolver.js";
6
6
  import crypto from '../../lib/utils/crypto.js';
7
7
  import { createAssertEquals } from 'typia';
@@ -352,6 +352,7 @@ class BaseKeetaAssetMovementTransfer {
352
352
  * Represents an in-progress Asset Movement request.
353
353
  */
354
354
  class KeetaAssetMovementTransfer extends BaseKeetaAssetMovementTransfer {
355
+ isSimulation = false;
355
356
  get transferId() {
356
357
  return (this.transfer.id);
357
358
  }
@@ -365,8 +366,22 @@ class KeetaAssetMovementTransfer extends BaseKeetaAssetMovementTransfer {
365
366
  }
366
367
  }
367
368
  class KeetaAssetMovementSimulatedTransfer extends BaseKeetaAssetMovementTransfer {
368
- async createTransfer() {
369
- return (await this.provider.initiateTransfer(this.request));
369
+ isSimulation = true;
370
+ async createTransfer(overrides) {
371
+ const to = {
372
+ ...this.request.to,
373
+ ...overrides?.to
374
+ };
375
+ if (!to.recipient) {
376
+ throw (new Error('Recipient is required to create a transfer from a simulation'));
377
+ }
378
+ return (await this.provider.initiateTransfer({
379
+ ...this.request,
380
+ to: {
381
+ ...to,
382
+ recipient: to.recipient
383
+ }
384
+ }));
370
385
  }
371
386
  }
372
387
  class KeetaAssetMovementAnchorProvider extends KeetaAssetMovementAnchorBase {
@@ -383,7 +398,7 @@ class KeetaAssetMovementAnchorProvider extends KeetaAssetMovementAnchorBase {
383
398
  async #getOperationData(operationName, params) {
384
399
  const endpoint = await this.serviceInfo.operations[operationName];
385
400
  if (endpoint === undefined) {
386
- throw (new Error(`Asset Movement service does not support ${operationName} operation`));
401
+ throw (new Errors.OperationNotSupported({}, `Asset Movement service does not support ${operationName} operation`));
387
402
  }
388
403
  if (endpoint.options.authentication.method !== 'keeta-account') {
389
404
  throw (new Error(`Unsupported authentication method: ${endpoint.options.authentication.method}`));
@@ -393,6 +408,18 @@ class KeetaAssetMovementAnchorProvider extends KeetaAssetMovementAnchorBase {
393
408
  auth: endpoint.options.authentication
394
409
  });
395
410
  }
411
+ async isOperationSupported(operationName) {
412
+ try {
413
+ await this.#getOperationData(operationName);
414
+ return (true);
415
+ }
416
+ catch (error) {
417
+ if (error instanceof Errors.OperationNotSupported) {
418
+ return (false);
419
+ }
420
+ throw (error);
421
+ }
422
+ }
396
423
  async #parseResponseError(data) {
397
424
  if (typeof data !== 'object' || data === null) {
398
425
  throw (new Error('Response is not an error'));
@@ -494,7 +521,8 @@ class KeetaAssetMovementAnchorProvider extends KeetaAssetMovementAnchorBase {
494
521
  },
495
522
  to: {
496
523
  location: convertAssetLocationToString(body.to.location),
497
- recipient: body.to.recipient
524
+ ...(body.to.recipient ? { recipient: body.to.recipient } : {}),
525
+ ...(body.to.depositMessage ? { depositMessage: body.to.depositMessage } : {})
498
526
  },
499
527
  asset: convertAssetOrPairSearchInputToCanonical(body.asset),
500
528
  ...(account ? { account: account.assertAccount().publicKeyString.get() } : {})
@@ -524,9 +552,18 @@ class KeetaAssetMovementAnchorProvider extends KeetaAssetMovementAnchorBase {
524
552
  throw (new Error('expected provider to return id but did not'));
525
553
  }
526
554
  this.logger?.debug(`asset movement transfer request successful, request ID ${requestInformationJSON.id}`);
555
+ if (!('recipient' in request.to)) {
556
+ throw (new Error('Recipient information is required in the request to create a transfer'));
557
+ }
527
558
  return (new KeetaAssetMovementTransfer({
528
559
  provider: this,
529
- request,
560
+ request: {
561
+ ...request,
562
+ to: {
563
+ ...request.to,
564
+ recipient: request.to.recipient
565
+ }
566
+ },
530
567
  transfer: requestInformationJSON
531
568
  }));
532
569
  }