@reallyme/codec 0.2.2 → 0.3.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.
@@ -1,16 +1,30 @@
1
- // SPDX-FileCopyrightText: Copyright © 2026 ReallyMe LLC. All rights reserved
1
+ // SPDX-FileCopyrightText: 2026 ReallyMe LLC
2
2
  //
3
- // SPDX-License-Identifier: Apache-2.0
4
- import { fromBinary, toBinary } from "@bufbuild/protobuf";
3
+ // SPDX-License-Identifier: MIT OR Apache-2.0
4
+ import { create, fromBinary, toBinary } from "@bufbuild/protobuf";
5
5
  import { MAX_CODEC_FFI_INPUT_BYTES, MAX_CODEC_PROTO_JSON_BYTES, MAX_CODEC_PROTO_MESSAGE_BYTES, requireBoundaryAggregate, strictUtf8ByteLength, utf8ByteLength, } from "./boundary.js";
6
6
  import { DETERMINISTIC_CBOR_I64_MIN, DETERMINISTIC_CBOR_U64_MAX, MAX_DETERMINISTIC_CBOR_AGGREGATE_BYTE_STRING_BYTES, MAX_DETERMINISTIC_CBOR_AGGREGATE_TEXT_BYTES, MAX_DETERMINISTIC_CBOR_CONTAINER_ENTRIES, MAX_DETERMINISTIC_CBOR_INPUT_LEN, MAX_DETERMINISTIC_CBOR_NESTING_DEPTH, MAX_DETERMINISTIC_CBOR_NODES, MAX_DETERMINISTIC_CBOR_PROTO_RECURSION_DEPTH, } from "./deterministicCborBoundary.js";
7
7
  import { ReallyMeCodecError } from "./errors.js";
8
- import { CodecErrorOrigin, CodecErrorReason, CodecOperationResponseSchema, CodecOperationRequestSchema, } from "./proto/generated/reallyme/codec/v1/codec_pb.js";
9
- import { readIndependentBoundedBytesOutput, snapshotBoundedBytesInput, } from "./readOutput.js";
8
+ import { CodecErrorOrigin, CodecErrorReason, CodecErrorSchema, CodecBoundaryErrorSchema, CodecOperationResponseSchema, CodecOperationRequestSchema, } from "./proto/generated/reallyme/codec/v1/codec_pb.js";
9
+ import { ensureBytesInput, readIndependentBoundedBytesOutput, snapshotBoundedBytesInput, snapshotProviderBytes, } from "./readOutput.js";
10
10
  import { requireReallyMeCodecWasmProvider } from "./wasmProvider.js";
11
11
  const PROTO_REQUEST_OVERHEAD_BUDGET = 64;
12
12
  const DETERMINISTIC_CBOR_PROTO_NODE_OVERHEAD_BUDGET = 16;
13
13
  const DAG_CBOR_I64_MAX = (1n << 63n) - 1n;
14
+ const resourceLimitOperationResponse = () => toBinary(CodecOperationResponseSchema, create(CodecOperationResponseSchema, {
15
+ outcome: {
16
+ case: "error",
17
+ value: create(CodecErrorSchema, {
18
+ error: {
19
+ case: "boundary",
20
+ value: create(CodecBoundaryErrorSchema, {
21
+ reason: CodecErrorReason.BOUNDARY_RESOURCE_LIMIT_EXCEEDED,
22
+ }),
23
+ },
24
+ origin: CodecErrorOrigin.CALLER,
25
+ }),
26
+ },
27
+ }));
14
28
  const requireNoGeneratedUnknownFields = (message) => {
15
29
  if (message.$unknown !== undefined && message.$unknown.length !== 0) {
16
30
  throw new ReallyMeCodecError("invalid-input");
@@ -441,11 +455,14 @@ const validateGeneratedOperationRequest = (request) => {
441
455
  * Execute one binary generated-protobuf request and return the fully
442
456
  * discriminated binary `CodecOperationResponse`.
443
457
  *
444
- * Oversized requests are rejected before the provider call. Malformed and
445
- * unsupported in-limit requests are represented by the response error oneof
446
- * rather than a boundary-local exception.
458
+ * Oversized and malformed requests are represented by the response error
459
+ * oneof. Caller-owned oversized bytes are not copied into WASM.
447
460
  */
448
461
  export const processOperation = (requestBytes) => {
462
+ ensureBytesInput(requestBytes);
463
+ if (requestBytes.length > MAX_CODEC_PROTO_MESSAGE_BYTES) {
464
+ return resourceLimitOperationResponse();
465
+ }
449
466
  const requestSnapshot = snapshotBoundedBytesInput(requestBytes, MAX_CODEC_PROTO_MESSAGE_BYTES);
450
467
  try {
451
468
  return readIndependentBoundedBytesOutput(requireReallyMeCodecWasmProvider().processOperation(requestSnapshot), requestSnapshot, MAX_CODEC_PROTO_MESSAGE_BYTES);
@@ -459,6 +476,10 @@ export const processOperation = (requestBytes) => {
459
476
  * binary response used by `processOperation`.
460
477
  */
461
478
  export const processOperationJson = (requestJson) => {
479
+ ensureBytesInput(requestJson);
480
+ if (requestJson.length > MAX_CODEC_PROTO_JSON_BYTES) {
481
+ return resourceLimitOperationResponse();
482
+ }
462
483
  const requestSnapshot = snapshotBoundedBytesInput(requestJson, MAX_CODEC_PROTO_JSON_BYTES);
463
484
  try {
464
485
  return readIndependentBoundedBytesOutput(requireReallyMeCodecWasmProvider().processOperationJson(requestSnapshot), requestSnapshot, MAX_CODEC_PROTO_MESSAGE_BYTES);
@@ -551,38 +572,38 @@ export const processGeneratedOperationRequest = (request) => {
551
572
  const detachGeneratedOperationResultBytes = (result) => {
552
573
  switch (result.result.case) {
553
574
  case "multicodecPrefixForName":
554
- result.result.value.prefix = result.result.value.prefix.slice();
575
+ result.result.value.prefix = snapshotProviderBytes(result.result.value.prefix);
555
576
  break;
556
577
  case "multicodecLookupPrefix":
557
578
  if (result.result.value.metadata !== undefined) {
558
579
  result.result.value.metadata.prefix =
559
- result.result.value.metadata.prefix.slice();
580
+ snapshotProviderBytes(result.result.value.metadata.prefix);
560
581
  }
561
582
  break;
562
583
  case "multicodecTable":
563
584
  for (const entry of result.result.value.entries) {
564
- entry.prefix = entry.prefix.slice();
585
+ entry.prefix = snapshotProviderBytes(entry.prefix);
565
586
  }
566
587
  break;
567
588
  case "multikeyParse":
568
- result.result.value.publicKey = result.result.value.publicKey.slice();
589
+ result.result.value.publicKey = snapshotProviderBytes(result.result.value.publicKey);
569
590
  break;
570
591
  case "dagCborVerifyCid":
571
592
  break;
572
593
  case "dagCborEncode":
573
- result.result.value.encoded = result.result.value.encoded.slice();
594
+ result.result.value.encoded = snapshotProviderBytes(result.result.value.encoded);
574
595
  break;
575
596
  case "dagCborDecode":
576
597
  detachGeneratedCborValueBytes(result.result.value.value);
577
598
  break;
578
599
  case "pemDecode":
579
- result.result.value.der = result.result.value.der.slice();
600
+ result.result.value.der = snapshotProviderBytes(result.result.value.der);
580
601
  break;
581
602
  case "pemEncode":
582
- result.result.value.pem = result.result.value.pem.slice();
603
+ result.result.value.pem = snapshotProviderBytes(result.result.value.pem);
583
604
  break;
584
605
  case "deterministicCborEncode":
585
- result.result.value.encoded = result.result.value.encoded.slice();
606
+ result.result.value.encoded = snapshotProviderBytes(result.result.value.encoded);
586
607
  break;
587
608
  case "deterministicCborDecode":
588
609
  detachGeneratedCborValueBytes(result.result.value.value);
@@ -597,7 +618,7 @@ const detachGeneratedCborValueBytes = (value) => {
597
618
  }
598
619
  switch (value.value.case) {
599
620
  case "bytesValue":
600
- value.value.value.value = value.value.value.value.slice();
621
+ value.value.value.value = snapshotProviderBytes(value.value.value.value);
601
622
  break;
602
623
  case "arrayValue":
603
624
  for (const child of value.value.value.values) {
@@ -748,7 +769,24 @@ const errorCodeForCodecErrorMessage = (error) => {
748
769
  if (error.origin !== expectedOrigin) {
749
770
  return "provider-failure";
750
771
  }
751
- return error.origin === CodecErrorOrigin.CALLER
752
- ? "invalid-input"
753
- : "provider-failure";
772
+ if (error.origin !== CodecErrorOrigin.CALLER) {
773
+ return "provider-failure";
774
+ }
775
+ switch (reason) {
776
+ case CodecErrorReason.MULTIFORMAT_UNKNOWN_MULTICODEC:
777
+ case CodecErrorReason.MULTIFORMAT_INVALID_MULTICODEC_PREFIX:
778
+ return "unsupported-codec";
779
+ case CodecErrorReason.CANONICAL_UNSUPPORTED_IPLD_VALUE:
780
+ return "unsupported-ipld-value";
781
+ case CodecErrorReason.BASE_NON_CANONICAL_HEX:
782
+ case CodecErrorReason.CANONICAL_NON_CANONICAL_CBOR:
783
+ case CodecErrorReason.CANONICAL_NON_CANONICAL_JSON:
784
+ case CodecErrorReason.CANONICAL_NON_MINIMAL_CBOR_INTEGER:
785
+ case CodecErrorReason.CANONICAL_DUPLICATE_CBOR_MAP_KEY:
786
+ case CodecErrorReason.CANONICAL_CBOR_MAP_KEYS_OUT_OF_ORDER:
787
+ case CodecErrorReason.CANONICAL_CBOR_TRAILING_BYTES:
788
+ return "non-canonical";
789
+ default:
790
+ return "invalid-input";
791
+ }
754
792
  };
package/dist/pem.js CHANGED
@@ -1,6 +1,6 @@
1
- // SPDX-FileCopyrightText: Copyright © 2026 ReallyMe LLC. All rights reserved
1
+ // SPDX-FileCopyrightText: 2026 ReallyMe LLC
2
2
  //
3
- // SPDX-License-Identifier: Apache-2.0
3
+ // SPDX-License-Identifier: MIT OR Apache-2.0
4
4
  import { create } from "@bufbuild/protobuf";
5
5
  import { ReallyMeCodecError } from "./errors.js";
6
6
  import { CodecOperationRequestSchema, CodecPemDecodeOptionsSchema, CodecPemDecodeRequestSchema, CodecPemEncodeOptionsSchema, CodecPemEncodeRequestSchema, CodecPemLabel, CodecPemLineEnding, } from "./proto/generated/reallyme/codec/v1/codec_pb.js";
@@ -146,6 +146,9 @@ const snapshotEncodeOptions = (options) => {
146
146
  const snapshot = snapshotOptionsRecord(options, pemEncodeOptionFields);
147
147
  const maxDerLen = readPositiveIntegerOption(snapshot, "maxDerLen");
148
148
  const lineWidth = readPositiveIntegerOption(snapshot, "lineWidth");
149
+ if (lineWidth !== undefined && (lineWidth < 1 || lineWidth > 76)) {
150
+ throw new ReallyMeCodecError("invalid-input");
151
+ }
149
152
  const lineEndingValue = readSnapshotProperty(snapshot, "lineEnding");
150
153
  let lineEnding;
151
154
  if (lineEndingValue !== undefined) {
@@ -201,7 +201,7 @@ export type CodecDagCborDecodeResult = Message<"reallyme.codec.v1.CodecDagCborDe
201
201
  export declare const CodecDagCborDecodeResultSchema: GenMessage<CodecDagCborDecodeResult>;
202
202
  /**
203
203
  * Zero limits select the documented codec defaults. An empty allowed-label list
204
- * selects the default PRIVATE KEY, EC PRIVATE KEY, and PUBLIC KEY set.
204
+ * selects PUBLIC KEY only; private-key labels require an explicit allowlist.
205
205
  *
206
206
  * @generated from message reallyme.codec.v1.CodecPemDecodeOptions
207
207
  */
@@ -278,8 +278,9 @@ export type CodecPemEncodeRequest = Message<"reallyme.codec.v1.CodecPemEncodeReq
278
278
  */
279
279
  label: CodecPemLabel;
280
280
  /**
281
- * DER may contain private-key material. Generated owners are hardened to
282
- * wipe this field on every success and failure path.
281
+ * DER may contain private-key material. Generated owned-message drop wipes
282
+ * the retained field; transport decoders may create temporary copies that
283
+ * cannot be reliably wiped. Use binary requests for secret-bearing DER.
283
284
  *
284
285
  * @generated from field: bytes der = 2;
285
286
  */
@@ -1358,6 +1359,30 @@ export declare enum CodecErrorReason {
1358
1359
  * @generated from enum value: CODEC_ERROR_REASON_PEM_DER_TOO_LARGE = 204;
1359
1360
  */
1360
1361
  PEM_DER_TOO_LARGE = 204,
1362
+ /**
1363
+ * @generated from enum value: CODEC_ERROR_REASON_PEM_EMPTY_INPUT = 205;
1364
+ */
1365
+ PEM_EMPTY_INPUT = 205,
1366
+ /**
1367
+ * @generated from enum value: CODEC_ERROR_REASON_PEM_EMPTY_DER = 206;
1368
+ */
1369
+ PEM_EMPTY_DER = 206,
1370
+ /**
1371
+ * @generated from enum value: CODEC_ERROR_REASON_PEM_INVALID_OPTIONS = 207;
1372
+ */
1373
+ PEM_INVALID_OPTIONS = 207,
1374
+ /**
1375
+ * @generated from enum value: CODEC_ERROR_REASON_PEM_MISSING_BEGIN = 208;
1376
+ */
1377
+ PEM_MISSING_BEGIN = 208,
1378
+ /**
1379
+ * @generated from enum value: CODEC_ERROR_REASON_PEM_MISSING_END = 209;
1380
+ */
1381
+ PEM_MISSING_END = 209,
1382
+ /**
1383
+ * @generated from enum value: CODEC_ERROR_REASON_PEM_INVALID_BASE64 = 210;
1384
+ */
1385
+ PEM_INVALID_BASE64 = 210,
1361
1386
  /**
1362
1387
  * Multiformats and key envelopes.
1363
1388
  *
@@ -1398,6 +1423,26 @@ export declare enum CodecErrorReason {
1398
1423
  * @generated from enum value: CODEC_ERROR_REASON_CANONICAL_INTERNAL = 404;
1399
1424
  */
1400
1425
  CANONICAL_INTERNAL = 404,
1426
+ /**
1427
+ * @generated from enum value: CODEC_ERROR_REASON_CANONICAL_NON_MINIMAL_CBOR_INTEGER = 405;
1428
+ */
1429
+ CANONICAL_NON_MINIMAL_CBOR_INTEGER = 405,
1430
+ /**
1431
+ * @generated from enum value: CODEC_ERROR_REASON_CANONICAL_DUPLICATE_CBOR_MAP_KEY = 406;
1432
+ */
1433
+ CANONICAL_DUPLICATE_CBOR_MAP_KEY = 406,
1434
+ /**
1435
+ * @generated from enum value: CODEC_ERROR_REASON_CANONICAL_CBOR_MAP_KEYS_OUT_OF_ORDER = 407;
1436
+ */
1437
+ CANONICAL_CBOR_MAP_KEYS_OUT_OF_ORDER = 407,
1438
+ /**
1439
+ * @generated from enum value: CODEC_ERROR_REASON_CANONICAL_CBOR_TRAILING_BYTES = 408;
1440
+ */
1441
+ CANONICAL_CBOR_TRAILING_BYTES = 408,
1442
+ /**
1443
+ * @generated from enum value: CODEC_ERROR_REASON_CANONICAL_UNSUPPORTED_IPLD_VALUE = 409;
1444
+ */
1445
+ CANONICAL_UNSUPPORTED_IPLD_VALUE = 409,
1401
1446
  /**
1402
1447
  * Backend failures.
1403
1448
  *
@@ -1,11 +1,11 @@
1
- // SPDX-FileCopyrightText: Copyright © 2026 ReallyMe LLC. All rights reserved
1
+ // SPDX-FileCopyrightText: 2026 ReallyMe LLC
2
2
  //
3
- // SPDX-License-Identifier: Apache-2.0
3
+ // SPDX-License-Identifier: MIT OR Apache-2.0
4
4
  import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
5
5
  /**
6
6
  * Describes the file reallyme/codec/v1/codec.proto.
7
7
  */
8
- export const file_reallyme_codec_v1_codec = /*@__PURE__*/ fileDesc("Ch1yZWFsbHltZS9jb2RlYy92MS9jb2RlYy5wcm90bxIRcmVhbGx5bWUuY29kZWMudjEivwMKCkNvZGVjRXJyb3ISQgoNYmFzZV9lbmNvZGluZxgBIAEoCzIpLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjQmFzZUVuY29kaW5nRXJyb3JIABIvCgNwZW0YAiABKAsyIC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY1BlbUVycm9ySAASPwoLbXVsdGlmb3JtYXQYAyABKAsyKC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY011bHRpZm9ybWF0RXJyb3JIABJJChBjYW5vbmljYWxpemF0aW9uGAQgASgLMi0ucmVhbGx5bWUuY29kZWMudjEuQ29kZWNDYW5vbmljYWxpemF0aW9uRXJyb3JIABI3CgdiYWNrZW5kGAUgASgLMiQucmVhbGx5bWUuY29kZWMudjEuQ29kZWNCYWNrZW5kRXJyb3JIABI5Cghib3VuZGFyeRgGIAEoCzIlLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjQm91bmRhcnlFcnJvckgAEjMKBm9yaWdpbhhkIAEoDjIjLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRXJyb3JPcmlnaW5CBwoFZXJyb3IiMwojQ29kZWNNdWx0aWNvZGVjUHJlZml4Rm9yTmFtZVJlcXVlc3QSDAoEbmFtZRgBIAEoCSIzCiJDb2RlY011bHRpY29kZWNMb29rdXBQcmVmaXhSZXF1ZXN0Eg0KBXZhbHVlGAEgASgMIh0KG0NvZGVjTXVsdGljb2RlY1RhYmxlUmVxdWVzdCItChlDb2RlY011bHRpa2V5UGFyc2VSZXF1ZXN0EhAKCG11bHRpa2V5GAEgASgJIjwKHENvZGVjRGFnQ2JvclZlcmlmeUNpZFJlcXVlc3QSCwoDY2lkGAEgASgJEg8KB3BheWxvYWQYAiABKAwiWgoZQ29kZWNEYWdDYm9yRW5jb2RlUmVxdWVzdBI9CgV2YWx1ZRgBIAEoCzIuLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JWYWx1ZSIrChhDb2RlY0RhZ0Nib3JFbmNvZGVSZXN1bHQSDwoHZW5jb2RlZBgBIAEoDCIsChlDb2RlY0RhZ0Nib3JEZWNvZGVSZXF1ZXN0Eg8KB2VuY29kZWQYASABKAwiWQoYQ29kZWNEYWdDYm9yRGVjb2RlUmVzdWx0Ej0KBXZhbHVlGAEgASgLMi4ucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEZXRlcm1pbmlzdGljQ2JvclZhbHVlIn0KFUNvZGVjUGVtRGVjb2RlT3B0aW9ucxI4Cg5hbGxvd2VkX2xhYmVscxgBIAMoDjIgLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjUGVtTGFiZWwSFQoNbWF4X2lucHV0X2xlbhgCIAEoDRITCgttYXhfZGVyX2xlbhgDIAEoDSJfChVDb2RlY1BlbURlY29kZVJlcXVlc3QSCwoDcGVtGAEgASgMEjkKB29wdGlvbnMYAiABKAsyKC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY1BlbURlY29kZU9wdGlvbnMifAoVQ29kZWNQZW1FbmNvZGVPcHRpb25zEhMKC21heF9kZXJfbGVuGAEgASgNEhIKCmxpbmVfd2lkdGgYAiABKA0SOgoLbGluZV9lbmRpbmcYAyABKA4yJS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY1BlbUxpbmVFbmRpbmcikAEKFUNvZGVjUGVtRW5jb2RlUmVxdWVzdBIvCgVsYWJlbBgBIAEoDjIgLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjUGVtTGFiZWwSCwoDZGVyGAIgASgMEjkKB29wdGlvbnMYAyABKAsyKC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY1BlbUVuY29kZU9wdGlvbnMiIwoUQ29kZWNQZW1FbmNvZGVSZXN1bHQSCwoDcGVtGAEgASgMIhwKGkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JOdWxsIisKGkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JCb29sEg0KBXZhbHVlGAEgASgIIjYKJUNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JVbnNpZ25lZEludGVnZXISDQoFdmFsdWUYASABKAQiNgolQ29kZWNEZXRlcm1pbmlzdGljQ2Jvck5lZ2F0aXZlSW50ZWdlchINCgV2YWx1ZRgBIAEoEiLQAQodQ29kZWNEZXRlcm1pbmlzdGljQ2JvckludGVnZXISUgoOdW5zaWduZWRfdmFsdWUYASABKAsyOC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yVW5zaWduZWRJbnRlZ2VySAASUgoObmVnYXRpdmVfdmFsdWUYAiABKAsyOC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yTmVnYXRpdmVJbnRlZ2VySABCBwoFdmFsdWUiKwoaQ29kZWNEZXRlcm1pbmlzdGljQ2JvclRleHQSDQoFdmFsdWUYASABKAkiLAobQ29kZWNEZXRlcm1pbmlzdGljQ2JvckJ5dGVzEg0KBXZhbHVlGAEgASgMIrEBChxDb2RlY0RldGVybWluaXN0aWNDYm9yTWFwS2V5EkcKC2ludGVnZXJfa2V5GAEgASgLMjAucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEZXRlcm1pbmlzdGljQ2JvckludGVnZXJIABJBCgh0ZXh0X2tleRgCIAEoCzItLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JUZXh0SABCBQoDa2V5Ip0BCh5Db2RlY0RldGVybWluaXN0aWNDYm9yTWFwRW50cnkSPAoDa2V5GAEgASgLMi8ucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEZXRlcm1pbmlzdGljQ2Jvck1hcEtleRI9CgV2YWx1ZRgCIAEoCzIuLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JWYWx1ZSJdChtDb2RlY0RldGVybWluaXN0aWNDYm9yQXJyYXkSPgoGdmFsdWVzGAEgAygLMi4ucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEZXRlcm1pbmlzdGljQ2JvclZhbHVlIl8KGUNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JNYXASQgoHZW50cmllcxgBIAMoCzIxLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JNYXBFbnRyeSKRBAobQ29kZWNEZXRlcm1pbmlzdGljQ2JvclZhbHVlEkMKCm51bGxfdmFsdWUYASABKAsyLS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yTnVsbEgAEkMKCmJvb2xfdmFsdWUYAiABKAsyLS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yQm9vbEgAEkkKDWludGVnZXJfdmFsdWUYAyABKAsyMC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9ySW50ZWdlckgAEkMKCnRleHRfdmFsdWUYBCABKAsyLS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yVGV4dEgAEkUKC2J5dGVzX3ZhbHVlGAUgASgLMi4ucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEZXRlcm1pbmlzdGljQ2JvckJ5dGVzSAASRQoLYXJyYXlfdmFsdWUYBiABKAsyLi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yQXJyYXlIABJBCgltYXBfdmFsdWUYByABKAsyLC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yTWFwSABCBwoFdmFsdWUiZAojQ29kZWNEZXRlcm1pbmlzdGljQ2JvckVuY29kZVJlcXVlc3QSPQoFdmFsdWUYASABKAsyLi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yVmFsdWUiNQoiQ29kZWNEZXRlcm1pbmlzdGljQ2JvckVuY29kZVJlc3VsdBIPCgdlbmNvZGVkGAEgASgMIjYKI0NvZGVjRGV0ZXJtaW5pc3RpY0Nib3JEZWNvZGVSZXF1ZXN0Eg8KB2VuY29kZWQYASABKAwiYwoiQ29kZWNEZXRlcm1pbmlzdGljQ2JvckRlY29kZVJlc3VsdBI9CgV2YWx1ZRgBIAEoCzIuLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JWYWx1ZSL7BgoUQ29kZWNPcGVyYXRpb25SZXN1bHQSTQoabXVsdGljb2RlY19wcmVmaXhfZm9yX25hbWUY6AcgASgLMiYucmVhbGx5bWUuY29kZWMudjEuQ29kZWNNdWx0aWNvZGVjU3BlY0gAElMKGG11bHRpY29kZWNfbG9va3VwX3ByZWZpeBjpByABKAsyLi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY011bHRpY29kZWNMb29rdXBSZXN1bHRIABJKChBtdWx0aWNvZGVjX3RhYmxlGOoHIAEoCzItLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjTXVsdGljb2RlY1RhYmxlUmVzdWx0SAASRgoObXVsdGlrZXlfcGFyc2UY0A8gASgLMisucmVhbGx5bWUuY29kZWMudjEuQ29kZWNNdWx0aWtleVBhcnNlUmVzdWx0SAASTgoTZGFnX2Nib3JfdmVyaWZ5X2NpZBi4FyABKAsyLi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RhZ0Nib3JWZXJpZnlDaWRSZXN1bHRIABJHCg9kYWdfY2Jvcl9lbmNvZGUYuRcgASgLMisucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEYWdDYm9yRW5jb2RlUmVzdWx0SAASRwoPZGFnX2Nib3JfZGVjb2RlGLoXIAEoCzIrLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGFnQ2JvckRlY29kZVJlc3VsdEgAEj4KCnBlbV9kZWNvZGUYoB8gASgLMicucmVhbGx5bWUuY29kZWMudjEuQ29kZWNQZW1EZWNvZGVSZXN1bHRIABI+CgpwZW1fZW5jb2RlGKEfIAEoCzInLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjUGVtRW5jb2RlUmVzdWx0SAASWwoZZGV0ZXJtaW5pc3RpY19jYm9yX2VuY29kZRiIJyABKAsyNS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yRW5jb2RlUmVzdWx0SAASWwoZZGV0ZXJtaW5pc3RpY19jYm9yX2RlY29kZRiJJyABKAsyNS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yRGVjb2RlUmVzdWx0SABCCAoGcmVzdWx0SgUIARDoByKOAQoWQ29kZWNPcGVyYXRpb25SZXNwb25zZRI5CgZyZXN1bHQYASABKAsyJy5yZWFsbHltZS5jb2RlYy52MS5Db2RlY09wZXJhdGlvblJlc3VsdEgAEi4KBWVycm9yGAIgASgLMh0ucmVhbGx5bWUuY29kZWMudjEuQ29kZWNFcnJvckgAQgkKB291dGNvbWUinwcKFUNvZGVjT3BlcmF0aW9uUmVxdWVzdBJdChptdWx0aWNvZGVjX3ByZWZpeF9mb3JfbmFtZRjoByABKAsyNi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY011bHRpY29kZWNQcmVmaXhGb3JOYW1lUmVxdWVzdEgAEloKGG11bHRpY29kZWNfbG9va3VwX3ByZWZpeBjpByABKAsyNS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY011bHRpY29kZWNMb29rdXBQcmVmaXhSZXF1ZXN0SAASSwoQbXVsdGljb2RlY190YWJsZRjqByABKAsyLi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY011bHRpY29kZWNUYWJsZVJlcXVlc3RIABJHCg5tdWx0aWtleV9wYXJzZRjQDyABKAsyLC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY011bHRpa2V5UGFyc2VSZXF1ZXN0SAASTwoTZGFnX2Nib3JfdmVyaWZ5X2NpZBi4FyABKAsyLy5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RhZ0Nib3JWZXJpZnlDaWRSZXF1ZXN0SAASSAoPZGFnX2Nib3JfZW5jb2RlGLkXIAEoCzIsLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGFnQ2JvckVuY29kZVJlcXVlc3RIABJICg9kYWdfY2Jvcl9kZWNvZGUYuhcgASgLMiwucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEYWdDYm9yRGVjb2RlUmVxdWVzdEgAEj8KCnBlbV9kZWNvZGUYoB8gASgLMigucmVhbGx5bWUuY29kZWMudjEuQ29kZWNQZW1EZWNvZGVSZXF1ZXN0SAASPwoKcGVtX2VuY29kZRihHyABKAsyKC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY1BlbUVuY29kZVJlcXVlc3RIABJcChlkZXRlcm1pbmlzdGljX2Nib3JfZW5jb2RlGIgnIAEoCzI2LnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JFbmNvZGVSZXF1ZXN0SAASXAoZZGV0ZXJtaW5pc3RpY19jYm9yX2RlY29kZRiJJyABKAsyNi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yRGVjb2RlUmVxdWVzdEgAQgsKCW9wZXJhdGlvbkoFCAEQ6Aci9gEKE0NvZGVjTXVsdGljb2RlY1NwZWMSDAoEbmFtZRgBIAEoCRIMCgRjb2RlGAIgASgMEg4KBnByZWZpeBgDIAEoDBIoCgN0YWcYBCABKA4yGy5yZWFsbHltZS5jb2RlYy52MS5Db2RlY1RhZxJCChFrZXlfbWF0ZXJpYWxfa2luZBgFIAEoDjInLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjS2V5TWF0ZXJpYWxLaW5kEhQKDGZpeGVkX2xlbmd0aBgGIAEoDRIXCg92YXJpYWJsZV9sZW5ndGgYByABKAgSFgoOYWxnb3JpdGhtX25hbWUYCCABKAkifAobQ29kZWNNdWx0aWNvZGVjTG9va3VwUmVzdWx0EgwKBG5hbWUYASABKAkSFQoNcHJlZml4X2xlbmd0aBgCIAEoDRI4CghtZXRhZGF0YRgDIAEoCzImLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjTXVsdGljb2RlY1NwZWMiVQoaQ29kZWNNdWx0aWNvZGVjVGFibGVSZXN1bHQSNwoHZW50cmllcxgBIAMoCzImLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjTXVsdGljb2RlY1NwZWMiogEKGENvZGVjTXVsdGlrZXlQYXJzZVJlc3VsdBISCgpjb2RlY19uYW1lGAEgASgJEhYKDmFsZ29yaXRobV9uYW1lGAIgASgJEhIKCnB1YmxpY19rZXkYAyABKAwSIgoaZXhwZWN0ZWRfcHVibGljX2tleV9sZW5ndGgYBCABKA0SIgoadmFyaWFibGVfcHVibGljX2tleV9sZW5ndGgYBSABKAgiVgobQ29kZWNEYWdDYm9yVmVyaWZ5Q2lkUmVzdWx0Eg0KBXZhbGlkGAEgASgIEhQKDGV4cGVjdGVkX2NpZBgCIAEoCRISCgphY3R1YWxfY2lkGAMgASgJIjIKFENvZGVjUGVtRGVjb2RlUmVzdWx0Eg0KBWxhYmVsGAEgASgJEgsKA2RlchgCIAEoDCJNChZDb2RlY0Jhc2VFbmNvZGluZ0Vycm9yEjMKBnJlYXNvbhgBIAEoDjIjLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRXJyb3JSZWFzb24iRAoNQ29kZWNQZW1FcnJvchIzCgZyZWFzb24YASABKA4yIy5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0Vycm9yUmVhc29uIkwKFUNvZGVjTXVsdGlmb3JtYXRFcnJvchIzCgZyZWFzb24YASABKA4yIy5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0Vycm9yUmVhc29uIlEKGkNvZGVjQ2Fub25pY2FsaXphdGlvbkVycm9yEjMKBnJlYXNvbhgBIAEoDjIjLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRXJyb3JSZWFzb24iSAoRQ29kZWNCYWNrZW5kRXJyb3ISMwoGcmVhc29uGAEgASgOMiMucmVhbGx5bWUuY29kZWMudjEuQ29kZWNFcnJvclJlYXNvbiJJChJDb2RlY0JvdW5kYXJ5RXJyb3ISMwoGcmVhc29uGAEgASgOMiMucmVhbGx5bWUuY29kZWMudjEuQ29kZWNFcnJvclJlYXNvbip2ChBDb2RlY0Vycm9yT3JpZ2luEiIKHkNPREVDX0VSUk9SX09SSUdJTl9VTlNQRUNJRklFRBAAEh0KGUNPREVDX0VSUk9SX09SSUdJTl9DQUxMRVIQARIfChtDT0RFQ19FUlJPUl9PUklHSU5fUFJPVklERVIQAiqVAQoNQ29kZWNQZW1MYWJlbBIfChtDT0RFQ19QRU1fTEFCRUxfVU5TUEVDSUZJRUQQABIfChtDT0RFQ19QRU1fTEFCRUxfUFJJVkFURV9LRVkQZBIiCh5DT0RFQ19QRU1fTEFCRUxfRUNfUFJJVkFURV9LRVkQbhIeChpDT0RFQ19QRU1fTEFCRUxfUFVCTElDX0tFWRB4KnkKEkNvZGVjUGVtTGluZUVuZGluZxIlCiFDT0RFQ19QRU1fTElORV9FTkRJTkdfVU5TUEVDSUZJRUQQABIcChhDT0RFQ19QRU1fTElORV9FTkRJTkdfTEYQZBIeChpDT0RFQ19QRU1fTElORV9FTkRJTkdfQ1JMRhBuKuABChRDb2RlY0tleU1hdGVyaWFsS2luZBInCiNDT0RFQ19LRVlfTUFURVJJQUxfS0lORF9VTlNQRUNJRklFRBAAEiYKIkNPREVDX0tFWV9NQVRFUklBTF9LSU5EX1BVQkxJQ19LRVkQARInCiNDT0RFQ19LRVlfTUFURVJJQUxfS0lORF9QUklWQVRFX0tFWRACEikKJUNPREVDX0tFWV9NQVRFUklBTF9LSU5EX1NZTU1FVFJJQ19LRVkQAxIjCh9DT0RFQ19LRVlfTUFURVJJQUxfS0lORF9OT1RfS0VZEAQqlwEKCENvZGVjVGFnEhkKFUNPREVDX1RBR19VTlNQRUNJRklFRBAAEhgKFENPREVDX1RBR19FTkNSWVBUSU9OEAESEQoNQ09ERUNfVEFHX0tFWRACEhIKDkNPREVDX1RBR19IQVNIEAMSFwoTQ09ERUNfVEFHX01VTFRJSEFTSBAEEhYKEkNPREVDX1RBR19NVUxUSUtFWRAFKpILChBDb2RlY0Vycm9yUmVhc29uEiIKHkNPREVDX0VSUk9SX1JFQVNPTl9VTlNQRUNJRklFRBAAEi0KKUNPREVDX0VSUk9SX1JFQVNPTl9CQVNFX1VOU1VQUE9SVEVEX0NPREVDEGQSLAooQ09ERUNfRVJST1JfUkVBU09OX0JBU0VfSU5WQUxJRF9FTkNPRElORxBlEioKJkNPREVDX0VSUk9SX1JFQVNPTl9CQVNFX0lOVkFMSURfTEVOR1RIEGYSKwonQ09ERUNfRVJST1JfUkVBU09OX0JBU0VfSU5QVVRfVE9PX0xBUkdFEGcSLAooQ09ERUNfRVJST1JfUkVBU09OX0JBU0VfT1VUUFVUX1RPT19MQVJHRRBoEioKJkNPREVDX0VSUk9SX1JFQVNPTl9CQVNFX0lOVkFMSURfQkFTRTY0EG4SLQopQ09ERUNfRVJST1JfUkVBU09OX0JBU0VfSU5WQUxJRF9CQVNFNjRVUkwQbxInCiNDT0RFQ19FUlJPUl9SRUFTT05fQkFTRV9JTlZBTElEX0hFWBB4Ei0KKUNPREVDX0VSUk9SX1JFQVNPTl9CQVNFX05PTl9DQU5PTklDQUxfSEVYEHkSLAonQ09ERUNfRVJST1JfUkVBU09OX1BFTV9JTlZBTElEX0JPVU5EQVJZEMgBEioKJUNPREVDX0VSUk9SX1JFQVNPTl9QRU1fTEFCRUxfTUlTTUFUQ0gQyQESLQooQ09ERUNfRVJST1JfUkVBU09OX1BFTV9VTlNVUFBPUlRFRF9MQUJFTBDKARIoCiNDT0RFQ19FUlJPUl9SRUFTT05fUEVNX0lOVkFMSURfQk9EWRDLARIpCiRDT0RFQ19FUlJPUl9SRUFTT05fUEVNX0RFUl9UT09fTEFSR0UQzAESPAo3Q09ERUNfRVJST1JfUkVBU09OX01VTFRJRk9STUFUX0lOVkFMSURfTVVMVElCQVNFX1BSRUZJWBCsAhI9CjhDT0RFQ19FUlJPUl9SRUFTT05fTVVMVElGT1JNQVRfSU5WQUxJRF9NVUxUSUNPREVDX1BSRUZJWBCtAhI2CjFDT0RFQ19FUlJPUl9SRUFTT05fTVVMVElGT1JNQVRfVU5LTk9XTl9NVUxUSUNPREVDEK4CEjQKL0NPREVDX0VSUk9SX1JFQVNPTl9NVUxUSUZPUk1BVF9JTlZBTElEX01VTFRJS0VZEK8CEi4KKUNPREVDX0VSUk9SX1JFQVNPTl9DQU5PTklDQUxfSU5WQUxJRF9DQk9SEJADEjQKL0NPREVDX0VSUk9SX1JFQVNPTl9DQU5PTklDQUxfTk9OX0NBTk9OSUNBTF9DQk9SEJEDEi4KKUNPREVDX0VSUk9SX1JFQVNPTl9DQU5PTklDQUxfSU5WQUxJRF9KU09OEJIDEjQKL0NPREVDX0VSUk9SX1JFQVNPTl9DQU5PTklDQUxfTk9OX0NBTk9OSUNBTF9KU09OEJMDEioKJUNPREVDX0VSUk9SX1JFQVNPTl9DQU5PTklDQUxfSU5URVJOQUwQlAMSKAojQ09ERUNfRVJST1JfUkVBU09OX0JBQ0tFTkRfSU5URVJOQUwQ9AMSMwouQ09ERUNfRVJST1JfUkVBU09OX0JPVU5EQVJZX01BTEZPUk1FRF9QUk9UT0JVRhDYBBIvCipDT0RFQ19FUlJPUl9SRUFTT05fQk9VTkRBUllfTUFMRk9STUVEX0pTT04Q2QQSOAozQ09ERUNfRVJST1JfUkVBU09OX0JPVU5EQVJZX1JFU09VUkNFX0xJTUlUX0VYQ0VFREVEENoEEjIKLUNPREVDX0VSUk9SX1JFQVNPTl9CT1VOREFSWV9NSVNTSU5HX09QRVJBVElPThDbBCIECHAQcEImChJtZS5yZWFsbHkuY29kZWMudjFQAboCDVJlYWxseU1lUHJvdG9iBnByb3RvMw");
8
+ export const file_reallyme_codec_v1_codec = /*@__PURE__*/ fileDesc("Ch1yZWFsbHltZS9jb2RlYy92MS9jb2RlYy5wcm90bxIRcmVhbGx5bWUuY29kZWMudjEivwMKCkNvZGVjRXJyb3ISQgoNYmFzZV9lbmNvZGluZxgBIAEoCzIpLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjQmFzZUVuY29kaW5nRXJyb3JIABIvCgNwZW0YAiABKAsyIC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY1BlbUVycm9ySAASPwoLbXVsdGlmb3JtYXQYAyABKAsyKC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY011bHRpZm9ybWF0RXJyb3JIABJJChBjYW5vbmljYWxpemF0aW9uGAQgASgLMi0ucmVhbGx5bWUuY29kZWMudjEuQ29kZWNDYW5vbmljYWxpemF0aW9uRXJyb3JIABI3CgdiYWNrZW5kGAUgASgLMiQucmVhbGx5bWUuY29kZWMudjEuQ29kZWNCYWNrZW5kRXJyb3JIABI5Cghib3VuZGFyeRgGIAEoCzIlLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjQm91bmRhcnlFcnJvckgAEjMKBm9yaWdpbhhkIAEoDjIjLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRXJyb3JPcmlnaW5CBwoFZXJyb3IiMwojQ29kZWNNdWx0aWNvZGVjUHJlZml4Rm9yTmFtZVJlcXVlc3QSDAoEbmFtZRgBIAEoCSIzCiJDb2RlY011bHRpY29kZWNMb29rdXBQcmVmaXhSZXF1ZXN0Eg0KBXZhbHVlGAEgASgMIh0KG0NvZGVjTXVsdGljb2RlY1RhYmxlUmVxdWVzdCItChlDb2RlY011bHRpa2V5UGFyc2VSZXF1ZXN0EhAKCG11bHRpa2V5GAEgASgJIjwKHENvZGVjRGFnQ2JvclZlcmlmeUNpZFJlcXVlc3QSCwoDY2lkGAEgASgJEg8KB3BheWxvYWQYAiABKAwiWgoZQ29kZWNEYWdDYm9yRW5jb2RlUmVxdWVzdBI9CgV2YWx1ZRgBIAEoCzIuLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JWYWx1ZSIrChhDb2RlY0RhZ0Nib3JFbmNvZGVSZXN1bHQSDwoHZW5jb2RlZBgBIAEoDCIsChlDb2RlY0RhZ0Nib3JEZWNvZGVSZXF1ZXN0Eg8KB2VuY29kZWQYASABKAwiWQoYQ29kZWNEYWdDYm9yRGVjb2RlUmVzdWx0Ej0KBXZhbHVlGAEgASgLMi4ucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEZXRlcm1pbmlzdGljQ2JvclZhbHVlIn0KFUNvZGVjUGVtRGVjb2RlT3B0aW9ucxI4Cg5hbGxvd2VkX2xhYmVscxgBIAMoDjIgLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjUGVtTGFiZWwSFQoNbWF4X2lucHV0X2xlbhgCIAEoDRITCgttYXhfZGVyX2xlbhgDIAEoDSJfChVDb2RlY1BlbURlY29kZVJlcXVlc3QSCwoDcGVtGAEgASgMEjkKB29wdGlvbnMYAiABKAsyKC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY1BlbURlY29kZU9wdGlvbnMifAoVQ29kZWNQZW1FbmNvZGVPcHRpb25zEhMKC21heF9kZXJfbGVuGAEgASgNEhIKCmxpbmVfd2lkdGgYAiABKA0SOgoLbGluZV9lbmRpbmcYAyABKA4yJS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY1BlbUxpbmVFbmRpbmcikAEKFUNvZGVjUGVtRW5jb2RlUmVxdWVzdBIvCgVsYWJlbBgBIAEoDjIgLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjUGVtTGFiZWwSCwoDZGVyGAIgASgMEjkKB29wdGlvbnMYAyABKAsyKC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY1BlbUVuY29kZU9wdGlvbnMiIwoUQ29kZWNQZW1FbmNvZGVSZXN1bHQSCwoDcGVtGAEgASgMIhwKGkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JOdWxsIisKGkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JCb29sEg0KBXZhbHVlGAEgASgIIjYKJUNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JVbnNpZ25lZEludGVnZXISDQoFdmFsdWUYASABKAQiNgolQ29kZWNEZXRlcm1pbmlzdGljQ2Jvck5lZ2F0aXZlSW50ZWdlchINCgV2YWx1ZRgBIAEoEiLQAQodQ29kZWNEZXRlcm1pbmlzdGljQ2JvckludGVnZXISUgoOdW5zaWduZWRfdmFsdWUYASABKAsyOC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yVW5zaWduZWRJbnRlZ2VySAASUgoObmVnYXRpdmVfdmFsdWUYAiABKAsyOC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yTmVnYXRpdmVJbnRlZ2VySABCBwoFdmFsdWUiKwoaQ29kZWNEZXRlcm1pbmlzdGljQ2JvclRleHQSDQoFdmFsdWUYASABKAkiLAobQ29kZWNEZXRlcm1pbmlzdGljQ2JvckJ5dGVzEg0KBXZhbHVlGAEgASgMIrEBChxDb2RlY0RldGVybWluaXN0aWNDYm9yTWFwS2V5EkcKC2ludGVnZXJfa2V5GAEgASgLMjAucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEZXRlcm1pbmlzdGljQ2JvckludGVnZXJIABJBCgh0ZXh0X2tleRgCIAEoCzItLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JUZXh0SABCBQoDa2V5Ip0BCh5Db2RlY0RldGVybWluaXN0aWNDYm9yTWFwRW50cnkSPAoDa2V5GAEgASgLMi8ucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEZXRlcm1pbmlzdGljQ2Jvck1hcEtleRI9CgV2YWx1ZRgCIAEoCzIuLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JWYWx1ZSJdChtDb2RlY0RldGVybWluaXN0aWNDYm9yQXJyYXkSPgoGdmFsdWVzGAEgAygLMi4ucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEZXRlcm1pbmlzdGljQ2JvclZhbHVlIl8KGUNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JNYXASQgoHZW50cmllcxgBIAMoCzIxLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JNYXBFbnRyeSKRBAobQ29kZWNEZXRlcm1pbmlzdGljQ2JvclZhbHVlEkMKCm51bGxfdmFsdWUYASABKAsyLS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yTnVsbEgAEkMKCmJvb2xfdmFsdWUYAiABKAsyLS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yQm9vbEgAEkkKDWludGVnZXJfdmFsdWUYAyABKAsyMC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9ySW50ZWdlckgAEkMKCnRleHRfdmFsdWUYBCABKAsyLS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yVGV4dEgAEkUKC2J5dGVzX3ZhbHVlGAUgASgLMi4ucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEZXRlcm1pbmlzdGljQ2JvckJ5dGVzSAASRQoLYXJyYXlfdmFsdWUYBiABKAsyLi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yQXJyYXlIABJBCgltYXBfdmFsdWUYByABKAsyLC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yTWFwSABCBwoFdmFsdWUiZAojQ29kZWNEZXRlcm1pbmlzdGljQ2JvckVuY29kZVJlcXVlc3QSPQoFdmFsdWUYASABKAsyLi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yVmFsdWUiNQoiQ29kZWNEZXRlcm1pbmlzdGljQ2JvckVuY29kZVJlc3VsdBIPCgdlbmNvZGVkGAEgASgMIjYKI0NvZGVjRGV0ZXJtaW5pc3RpY0Nib3JEZWNvZGVSZXF1ZXN0Eg8KB2VuY29kZWQYASABKAwiYwoiQ29kZWNEZXRlcm1pbmlzdGljQ2JvckRlY29kZVJlc3VsdBI9CgV2YWx1ZRgBIAEoCzIuLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JWYWx1ZSL7BgoUQ29kZWNPcGVyYXRpb25SZXN1bHQSTQoabXVsdGljb2RlY19wcmVmaXhfZm9yX25hbWUY6AcgASgLMiYucmVhbGx5bWUuY29kZWMudjEuQ29kZWNNdWx0aWNvZGVjU3BlY0gAElMKGG11bHRpY29kZWNfbG9va3VwX3ByZWZpeBjpByABKAsyLi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY011bHRpY29kZWNMb29rdXBSZXN1bHRIABJKChBtdWx0aWNvZGVjX3RhYmxlGOoHIAEoCzItLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjTXVsdGljb2RlY1RhYmxlUmVzdWx0SAASRgoObXVsdGlrZXlfcGFyc2UY0A8gASgLMisucmVhbGx5bWUuY29kZWMudjEuQ29kZWNNdWx0aWtleVBhcnNlUmVzdWx0SAASTgoTZGFnX2Nib3JfdmVyaWZ5X2NpZBi4FyABKAsyLi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RhZ0Nib3JWZXJpZnlDaWRSZXN1bHRIABJHCg9kYWdfY2Jvcl9lbmNvZGUYuRcgASgLMisucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEYWdDYm9yRW5jb2RlUmVzdWx0SAASRwoPZGFnX2Nib3JfZGVjb2RlGLoXIAEoCzIrLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGFnQ2JvckRlY29kZVJlc3VsdEgAEj4KCnBlbV9kZWNvZGUYoB8gASgLMicucmVhbGx5bWUuY29kZWMudjEuQ29kZWNQZW1EZWNvZGVSZXN1bHRIABI+CgpwZW1fZW5jb2RlGKEfIAEoCzInLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjUGVtRW5jb2RlUmVzdWx0SAASWwoZZGV0ZXJtaW5pc3RpY19jYm9yX2VuY29kZRiIJyABKAsyNS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yRW5jb2RlUmVzdWx0SAASWwoZZGV0ZXJtaW5pc3RpY19jYm9yX2RlY29kZRiJJyABKAsyNS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yRGVjb2RlUmVzdWx0SABCCAoGcmVzdWx0SgUIARDoByKOAQoWQ29kZWNPcGVyYXRpb25SZXNwb25zZRI5CgZyZXN1bHQYASABKAsyJy5yZWFsbHltZS5jb2RlYy52MS5Db2RlY09wZXJhdGlvblJlc3VsdEgAEi4KBWVycm9yGAIgASgLMh0ucmVhbGx5bWUuY29kZWMudjEuQ29kZWNFcnJvckgAQgkKB291dGNvbWUinwcKFUNvZGVjT3BlcmF0aW9uUmVxdWVzdBJdChptdWx0aWNvZGVjX3ByZWZpeF9mb3JfbmFtZRjoByABKAsyNi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY011bHRpY29kZWNQcmVmaXhGb3JOYW1lUmVxdWVzdEgAEloKGG11bHRpY29kZWNfbG9va3VwX3ByZWZpeBjpByABKAsyNS5yZWFsbHltZS5jb2RlYy52MS5Db2RlY011bHRpY29kZWNMb29rdXBQcmVmaXhSZXF1ZXN0SAASSwoQbXVsdGljb2RlY190YWJsZRjqByABKAsyLi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY011bHRpY29kZWNUYWJsZVJlcXVlc3RIABJHCg5tdWx0aWtleV9wYXJzZRjQDyABKAsyLC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY011bHRpa2V5UGFyc2VSZXF1ZXN0SAASTwoTZGFnX2Nib3JfdmVyaWZ5X2NpZBi4FyABKAsyLy5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RhZ0Nib3JWZXJpZnlDaWRSZXF1ZXN0SAASSAoPZGFnX2Nib3JfZW5jb2RlGLkXIAEoCzIsLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGFnQ2JvckVuY29kZVJlcXVlc3RIABJICg9kYWdfY2Jvcl9kZWNvZGUYuhcgASgLMiwucmVhbGx5bWUuY29kZWMudjEuQ29kZWNEYWdDYm9yRGVjb2RlUmVxdWVzdEgAEj8KCnBlbV9kZWNvZGUYoB8gASgLMigucmVhbGx5bWUuY29kZWMudjEuQ29kZWNQZW1EZWNvZGVSZXF1ZXN0SAASPwoKcGVtX2VuY29kZRihHyABKAsyKC5yZWFsbHltZS5jb2RlYy52MS5Db2RlY1BlbUVuY29kZVJlcXVlc3RIABJcChlkZXRlcm1pbmlzdGljX2Nib3JfZW5jb2RlGIgnIAEoCzI2LnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRGV0ZXJtaW5pc3RpY0Nib3JFbmNvZGVSZXF1ZXN0SAASXAoZZGV0ZXJtaW5pc3RpY19jYm9yX2RlY29kZRiJJyABKAsyNi5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0RldGVybWluaXN0aWNDYm9yRGVjb2RlUmVxdWVzdEgAQgsKCW9wZXJhdGlvbkoFCAEQ6Aci9gEKE0NvZGVjTXVsdGljb2RlY1NwZWMSDAoEbmFtZRgBIAEoCRIMCgRjb2RlGAIgASgMEg4KBnByZWZpeBgDIAEoDBIoCgN0YWcYBCABKA4yGy5yZWFsbHltZS5jb2RlYy52MS5Db2RlY1RhZxJCChFrZXlfbWF0ZXJpYWxfa2luZBgFIAEoDjInLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjS2V5TWF0ZXJpYWxLaW5kEhQKDGZpeGVkX2xlbmd0aBgGIAEoDRIXCg92YXJpYWJsZV9sZW5ndGgYByABKAgSFgoOYWxnb3JpdGhtX25hbWUYCCABKAkifAobQ29kZWNNdWx0aWNvZGVjTG9va3VwUmVzdWx0EgwKBG5hbWUYASABKAkSFQoNcHJlZml4X2xlbmd0aBgCIAEoDRI4CghtZXRhZGF0YRgDIAEoCzImLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjTXVsdGljb2RlY1NwZWMiVQoaQ29kZWNNdWx0aWNvZGVjVGFibGVSZXN1bHQSNwoHZW50cmllcxgBIAMoCzImLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjTXVsdGljb2RlY1NwZWMiogEKGENvZGVjTXVsdGlrZXlQYXJzZVJlc3VsdBISCgpjb2RlY19uYW1lGAEgASgJEhYKDmFsZ29yaXRobV9uYW1lGAIgASgJEhIKCnB1YmxpY19rZXkYAyABKAwSIgoaZXhwZWN0ZWRfcHVibGljX2tleV9sZW5ndGgYBCABKA0SIgoadmFyaWFibGVfcHVibGljX2tleV9sZW5ndGgYBSABKAgiVgobQ29kZWNEYWdDYm9yVmVyaWZ5Q2lkUmVzdWx0Eg0KBXZhbGlkGAEgASgIEhQKDGV4cGVjdGVkX2NpZBgCIAEoCRISCgphY3R1YWxfY2lkGAMgASgJIjIKFENvZGVjUGVtRGVjb2RlUmVzdWx0Eg0KBWxhYmVsGAEgASgJEgsKA2RlchgCIAEoDCJNChZDb2RlY0Jhc2VFbmNvZGluZ0Vycm9yEjMKBnJlYXNvbhgBIAEoDjIjLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRXJyb3JSZWFzb24iRAoNQ29kZWNQZW1FcnJvchIzCgZyZWFzb24YASABKA4yIy5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0Vycm9yUmVhc29uIkwKFUNvZGVjTXVsdGlmb3JtYXRFcnJvchIzCgZyZWFzb24YASABKA4yIy5yZWFsbHltZS5jb2RlYy52MS5Db2RlY0Vycm9yUmVhc29uIlEKGkNvZGVjQ2Fub25pY2FsaXphdGlvbkVycm9yEjMKBnJlYXNvbhgBIAEoDjIjLnJlYWxseW1lLmNvZGVjLnYxLkNvZGVjRXJyb3JSZWFzb24iSAoRQ29kZWNCYWNrZW5kRXJyb3ISMwoGcmVhc29uGAEgASgOMiMucmVhbGx5bWUuY29kZWMudjEuQ29kZWNFcnJvclJlYXNvbiJJChJDb2RlY0JvdW5kYXJ5RXJyb3ISMwoGcmVhc29uGAEgASgOMiMucmVhbGx5bWUuY29kZWMudjEuQ29kZWNFcnJvclJlYXNvbip2ChBDb2RlY0Vycm9yT3JpZ2luEiIKHkNPREVDX0VSUk9SX09SSUdJTl9VTlNQRUNJRklFRBAAEh0KGUNPREVDX0VSUk9SX09SSUdJTl9DQUxMRVIQARIfChtDT0RFQ19FUlJPUl9PUklHSU5fUFJPVklERVIQAiqVAQoNQ29kZWNQZW1MYWJlbBIfChtDT0RFQ19QRU1fTEFCRUxfVU5TUEVDSUZJRUQQABIfChtDT0RFQ19QRU1fTEFCRUxfUFJJVkFURV9LRVkQZBIiCh5DT0RFQ19QRU1fTEFCRUxfRUNfUFJJVkFURV9LRVkQbhIeChpDT0RFQ19QRU1fTEFCRUxfUFVCTElDX0tFWRB4KnkKEkNvZGVjUGVtTGluZUVuZGluZxIlCiFDT0RFQ19QRU1fTElORV9FTkRJTkdfVU5TUEVDSUZJRUQQABIcChhDT0RFQ19QRU1fTElORV9FTkRJTkdfTEYQZBIeChpDT0RFQ19QRU1fTElORV9FTkRJTkdfQ1JMRhBuKuABChRDb2RlY0tleU1hdGVyaWFsS2luZBInCiNDT0RFQ19LRVlfTUFURVJJQUxfS0lORF9VTlNQRUNJRklFRBAAEiYKIkNPREVDX0tFWV9NQVRFUklBTF9LSU5EX1BVQkxJQ19LRVkQARInCiNDT0RFQ19LRVlfTUFURVJJQUxfS0lORF9QUklWQVRFX0tFWRACEikKJUNPREVDX0tFWV9NQVRFUklBTF9LSU5EX1NZTU1FVFJJQ19LRVkQAxIjCh9DT0RFQ19LRVlfTUFURVJJQUxfS0lORF9OT1RfS0VZEAQqlwEKCENvZGVjVGFnEhkKFUNPREVDX1RBR19VTlNQRUNJRklFRBAAEhgKFENPREVDX1RBR19FTkNSWVBUSU9OEAESEQoNQ09ERUNfVEFHX0tFWRACEhIKDkNPREVDX1RBR19IQVNIEAMSFwoTQ09ERUNfVEFHX01VTFRJSEFTSBAEEhYKEkNPREVDX1RBR19NVUxUSUtFWRAFKrQPChBDb2RlY0Vycm9yUmVhc29uEiIKHkNPREVDX0VSUk9SX1JFQVNPTl9VTlNQRUNJRklFRBAAEi0KKUNPREVDX0VSUk9SX1JFQVNPTl9CQVNFX1VOU1VQUE9SVEVEX0NPREVDEGQSLAooQ09ERUNfRVJST1JfUkVBU09OX0JBU0VfSU5WQUxJRF9FTkNPRElORxBlEioKJkNPREVDX0VSUk9SX1JFQVNPTl9CQVNFX0lOVkFMSURfTEVOR1RIEGYSKwonQ09ERUNfRVJST1JfUkVBU09OX0JBU0VfSU5QVVRfVE9PX0xBUkdFEGcSLAooQ09ERUNfRVJST1JfUkVBU09OX0JBU0VfT1VUUFVUX1RPT19MQVJHRRBoEioKJkNPREVDX0VSUk9SX1JFQVNPTl9CQVNFX0lOVkFMSURfQkFTRTY0EG4SLQopQ09ERUNfRVJST1JfUkVBU09OX0JBU0VfSU5WQUxJRF9CQVNFNjRVUkwQbxInCiNDT0RFQ19FUlJPUl9SRUFTT05fQkFTRV9JTlZBTElEX0hFWBB4Ei0KKUNPREVDX0VSUk9SX1JFQVNPTl9CQVNFX05PTl9DQU5PTklDQUxfSEVYEHkSLAonQ09ERUNfRVJST1JfUkVBU09OX1BFTV9JTlZBTElEX0JPVU5EQVJZEMgBEioKJUNPREVDX0VSUk9SX1JFQVNPTl9QRU1fTEFCRUxfTUlTTUFUQ0gQyQESLQooQ09ERUNfRVJST1JfUkVBU09OX1BFTV9VTlNVUFBPUlRFRF9MQUJFTBDKARIoCiNDT0RFQ19FUlJPUl9SRUFTT05fUEVNX0lOVkFMSURfQk9EWRDLARIpCiRDT0RFQ19FUlJPUl9SRUFTT05fUEVNX0RFUl9UT09fTEFSR0UQzAESJwoiQ09ERUNfRVJST1JfUkVBU09OX1BFTV9FTVBUWV9JTlBVVBDNARIlCiBDT0RFQ19FUlJPUl9SRUFTT05fUEVNX0VNUFRZX0RFUhDOARIrCiZDT0RFQ19FUlJPUl9SRUFTT05fUEVNX0lOVkFMSURfT1BUSU9OUxDPARIpCiRDT0RFQ19FUlJPUl9SRUFTT05fUEVNX01JU1NJTkdfQkVHSU4Q0AESJwoiQ09ERUNfRVJST1JfUkVBU09OX1BFTV9NSVNTSU5HX0VORBDRARIqCiVDT0RFQ19FUlJPUl9SRUFTT05fUEVNX0lOVkFMSURfQkFTRTY0ENIBEjwKN0NPREVDX0VSUk9SX1JFQVNPTl9NVUxUSUZPUk1BVF9JTlZBTElEX01VTFRJQkFTRV9QUkVGSVgQrAISPQo4Q09ERUNfRVJST1JfUkVBU09OX01VTFRJRk9STUFUX0lOVkFMSURfTVVMVElDT0RFQ19QUkVGSVgQrQISNgoxQ09ERUNfRVJST1JfUkVBU09OX01VTFRJRk9STUFUX1VOS05PV05fTVVMVElDT0RFQxCuAhI0Ci9DT0RFQ19FUlJPUl9SRUFTT05fTVVMVElGT1JNQVRfSU5WQUxJRF9NVUxUSUtFWRCvAhIuCilDT0RFQ19FUlJPUl9SRUFTT05fQ0FOT05JQ0FMX0lOVkFMSURfQ0JPUhCQAxI0Ci9DT0RFQ19FUlJPUl9SRUFTT05fQ0FOT05JQ0FMX05PTl9DQU5PTklDQUxfQ0JPUhCRAxIuCilDT0RFQ19FUlJPUl9SRUFTT05fQ0FOT05JQ0FMX0lOVkFMSURfSlNPThCSAxI0Ci9DT0RFQ19FUlJPUl9SRUFTT05fQ0FOT05JQ0FMX05PTl9DQU5PTklDQUxfSlNPThCTAxIqCiVDT0RFQ19FUlJPUl9SRUFTT05fQ0FOT05JQ0FMX0lOVEVSTkFMEJQDEjoKNUNPREVDX0VSUk9SX1JFQVNPTl9DQU5PTklDQUxfTk9OX01JTklNQUxfQ0JPUl9JTlRFR0VSEJUDEjgKM0NPREVDX0VSUk9SX1JFQVNPTl9DQU5PTklDQUxfRFVQTElDQVRFX0NCT1JfTUFQX0tFWRCWAxI8CjdDT0RFQ19FUlJPUl9SRUFTT05fQ0FOT05JQ0FMX0NCT1JfTUFQX0tFWVNfT1VUX09GX09SREVSEJcDEjUKMENPREVDX0VSUk9SX1JFQVNPTl9DQU5PTklDQUxfQ0JPUl9UUkFJTElOR19CWVRFUxCYAxI4CjNDT0RFQ19FUlJPUl9SRUFTT05fQ0FOT05JQ0FMX1VOU1VQUE9SVEVEX0lQTERfVkFMVUUQmQMSKAojQ09ERUNfRVJST1JfUkVBU09OX0JBQ0tFTkRfSU5URVJOQUwQ9AMSMwouQ09ERUNfRVJST1JfUkVBU09OX0JPVU5EQVJZX01BTEZPUk1FRF9QUk9UT0JVRhDYBBIvCipDT0RFQ19FUlJPUl9SRUFTT05fQk9VTkRBUllfTUFMRk9STUVEX0pTT04Q2QQSOAozQ09ERUNfRVJST1JfUkVBU09OX0JPVU5EQVJZX1JFU09VUkNFX0xJTUlUX0VYQ0VFREVEENoEEjIKLUNPREVDX0VSUk9SX1JFQVNPTl9CT1VOREFSWV9NSVNTSU5HX09QRVJBVElPThDbBCIECHAQcEImChJtZS5yZWFsbHkuY29kZWMudjFQAboCDVJlYWxseU1lUHJvdG9iBnByb3RvMw");
9
9
  /**
10
10
  * Describes the message reallyme.codec.v1.CodecError.
11
11
  * Use `create(CodecErrorSchema)` to create a new message.
@@ -464,6 +464,30 @@ export var CodecErrorReason;
464
464
  * @generated from enum value: CODEC_ERROR_REASON_PEM_DER_TOO_LARGE = 204;
465
465
  */
466
466
  CodecErrorReason[CodecErrorReason["PEM_DER_TOO_LARGE"] = 204] = "PEM_DER_TOO_LARGE";
467
+ /**
468
+ * @generated from enum value: CODEC_ERROR_REASON_PEM_EMPTY_INPUT = 205;
469
+ */
470
+ CodecErrorReason[CodecErrorReason["PEM_EMPTY_INPUT"] = 205] = "PEM_EMPTY_INPUT";
471
+ /**
472
+ * @generated from enum value: CODEC_ERROR_REASON_PEM_EMPTY_DER = 206;
473
+ */
474
+ CodecErrorReason[CodecErrorReason["PEM_EMPTY_DER"] = 206] = "PEM_EMPTY_DER";
475
+ /**
476
+ * @generated from enum value: CODEC_ERROR_REASON_PEM_INVALID_OPTIONS = 207;
477
+ */
478
+ CodecErrorReason[CodecErrorReason["PEM_INVALID_OPTIONS"] = 207] = "PEM_INVALID_OPTIONS";
479
+ /**
480
+ * @generated from enum value: CODEC_ERROR_REASON_PEM_MISSING_BEGIN = 208;
481
+ */
482
+ CodecErrorReason[CodecErrorReason["PEM_MISSING_BEGIN"] = 208] = "PEM_MISSING_BEGIN";
483
+ /**
484
+ * @generated from enum value: CODEC_ERROR_REASON_PEM_MISSING_END = 209;
485
+ */
486
+ CodecErrorReason[CodecErrorReason["PEM_MISSING_END"] = 209] = "PEM_MISSING_END";
487
+ /**
488
+ * @generated from enum value: CODEC_ERROR_REASON_PEM_INVALID_BASE64 = 210;
489
+ */
490
+ CodecErrorReason[CodecErrorReason["PEM_INVALID_BASE64"] = 210] = "PEM_INVALID_BASE64";
467
491
  /**
468
492
  * Multiformats and key envelopes.
469
493
  *
@@ -504,6 +528,26 @@ export var CodecErrorReason;
504
528
  * @generated from enum value: CODEC_ERROR_REASON_CANONICAL_INTERNAL = 404;
505
529
  */
506
530
  CodecErrorReason[CodecErrorReason["CANONICAL_INTERNAL"] = 404] = "CANONICAL_INTERNAL";
531
+ /**
532
+ * @generated from enum value: CODEC_ERROR_REASON_CANONICAL_NON_MINIMAL_CBOR_INTEGER = 405;
533
+ */
534
+ CodecErrorReason[CodecErrorReason["CANONICAL_NON_MINIMAL_CBOR_INTEGER"] = 405] = "CANONICAL_NON_MINIMAL_CBOR_INTEGER";
535
+ /**
536
+ * @generated from enum value: CODEC_ERROR_REASON_CANONICAL_DUPLICATE_CBOR_MAP_KEY = 406;
537
+ */
538
+ CodecErrorReason[CodecErrorReason["CANONICAL_DUPLICATE_CBOR_MAP_KEY"] = 406] = "CANONICAL_DUPLICATE_CBOR_MAP_KEY";
539
+ /**
540
+ * @generated from enum value: CODEC_ERROR_REASON_CANONICAL_CBOR_MAP_KEYS_OUT_OF_ORDER = 407;
541
+ */
542
+ CodecErrorReason[CodecErrorReason["CANONICAL_CBOR_MAP_KEYS_OUT_OF_ORDER"] = 407] = "CANONICAL_CBOR_MAP_KEYS_OUT_OF_ORDER";
543
+ /**
544
+ * @generated from enum value: CODEC_ERROR_REASON_CANONICAL_CBOR_TRAILING_BYTES = 408;
545
+ */
546
+ CodecErrorReason[CodecErrorReason["CANONICAL_CBOR_TRAILING_BYTES"] = 408] = "CANONICAL_CBOR_TRAILING_BYTES";
547
+ /**
548
+ * @generated from enum value: CODEC_ERROR_REASON_CANONICAL_UNSUPPORTED_IPLD_VALUE = 409;
549
+ */
550
+ CodecErrorReason[CodecErrorReason["CANONICAL_UNSUPPORTED_IPLD_VALUE"] = 409] = "CANONICAL_UNSUPPORTED_IPLD_VALUE";
507
551
  /**
508
552
  * Backend failures.
509
553
  *
package/dist/proto.js CHANGED
@@ -1,4 +1,4 @@
1
- // SPDX-FileCopyrightText: Copyright © 2026 ReallyMe LLC. All rights reserved
1
+ // SPDX-FileCopyrightText: 2026 ReallyMe LLC
2
2
  //
3
- // SPDX-License-Identifier: Apache-2.0
3
+ // SPDX-License-Identifier: MIT OR Apache-2.0
4
4
  export { CodecBackendErrorSchema, CodecBaseEncodingErrorSchema, CodecCanonicalizationErrorSchema, CodecBoundaryErrorSchema, CodecDagCborDecodeRequestSchema, CodecDagCborDecodeResultSchema, CodecDagCborEncodeRequestSchema, CodecDagCborEncodeResultSchema, CodecDagCborVerifyCidRequestSchema, CodecDagCborVerifyCidResultSchema, CodecDeterministicCborArraySchema, CodecDeterministicCborBoolSchema, CodecDeterministicCborBytesSchema, CodecDeterministicCborDecodeRequestSchema, CodecDeterministicCborDecodeResultSchema, CodecDeterministicCborEncodeRequestSchema, CodecDeterministicCborEncodeResultSchema, CodecDeterministicCborIntegerSchema, CodecDeterministicCborMapEntrySchema, CodecDeterministicCborMapKeySchema, CodecDeterministicCborMapSchema, CodecDeterministicCborNegativeIntegerSchema, CodecDeterministicCborNullSchema, CodecDeterministicCborTextSchema, CodecDeterministicCborUnsignedIntegerSchema, CodecDeterministicCborValueSchema, CodecErrorReason, CodecErrorReasonSchema, CodecErrorOrigin, CodecErrorOriginSchema, CodecErrorSchema, CodecKeyMaterialKind, CodecKeyMaterialKindSchema, CodecMultiformatErrorSchema, CodecMulticodecLookupResultSchema, CodecMulticodecLookupPrefixRequestSchema, CodecMulticodecPrefixForNameRequestSchema, CodecMulticodecSpecSchema, CodecMulticodecTableRequestSchema, CodecMulticodecTableResultSchema, CodecMultikeyParseRequestSchema, CodecMultikeyParseResultSchema, CodecOperationRequestSchema, CodecOperationResponseSchema, CodecOperationResultSchema, CodecPemDecodeOptionsSchema, CodecPemDecodeRequestSchema, CodecPemEncodeOptionsSchema, CodecPemEncodeRequestSchema, CodecPemEncodeResultSchema, CodecPemErrorSchema, CodecPemLabel, CodecPemLabelSchema, CodecPemLineEnding, CodecPemLineEndingSchema, CodecPemDecodeResultSchema, CodecTag, CodecTagSchema, file_reallyme_codec_v1_codec, } from "./proto/generated/reallyme/codec/v1/codec_pb.js";
@@ -6,6 +6,10 @@ export declare const ensureBytesInput: (value: Uint8Array) => void;
6
6
  * provider or protobuf serializer consumes another.
7
7
  */
8
8
  export declare const snapshotBoundedBytesInput: (value: Uint8Array, maximumLength?: number) => Uint8Array;
9
+ /** Copy provider-owned bytes without invoking methods supplied by the provider. */
10
+ export declare const snapshotProviderBytes: (value: Uint8Array, maximumLength?: number) => Uint8Array;
11
+ /** Wipes the private copy even when the provider rejects the request. */
12
+ export declare const withSnapshotBytesInput: <T>(value: Uint8Array, action: (snapshot: Uint8Array) => T) => T;
9
13
  export declare const ensureStringInput: (value: string) => void;
10
14
  export declare const ensureStringValue: (value: string) => void;
11
15
  export declare const readBooleanOutput: (value: unknown) => boolean;
@@ -1,10 +1,18 @@
1
- // SPDX-FileCopyrightText: Copyright © 2026 ReallyMe LLC. All rights reserved
1
+ // SPDX-FileCopyrightText: 2026 ReallyMe LLC
2
2
  //
3
- // SPDX-License-Identifier: Apache-2.0
3
+ // SPDX-License-Identifier: MIT OR Apache-2.0
4
4
  import { MAX_CODEC_FFI_INPUT_BYTES, MAX_CODEC_FFI_OUTPUT_BYTES, requireBoundaryUtf8String, } from "./boundary.js";
5
5
  import { ReallyMeCodecError } from "./errors.js";
6
6
  const uint8ArraySubarray = Uint8Array.prototype.subarray;
7
7
  const uint8ArraySet = Uint8Array.prototype.set;
8
+ const byteInputReservedProperties = [
9
+ "constructor",
10
+ "length",
11
+ "byteLength",
12
+ "byteOffset",
13
+ "buffer",
14
+ "subarray",
15
+ ];
8
16
  const readProviderProperty = (object, name, allowMissing = false) => {
9
17
  try {
10
18
  const descriptor = Object.getOwnPropertyDescriptor(object, name);
@@ -36,9 +44,28 @@ const requireBoundedProviderString = (value, allowEmpty) => {
36
44
  }
37
45
  };
38
46
  export const ensureBytesInput = (value) => {
39
- if (!(value instanceof Uint8Array) ||
40
- !ArrayBuffer.isView(value) ||
41
- value.constructor !== Uint8Array) {
47
+ try {
48
+ if (!(value instanceof Uint8Array) ||
49
+ !ArrayBuffer.isView(value) ||
50
+ Object.getPrototypeOf(value) !== Uint8Array.prototype) {
51
+ throw new ReallyMeCodecError("invalid-input");
52
+ }
53
+ // Own metadata can hide the actual view length; an own constructor can
54
+ // change subarray's species and substitute different bytes during copying.
55
+ // Reject overrides without invoking getters before crossing into WASM.
56
+ for (const property of byteInputReservedProperties) {
57
+ const descriptor = Object.getOwnPropertyDescriptor(value, property);
58
+ // A data property naming the ordinary constructor preserves the same
59
+ // species behavior as an unmodified view and was accepted previously.
60
+ if (property === "constructor" && descriptor?.value === Uint8Array) {
61
+ continue;
62
+ }
63
+ if (descriptor !== undefined) {
64
+ throw new ReallyMeCodecError("invalid-input");
65
+ }
66
+ }
67
+ }
68
+ catch (_error) {
42
69
  throw new ReallyMeCodecError("invalid-input");
43
70
  }
44
71
  };
@@ -78,6 +105,25 @@ export const snapshotBoundedBytesInput = (value, maximumLength = MAX_CODEC_FFI_I
78
105
  throw new ReallyMeCodecError("invalid-input");
79
106
  }
80
107
  };
108
+ /** Copy provider-owned bytes without invoking methods supplied by the provider. */
109
+ export const snapshotProviderBytes = (value, maximumLength = MAX_CODEC_FFI_OUTPUT_BYTES) => {
110
+ try {
111
+ return snapshotBoundedBytesInput(value, maximumLength);
112
+ }
113
+ catch (_error) {
114
+ throw new ReallyMeCodecError("provider-failure");
115
+ }
116
+ };
117
+ /** Wipes the private copy even when the provider rejects the request. */
118
+ export const withSnapshotBytesInput = (value, action) => {
119
+ const snapshot = snapshotBoundedBytesInput(value);
120
+ try {
121
+ return action(snapshot);
122
+ }
123
+ finally {
124
+ snapshot.fill(0);
125
+ }
126
+ };
81
127
  export const ensureStringInput = (value) => {
82
128
  if (typeof value !== "string" || value.length === 0) {
83
129
  throw new ReallyMeCodecError("invalid-input");