@liquidmetal-ai/drizzle 0.2.11 → 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.
@@ -5,7 +5,7 @@ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1
5
5
  /**
6
6
  * Describes the file liquidmetal/v1alpha1/search_agent.proto.
7
7
  */
8
- export const file_liquidmetal_v1alpha1_search_agent = /*@__PURE__*/ fileDesc("CidsaXF1aWRtZXRhbC92MWFscGhhMS9zZWFyY2hfYWdlbnQucHJvdG8SFGxpcXVpZG1ldGFsLnYxYWxwaGExIlsKE0RvY3VtZW50Q2hhdFJlcXVlc3QSDgoGYnVja2V0GAEgASgJEhEKCW9iamVjdF9pZBgCIAEoCRINCgVpbnB1dBgDIAEoCRISCgpyZXF1ZXN0X2lkGAQgASgJIiYKFERvY3VtZW50Q2hhdFJlc3BvbnNlEg4KBmFuc3dlchgBIAEoCSJJChBSYWdTZWFyY2hSZXF1ZXN0Eg0KBWlucHV0GAEgASgJEhIKCnJlcXVlc3RfaWQYAiABKAkSEgoKYnVja2V0X2lkcxgDIAMoCSJGChFSYWdTZWFyY2hSZXNwb25zZRIxCgdyZXN1bHRzGAEgAygLMiAubGlxdWlkbWV0YWwudjFhbHBoYTEuVGV4dFJlc3VsdCKIAgoKVGV4dFJlc3VsdBIcCg9jaHVua19zaWduYXR1cmUYASABKAlIAIgBARIRCgR0ZXh0GAIgASgJSAGIAQESEwoGc291cmNlGAMgASgJSAKIAQESHgoRcGF5bG9hZF9zaWduYXR1cmUYBCABKAlIA4gBARISCgVzY29yZRgFIAEoAUgEiAEBEhIKBWVtYmVkGAYgASgJSAWIAQESEQoEdHlwZRgHIAEoCUgGiAEBQhIKEF9jaHVua19zaWduYXR1cmVCBwoFX3RleHRCCQoHX3NvdXJjZUIUChJfcGF5bG9hZF9zaWduYXR1cmVCCAoGX3Njb3JlQggKBl9lbWJlZEIHCgVfdHlwZSJnCg5QYWdpbmF0aW9uSW5mbxINCgV0b3RhbBgBIAEoBRIMCgRwYWdlGAIgASgFEhEKCXBhZ2Vfc2l6ZRgDIAEoBRITCgt0b3RhbF9wYWdlcxgEIAEoBRIQCghoYXNfbW9yZRgFIAEoCCJPChhDcmVhdGVQYWdlU3VtbWFyeVJlcXVlc3QSDAoEcGFnZRgBIAEoBRIRCglwYWdlX3NpemUYAiABKAUSEgoKcmVxdWVzdF9pZBgDIAEoCSIsChlDcmVhdGVQYWdlU3VtbWFyeVJlc3BvbnNlEg8KB3N1bW1hcnkYASABKAkiUgoZUnVuU3VwZXJ2aXNvckFnZW50UmVxdWVzdBINCgVpbnB1dBgBIAEoCRISCgpyZXF1ZXN0X2lkGAIgASgJEhIKCmJ1Y2tldF9pZHMYAyADKAkiiQEKGlJ1blN1cGVydmlzb3JBZ2VudFJlc3BvbnNlEjEKB3Jlc3VsdHMYASADKAsyIC5saXF1aWRtZXRhbC52MWFscGhhMS5UZXh0UmVzdWx0EjgKCnBhZ2luYXRpb24YAiABKAsyJC5saXF1aWRtZXRhbC52MWFscGhhMS5QYWdpbmF0aW9uSW5mbyJyChpHZXRQYWdpbmF0ZWRSZXN1bHRzUmVxdWVzdBISCgpyZXF1ZXN0X2lkGAEgASgJEhEKBHBhZ2UYAiABKAVIAIgBARIWCglwYWdlX3NpemUYAyABKAVIAYgBAUIHCgVfcGFnZUIMCgpfcGFnZV9zaXplIooBChtHZXRQYWdpbmF0ZWRSZXN1bHRzUmVzcG9uc2USMQoHcmVzdWx0cxgBIAMoCzIgLmxpcXVpZG1ldGFsLnYxYWxwaGExLlRleHRSZXN1bHQSOAoKcGFnaW5hdGlvbhgCIAEoCzIkLmxpcXVpZG1ldGFsLnYxYWxwaGExLlBhZ2luYXRpb25JbmZvImQKHFJlZ2lzdGVyUmV0cmlldmVyVG9vbFJlcXVlc3QSDgoGYnVja2V0GAEgASgJEgsKA3VybBgCIAEoCRISCgpkZWxldGVfdXJsGAMgASgJEhMKC2J1Y2tldF9uYW1lGAQgASgJIjAKHVJlZ2lzdGVyUmV0cmlldmVyVG9vbFJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkyxwUKElNlYXJjaEFnZW50U2VydmljZRJlCgxEb2N1bWVudENoYXQSKS5saXF1aWRtZXRhbC52MWFscGhhMS5Eb2N1bWVudENoYXRSZXF1ZXN0GioubGlxdWlkbWV0YWwudjFhbHBoYTEuRG9jdW1lbnRDaGF0UmVzcG9uc2USXAoJUmFnU2VhcmNoEiYubGlxdWlkbWV0YWwudjFhbHBoYTEuUmFnU2VhcmNoUmVxdWVzdBonLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJhZ1NlYXJjaFJlc3BvbnNlEnQKEUNyZWF0ZVBhZ2VTdW1tYXJ5Ei4ubGlxdWlkbWV0YWwudjFhbHBoYTEuQ3JlYXRlUGFnZVN1bW1hcnlSZXF1ZXN0Gi8ubGlxdWlkbWV0YWwudjFhbHBoYTEuQ3JlYXRlUGFnZVN1bW1hcnlSZXNwb25zZRJ3ChJSdW5TdXBlcnZpc29yQWdlbnQSLy5saXF1aWRtZXRhbC52MWFscGhhMS5SdW5TdXBlcnZpc29yQWdlbnRSZXF1ZXN0GjAubGlxdWlkbWV0YWwudjFhbHBoYTEuUnVuU3VwZXJ2aXNvckFnZW50UmVzcG9uc2USegoTR2V0UGFnaW5hdGVkUmVzdWx0cxIwLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldFBhZ2luYXRlZFJlc3VsdHNSZXF1ZXN0GjEubGlxdWlkbWV0YWwudjFhbHBoYTEuR2V0UGFnaW5hdGVkUmVzdWx0c1Jlc3BvbnNlEoABChVSZWdpc3RlclJldHJpZXZlclRvb2wSMi5saXF1aWRtZXRhbC52MWFscGhhMS5SZWdpc3RlclJldHJpZXZlclRvb2xSZXF1ZXN0GjMubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVnaXN0ZXJSZXRyaWV2ZXJUb29sUmVzcG9uc2VCnQEKGGNvbS5saXF1aWRtZXRhbC52MWFscGhhMUIQU2VhcmNoQWdlbnRQcm90b1ABogIDTFhYqgIUTGlxdWlkbWV0YWwuVjFhbHBoYTHKAhRMaXF1aWRtZXRhbFxWMWFscGhhMeICIExpcXVpZG1ldGFsXFYxYWxwaGExXEdQQk1ldGFkYXRh6gIVTGlxdWlkbWV0YWw6OlYxYWxwaGExYgZwcm90bzM");
8
+ export const file_liquidmetal_v1alpha1_search_agent = /*@__PURE__*/ fileDesc("CidsaXF1aWRtZXRhbC92MWFscGhhMS9zZWFyY2hfYWdlbnQucHJvdG8SFGxpcXVpZG1ldGFsLnYxYWxwaGExIogBChNEb2N1bWVudENoYXRSZXF1ZXN0EhEKCWJ1Y2tldF9pZBgBIAEoCRIRCglvYmplY3RfaWQYAiABKAkSDQoFaW5wdXQYAyABKAkSEgoKcmVxdWVzdF9pZBgEIAEoCRIPCgd1c2VyX2lkGAUgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgGIAEoCSImChREb2N1bWVudENoYXRSZXNwb25zZRIOCgZhbnN3ZXIYASABKAkicwoQUmFnU2VhcmNoUmVxdWVzdBINCgVpbnB1dBgBIAEoCRISCgpyZXF1ZXN0X2lkGAIgASgJEhIKCmJ1Y2tldF9pZHMYAyADKAkSDwoHdXNlcl9pZBgEIAEoCRIXCg9vcmdhbml6YXRpb25faWQYBSABKAkiRgoRUmFnU2VhcmNoUmVzcG9uc2USMQoHcmVzdWx0cxgBIAMoCzIgLmxpcXVpZG1ldGFsLnYxYWxwaGExLlRleHRSZXN1bHQiiAIKClRleHRSZXN1bHQSHAoPY2h1bmtfc2lnbmF0dXJlGAEgASgJSACIAQESEQoEdGV4dBgCIAEoCUgBiAEBEhMKBnNvdXJjZRgDIAEoCUgCiAEBEh4KEXBheWxvYWRfc2lnbmF0dXJlGAQgASgJSAOIAQESEgoFc2NvcmUYBSABKAFIBIgBARISCgVlbWJlZBgGIAEoCUgFiAEBEhEKBHR5cGUYByABKAlIBogBAUISChBfY2h1bmtfc2lnbmF0dXJlQgcKBV90ZXh0QgkKB19zb3VyY2VCFAoSX3BheWxvYWRfc2lnbmF0dXJlQggKBl9zY29yZUIICgZfZW1iZWRCBwoFX3R5cGUiZwoOUGFnaW5hdGlvbkluZm8SDQoFdG90YWwYASABKAUSDAoEcGFnZRgCIAEoBRIRCglwYWdlX3NpemUYAyABKAUSEwoLdG90YWxfcGFnZXMYBCABKAUSEAoIaGFzX21vcmUYBSABKAgieQoYQ3JlYXRlUGFnZVN1bW1hcnlSZXF1ZXN0EgwKBHBhZ2UYASABKAUSEQoJcGFnZV9zaXplGAIgASgFEhIKCnJlcXVlc3RfaWQYAyABKAkSDwoHdXNlcl9pZBgEIAEoCRIXCg9vcmdhbml6YXRpb25faWQYBSABKAkiLAoZQ3JlYXRlUGFnZVN1bW1hcnlSZXNwb25zZRIPCgdzdW1tYXJ5GAEgASgJInwKGVJ1blN1cGVydmlzb3JBZ2VudFJlcXVlc3QSDQoFaW5wdXQYASABKAkSEgoKcmVxdWVzdF9pZBgCIAEoCRISCgpidWNrZXRfaWRzGAMgAygJEg8KB3VzZXJfaWQYBCABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAUgASgJIokBChpSdW5TdXBlcnZpc29yQWdlbnRSZXNwb25zZRIxCgdyZXN1bHRzGAEgAygLMiAubGlxdWlkbWV0YWwudjFhbHBoYTEuVGV4dFJlc3VsdBI4CgpwYWdpbmF0aW9uGAIgASgLMiQubGlxdWlkbWV0YWwudjFhbHBoYTEuUGFnaW5hdGlvbkluZm8inAEKGkdldFBhZ2luYXRlZFJlc3VsdHNSZXF1ZXN0EhIKCnJlcXVlc3RfaWQYASABKAkSEQoEcGFnZRgCIAEoBUgAiAEBEhYKCXBhZ2Vfc2l6ZRgDIAEoBUgBiAEBEg8KB3VzZXJfaWQYBCABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAUgASgJQgcKBV9wYWdlQgwKCl9wYWdlX3NpemUiigEKG0dldFBhZ2luYXRlZFJlc3VsdHNSZXNwb25zZRIxCgdyZXN1bHRzGAEgAygLMiAubGlxdWlkbWV0YWwudjFhbHBoYTEuVGV4dFJlc3VsdBI4CgpwYWdpbmF0aW9uGAIgASgLMiQubGlxdWlkbWV0YWwudjFhbHBoYTEuUGFnaW5hdGlvbkluZm8yxAQKElNlYXJjaEFnZW50U2VydmljZRJlCgxEb2N1bWVudENoYXQSKS5saXF1aWRtZXRhbC52MWFscGhhMS5Eb2N1bWVudENoYXRSZXF1ZXN0GioubGlxdWlkbWV0YWwudjFhbHBoYTEuRG9jdW1lbnRDaGF0UmVzcG9uc2USXAoJUmFnU2VhcmNoEiYubGlxdWlkbWV0YWwudjFhbHBoYTEuUmFnU2VhcmNoUmVxdWVzdBonLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJhZ1NlYXJjaFJlc3BvbnNlEnQKEUNyZWF0ZVBhZ2VTdW1tYXJ5Ei4ubGlxdWlkbWV0YWwudjFhbHBoYTEuQ3JlYXRlUGFnZVN1bW1hcnlSZXF1ZXN0Gi8ubGlxdWlkbWV0YWwudjFhbHBoYTEuQ3JlYXRlUGFnZVN1bW1hcnlSZXNwb25zZRJ3ChJSdW5TdXBlcnZpc29yQWdlbnQSLy5saXF1aWRtZXRhbC52MWFscGhhMS5SdW5TdXBlcnZpc29yQWdlbnRSZXF1ZXN0GjAubGlxdWlkbWV0YWwudjFhbHBoYTEuUnVuU3VwZXJ2aXNvckFnZW50UmVzcG9uc2USegoTR2V0UGFnaW5hdGVkUmVzdWx0cxIwLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldFBhZ2luYXRlZFJlc3VsdHNSZXF1ZXN0GjEubGlxdWlkbWV0YWwudjFhbHBoYTEuR2V0UGFnaW5hdGVkUmVzdWx0c1Jlc3BvbnNlQp0BChhjb20ubGlxdWlkbWV0YWwudjFhbHBoYTFCEFNlYXJjaEFnZW50UHJvdG9QAaICA0xYWKoCFExpcXVpZG1ldGFsLlYxYWxwaGExygIUTGlxdWlkbWV0YWxcVjFhbHBoYTHiAiBMaXF1aWRtZXRhbFxWMWFscGhhMVxHUEJNZXRhZGF0YeoCFUxpcXVpZG1ldGFsOjpWMWFscGhhMWIGcHJvdG8z");
9
9
  /**
10
10
  * Describes the message liquidmetal.v1alpha1.DocumentChatRequest.
11
11
  * Use `create(DocumentChatRequestSchema)` to create a new message.
@@ -66,16 +66,6 @@ export const GetPaginatedResultsRequestSchema = /*@__PURE__*/ messageDesc(file_l
66
66
  * Use `create(GetPaginatedResultsResponseSchema)` to create a new message.
67
67
  */
68
68
  export const GetPaginatedResultsResponseSchema = /*@__PURE__*/ messageDesc(file_liquidmetal_v1alpha1_search_agent, 11);
69
- /**
70
- * Describes the message liquidmetal.v1alpha1.RegisterRetrieverToolRequest.
71
- * Use `create(RegisterRetrieverToolRequestSchema)` to create a new message.
72
- */
73
- export const RegisterRetrieverToolRequestSchema = /*@__PURE__*/ messageDesc(file_liquidmetal_v1alpha1_search_agent, 12);
74
- /**
75
- * Describes the message liquidmetal.v1alpha1.RegisterRetrieverToolResponse.
76
- * Use `create(RegisterRetrieverToolResponseSchema)` to create a new message.
77
- */
78
- export const RegisterRetrieverToolResponseSchema = /*@__PURE__*/ messageDesc(file_liquidmetal_v1alpha1_search_agent, 13);
79
69
  /**
80
70
  * SearchAgentService provides the core functionality for Smart Buckets - Raindrop's intelligent
81
71
  * object storage service designed specifically for AI applications. When files are uploaded
package/dist/ulid.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export declare function monotonic(): () => string;
2
+ export declare const ulid: () => string;
3
+ export declare function ulidBatch(count: number): string[];
4
+ export declare function decodeTimeToMilliseconds(id: string): number;
5
+ export declare function decodeTimeToDate(id: string): Date;
6
+ export declare function incrementBase32(str: string): string;
7
+ //# sourceMappingURL=ulid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ulid.d.ts","sourceRoot":"","sources":["../src/ulid.ts"],"names":[],"mappings":"AAsBA,wBAAgB,SAAS,IAAI,MAAM,MAAM,CAaxC;AAED,eAAO,MAAM,IAAI,QAfkB,MAeJ,CAAC;AAEhC,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAMjD;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAa3D;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEjD;AAwBD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqBnD"}
package/dist/ulid.js ADDED
@@ -0,0 +1,107 @@
1
+ // This gives monotonic ULIDs that are sortable by time and unique across
2
+ // multiple instances of the application. The ids are 26 characters long
3
+ // and contain a 10 character timestamp followed by 16 random characters.
4
+ // The timestamp is encoded in base32 and the random characters are also
5
+ // encoded in base32. The timestamp is the number of milliseconds since
6
+ // the Unix epoch and the random characters are generated using the
7
+ // crypto.getRandomValues function that Cloudflare supports.
8
+ //
9
+ // See https://developers.cloudflare.com/workers/runtime-apis/web-crypto/
10
+ // See https://github.com/ulid/spec
11
+ //
12
+ // This has been cross-checked against the reference implementation but
13
+ // the reference implementation uses a different / configurable random number
14
+ // generator, and supports non-monotonic ids. This implementation is simpler
15
+ // and only supports monotonic ids, and Cloudflare's platform.
16
+ const BASE32_ENCODING = '0123456789abcdefghjkmnpqrstvwxyz';
17
+ const ENCODING_LEN = BASE32_ENCODING.length;
18
+ const TIME_MAX = Math.pow(2, 48) - 1;
19
+ const TIME_LEN = 10;
20
+ const RANDOM_LEN = 16;
21
+ export function monotonic() {
22
+ let lastTime = 0;
23
+ let lastRandom;
24
+ return function ulid() {
25
+ const seed = new Date().getTime();
26
+ if (seed <= lastTime) {
27
+ lastRandom = incrementBase32(lastRandom);
28
+ return encodeTime(lastTime) + lastRandom;
29
+ }
30
+ lastTime = seed;
31
+ lastRandom = encodeRandom();
32
+ return encodeTime(seed) + lastRandom;
33
+ };
34
+ }
35
+ export const ulid = monotonic();
36
+ export function ulidBatch(count) {
37
+ const batch = [];
38
+ for (let i = 0; i < count; i++) {
39
+ batch.push(ulid());
40
+ }
41
+ return batch;
42
+ }
43
+ export function decodeTimeToMilliseconds(id) {
44
+ if (id.length !== TIME_LEN + RANDOM_LEN)
45
+ throw new Error('malformed ulid');
46
+ const time = id
47
+ .substring(0, TIME_LEN)
48
+ .split('')
49
+ .reverse()
50
+ .reduce((carry, char, index) => {
51
+ const encodingIndex = BASE32_ENCODING.indexOf(char);
52
+ if (encodingIndex === -1)
53
+ throw new Error('invalid character found: ' + char);
54
+ return (carry += encodingIndex * Math.pow(ENCODING_LEN, index));
55
+ }, 0);
56
+ if (time > TIME_MAX)
57
+ throw new Error('malformed ulid, timestamp too large');
58
+ return time;
59
+ }
60
+ export function decodeTimeToDate(id) {
61
+ return new Date(decodeTimeToMilliseconds(id));
62
+ }
63
+ function encodeRandom() {
64
+ const bytes = crypto.getRandomValues(new Uint8Array(RANDOM_LEN));
65
+ let str = '';
66
+ for (let i = 0; i < RANDOM_LEN; i++) {
67
+ str = str + BASE32_ENCODING[bytes[i] % ENCODING_LEN];
68
+ }
69
+ return str;
70
+ }
71
+ function encodeTime(ms) {
72
+ if (ms > TIME_MAX)
73
+ throw new Error('cannot encode time greater than ' + TIME_MAX);
74
+ if (ms < 0)
75
+ throw new Error('time must be positive');
76
+ let mod;
77
+ let str = '';
78
+ for (let len = TIME_LEN; len > 0; len--) {
79
+ mod = ms % ENCODING_LEN;
80
+ str = BASE32_ENCODING[mod] + str;
81
+ ms = (ms - mod) / ENCODING_LEN;
82
+ }
83
+ return str;
84
+ }
85
+ export function incrementBase32(str) {
86
+ function replaceCharAt(str, index, char) {
87
+ if (index > str.length - 1)
88
+ return str;
89
+ return str.substring(0, index) + char + str.substring(index + 1);
90
+ }
91
+ const maxCharIndex = ENCODING_LEN - 1;
92
+ let index = str ? str.length : 0;
93
+ let char;
94
+ let charIndex;
95
+ while (index-- >= 0) {
96
+ char = str[index];
97
+ charIndex = BASE32_ENCODING.indexOf(char);
98
+ if (charIndex === -1)
99
+ throw new Error('incorrectly encoded string');
100
+ if (charIndex === maxCharIndex) {
101
+ str = replaceCharAt(str, index, BASE32_ENCODING[0]);
102
+ continue;
103
+ }
104
+ return replaceCharAt(str, index, BASE32_ENCODING[charIndex + 1]);
105
+ }
106
+ return str;
107
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ulid.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ulid.test.d.ts","sourceRoot":"","sources":["../src/ulid.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ import { describe, expect, it, test } from 'vitest';
2
+ import { decodeTimeToDate, decodeTimeToMilliseconds, incrementBase32, ulid, ulidBatch } from './ulid';
3
+ const BASE32_ENCODING = ' 0123456789abcdefghjkmnpqrstvwxyz';
4
+ const TIME_MAX = Math.pow(2, 48) - 1;
5
+ const TIME_LEN = 10;
6
+ const RANDOM_LEN = 16;
7
+ const ULID_LEN = TIME_LEN + RANDOM_LEN;
8
+ test('ulid is valid', () => {
9
+ const id = ulid();
10
+ expect(id.length).toBe(TIME_LEN + RANDOM_LEN);
11
+ for (let i = 0; i < ULID_LEN; i++) {
12
+ expect(BASE32_ENCODING.includes(id[i])).toBe(true);
13
+ }
14
+ });
15
+ test('ulidBatch are all valid', () => {
16
+ const ids = ulidBatch(10);
17
+ expect(ids.length).toBe(10);
18
+ for (const id of ids) {
19
+ expect(id.length).toBe(ULID_LEN);
20
+ for (let i = 0; i < ULID_LEN; i++) {
21
+ expect(BASE32_ENCODING.includes(id[i])).toBe(true);
22
+ }
23
+ }
24
+ });
25
+ test('all ids are unique', () => {
26
+ const ids = ulidBatch(1000);
27
+ const set = new Set(ids);
28
+ expect(set.size).toBe(ids.length);
29
+ });
30
+ test('time is monotonic', () => {
31
+ const ids = ulidBatch(1000);
32
+ let lastTime = 0;
33
+ for (const id of ids) {
34
+ const time = decodeTimeToMilliseconds(id);
35
+ expect(time).toBeGreaterThanOrEqual(lastTime);
36
+ lastTime = time;
37
+ }
38
+ });
39
+ test('time less than max and greater than test start time', () => {
40
+ const now = new Date().getTime();
41
+ const id = ulid();
42
+ const time = decodeTimeToMilliseconds(id);
43
+ expect(time).toBeGreaterThanOrEqual(now);
44
+ expect(time).toBeLessThanOrEqual(TIME_MAX);
45
+ });
46
+ test('decoding to date', () => {
47
+ const now = new Date().getTime();
48
+ const id = ulid();
49
+ const time = decodeTimeToDate(id).getTime();
50
+ expect(time).toBeGreaterThanOrEqual(now);
51
+ expect(time).toBeLessThanOrEqual(TIME_MAX);
52
+ });
53
+ describe('incrementBase32', () => {
54
+ it('increments single-digit strings', () => {
55
+ expect(incrementBase32('0')).toBe('1');
56
+ });
57
+ it('increments multiple-digit strings', () => {
58
+ expect(incrementBase32('aaaaa')).toBe('aaaab');
59
+ });
60
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liquidmetal-ai/drizzle",
3
- "version": "0.2.11",
3
+ "version": "0.3.0",
4
4
  "description": "Raindrop core operational libraries",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -45,4 +45,4 @@
45
45
  "types": "./dist/*.d.ts"
46
46
  }
47
47
  }
48
- }
48
+ }
@@ -12,7 +12,7 @@ import type { JsonObject, Message } from "@bufbuild/protobuf";
12
12
  * Describes the file liquidmetal/v1alpha1/catalog.proto.
13
13
  */
14
14
  export const file_liquidmetal_v1alpha1_catalog: GenFile = /*@__PURE__*/
15
- fileDesc("CiJsaXF1aWRtZXRhbC92MWFscGhhMS9jYXRhbG9nLnByb3RvEhRsaXF1aWRtZXRhbC52MWFscGhhMSKHAQoTQXBwbGljYXRpb25zUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIUCgxzaG93X2RlbGV0ZWQYAyABKAgSHAoPbmV4dF9wYWdlX3Rva2VuGAQgASgJSACIAQFCEgoQX25leHRfcGFnZV90b2tlbiKEBQoUQXBwbGljYXRpb25zUmVzcG9uc2USTAoMYXBwbGljYXRpb25zGAEgAygLMjYubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2UuQXBwbGljYXRpb24SHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEa6wMKC0FwcGxpY2F0aW9uEgwKBG5hbWUYASABKAkSEgoKdmVyc2lvbl9pZBgCIAEoCRIQCghtYW5pZmVzdBgDIAEoCRISCgVzdWl0ZRgEIAEoCUgAiAEBEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmRlbGV0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESEQoJaXNfYWN0aXZlGAggASgIEhcKD29yZ2FuaXphdGlvbl9pZBgJIAEoCRITCgZicmFuY2gYCiABKAlIAogBARIUCgxpc19zYW5kYm94ZWQYCyABKAgSIAoTcHJldmlvdXNfdmVyc2lvbl9pZBgMIAEoCUgDiAEBEi4KBXN0YXRlGA0gASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEhEKBGxvY2sYDiABKAlIBIgBAUIICgZfc3VpdGVCDQoLX2RlbGV0ZWRfYXRCCQoHX2JyYW5jaEIWChRfcHJldmlvdXNfdmVyc2lvbl9pZEIHCgVfbG9ja0ISChBfbmV4dF9wYWdlX3Rva2VuItIBChBCb290c3RyYXBSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEg0KBXRva2VuGAMgASgJEh0KFWNsb3VkZmxhcmVfYWNjb3VudF9pZBgEIAEoCRIfChdjbG91ZGZsYXJlX2JlYXJlcl90b2tlbhgFIAEoCRIjChtsaXF1aWRtZXRhbF9zZXJ2aWNlc19kb21haW4YBiABKAkSIAoYY3VzdG9tZXJfc2VydmljZXNfZG9tYWluGAcgASgJIhMKEUJvb3RzdHJhcFJlc3BvbnNlIiwKKkludGVybmFsQXBwbGljYXRpb25zUmVxdWVzdFBhZ2luYXRpb25Ub2tlbiLeAQoTVXBsb2FkQnVuZGxlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYBCABKAkSEwoLYnVuZGxlX25hbWUYBSABKAkSPQoMYXJjaGl2ZV90eXBlGAYgASgOMicubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVuZGxlQXJjaGl2ZVR5cGUSDwoHYXJjaGl2ZRgHIAEoDCIWChRVcGxvYWRCdW5kbGVSZXNwb25zZSJ7ChVRdWVyeVJlc291cmNlc1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIeChZhcHBsaWNhdGlvbl92ZXJzaW9uX2lkGAQgASgJItUHChZRdWVyeVJlc291cmNlc1Jlc3BvbnNlEkgKCXJlc291cmNlcxgBIAMoCzI1LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2UuUmVzb3VyY2USHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEavgYKCFJlc291cmNlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAIgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYAyABKAkSEwoLcmVzb3VyY2VfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJElkKDXJlc291cmNlX3R5cGUYByABKA4yQi5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeVJlc291cmNlc1Jlc3BvbnNlLlJlc291cmNlLlJlc291cmNlVHlwZRIrCgphdHRyaWJ1dGVzGAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpjcmVhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLFAwoMUmVzb3VyY2VUeXBlEh0KGVJFU09VUkNFX1RZUEVfVU5TUEVDSUZJRUQQABIgChxSRVNPVVJDRV9UWVBFX1FVRVVFX0NPTlNVTUVSEAESGAoUUkVTT1VSQ0VfVFlQRV9TQ1JJUFQQAhIUChBSRVNPVVJDRV9UWVBFX0QxEAMSGgoWUkVTT1VSQ0VfVFlQRV9EMV9RVUVSWRAEEhsKF1JFU09VUkNFX1RZUEVfVkVDVE9SSVpFEAUSGQoVUkVTT1VSQ0VfVFlQRV9FTlZfVkFSEAYSGAoUUkVTT1VSQ0VfVFlQRV9CVUNLRVQQBxIXChNSRVNPVVJDRV9UWVBFX1FVRVVFEAgSIAocUkVTT1VSQ0VfVFlQRV9TQ1JJUFRfQklORElORxAJEiUKIVJFU09VUkNFX1RZUEVfQlVDS0VUX05PVElGSUNBVElPThAKEhoKFlJFU09VUkNFX1RZUEVfTUVUQURBVEEQCxIfChtSRVNPVVJDRV9UWVBFX0NVU1RPTV9ET01BSU4QDBIXChNSRVNPVVJDRV9UWVBFX1JPVVRFEA0SHgoaUkVTT1VSQ0VfVFlQRV9TTUFSVF9CVUNLRVQQDkISChBfbmV4dF9wYWdlX3Rva2VuIqQECg1EZXBsb3lSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkUKDGFwcGxpY2F0aW9ucxgDIAMoCzIvLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlcXVlc3QuQXBwbGljYXRpb24aLgoTQXBwbGljYXRpb25NZXRhZGF0YRIXCg9ydW50aW1lX3ZlcnNpb24YASABKAka8QIKC0FwcGxpY2F0aW9uEg0KBXN1aXRlGAEgASgJEhMKC2FwcGxpY2F0aW9uGAIgASgJEiAKE3ByZXZpb3VzX3ZlcnNpb25faWQYAyABKAlIAIgBARIfChJjdXJyZW50X3ZlcnNpb25faWQYBCABKAlIAYgBARITCgZicmFuY2gYBSABKAlIAogBARIQCghtYW5pZmVzdBgGIAEoCRJJCghtZXRhZGF0YRgHIAEoCzI3LmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlcXVlc3QuQXBwbGljYXRpb25NZXRhZGF0YRINCgVhbWVuZBgIIAEoCBIWCglpc19hY3RpdmUYCSABKAhIA4gBARIRCgRsb2NrGAogASgJSASIAQFCFgoUX3ByZXZpb3VzX3ZlcnNpb25faWRCFQoTX2N1cnJlbnRfdmVyc2lvbl9pZEIJCgdfYnJhbmNoQgwKCl9pc19hY3RpdmVCBwoFX2xvY2si1AEKDkRlcGxveVJlc3BvbnNlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRJGCgxhcHBsaWNhdGlvbnMYAiADKAsyMC5saXF1aWRtZXRhbC52MWFscGhhMS5EZXBsb3lSZXNwb25zZS5BcHBsaWNhdGlvbhphCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIOCgZicmFuY2gYAyABKAkSDAoEbG9jaxgEIAEoCSLeAQoOU2V0RW52c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSNgoEZW52cxgDIAMoCzIoLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEVudnNSZXF1ZXN0LkVudhpqCgNFbnYSGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkSCwoDa2V5GAMgASgJEg0KBXZhbHVlGAQgASgJEhEKCWlzX3NlY3JldBgFIAEoCCIRCg9TZXRFbnZzUmVzcG9uc2UivAEKDkdldEVudnNSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEjYKBGVudnMYAyADKAsyKC5saXF1aWRtZXRhbC52MWFscGhhMS5HZXRFbnZzUmVxdWVzdC5FbnYaSAoDRW52EhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEgsKA2tleRgDIAEoCSK2AQoPR2V0RW52c1Jlc3BvbnNlEjcKBGVudnMYASADKAsyKS5saXF1aWRtZXRhbC52MWFscGhhMS5HZXRFbnZzUmVzcG9uc2UuRW52GmoKA0VudhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRILCgNrZXkYAyABKAkSDQoFdmFsdWUYBCABKAkSEQoJaXNfc2VjcmV0GAUgASgIIsABCg5SZWxlYXNlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRI4CgVsb2NrcxgDIAMoCzIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlbGVhc2VSZXF1ZXN0LkxvY2saSgoETG9jaxIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIMCgRsb2NrGAMgASgJIhEKD1JlbGVhc2VSZXNwb25zZSLDAQoMV2F0Y2hSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkQKDGFwcGxpY2F0aW9ucxgDIAMoCzIuLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVxdWVzdC5BcHBsaWNhdGlvbhpDCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCSKZAQoNV2F0Y2hSZXNwb25zZRIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIQCghldmVudF9pZBgDIAEoCRJACgpldmVudF90eXBlGAQgASgOMiwubGlxdWlkbWV0YWwudjFhbHBoYTEuV2F0Y2hSZXNwb25zZUV2ZW50VHlwZSLFAQoNRGVsZXRlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRJFCgxhcHBsaWNhdGlvbnMYAyADKAsyLy5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVSZXF1ZXN0LkFwcGxpY2F0aW9uGkMKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJIhAKDkRlbGV0ZVJlc3BvbnNlIt4BChBTZXRBY3RpdmVSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkgKDGFwcGxpY2F0aW9ucxgDIAMoCzIyLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEFjdGl2ZVJlcXVlc3QuQXBwbGljYXRpb24aVgoLQXBwbGljYXRpb24SGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkSEQoJaXNfYWN0aXZlGAMgASgIIhMKEVNldEFjdGl2ZVJlc3BvbnNlIuMBChFTZXRTYW5kYm94UmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRJJCgxhcHBsaWNhdGlvbnMYAyADKAsyMy5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRTYW5kYm94UmVxdWVzdC5BcHBsaWNhdGlvbhpZCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIUCgxpc19zYW5kYm94ZWQYAyABKAgiFAoSU2V0U2FuZGJveFJlc3BvbnNlIm8KDVN0YXR1c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYBCABKAki8AEKDlN0YXR1c1Jlc3BvbnNlEi4KBXN0YXRlGAEgASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEjwKB21vZHVsZXMYAiADKAsyKy5saXF1aWRtZXRhbC52MWFscGhhMS5TdGF0dXNSZXNwb25zZS5Nb2R1bGUSEQoEbG9jaxgDIAEoCUgAiAEBGlQKBk1vZHVsZRIMCgRuYW1lGAEgASgJEi4KBXN0YXRlGAIgASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEgwKBHVybHMYAyADKAlCBwoFX2xvY2sq0gEKCVVuaXRTdGF0ZRIaChZVTklUX1NUQVRFX1VOU1BFQ0lGSUVEEAASFgoSVU5JVF9TVEFURV9QRU5ESU5HEAESFwoTVU5JVF9TVEFURV9TVEFSVElORxACEhYKElVOSVRfU1RBVEVfUlVOTklORxADEhcKE1VOSVRfU1RBVEVfU1RPUFBJTkcQBBIWChJVTklUX1NUQVRFX1NUT1BQRUQQBRIXChNVTklUX1NUQVRFX0RFTEVUSU5HEAYSFgoSVU5JVF9TVEFURV9ERUxFVEVEEAcqVQoRQnVuZGxlQXJjaGl2ZVR5cGUSIwofQlVORExFX0FSQ0hJVkVfVFlQRV9VTlNQRUNJRklFRBAAEhsKF0JVTkRMRV9BUkNISVZFX1RZUEVfWklQEAEqkgEKFldhdGNoUmVzcG9uc2VFdmVudFR5cGUSKQolV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9VTlNQRUNJRklFRBAAEiUKIVdBVENIX1JFU1BPTlNFX0VWRU5UX1RZUEVfTUVTU0FHRRABEiYKIldBVENIX1JFU1BPTlNFX0VWRU5UX1RZUEVfQ09NUExFVEUQAjLDCQoOQ2F0YWxvZ1NlcnZpY2USawoOUXVlcnlSZXNvdXJjZXMSKy5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeVJlc291cmNlc1JlcXVlc3QaLC5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeVJlc291cmNlc1Jlc3BvbnNlElwKCUJvb3RzdHJhcBImLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJvb3RzdHJhcFJlcXVlc3QaJy5saXF1aWRtZXRhbC52MWFscGhhMS5Cb290c3RyYXBSZXNwb25zZRJlCgxBcHBsaWNhdGlvbnMSKS5saXF1aWRtZXRhbC52MWFscGhhMS5BcHBsaWNhdGlvbnNSZXF1ZXN0GioubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2USUwoGRGVwbG95EiMubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdBokLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlc3BvbnNlEmUKDFVwbG9hZEJ1bmRsZRIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLlVwbG9hZEJ1bmRsZVJlcXVlc3QaKi5saXF1aWRtZXRhbC52MWFscGhhMS5VcGxvYWRCdW5kbGVSZXNwb25zZRJWCgdTZXRFbnZzEiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0RW52c1JlcXVlc3QaJS5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRFbnZzUmVzcG9uc2USVgoHR2V0RW52cxIkLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXF1ZXN0GiUubGlxdWlkbWV0YWwudjFhbHBoYTEuR2V0RW52c1Jlc3BvbnNlElYKB1JlbGVhc2USJC5saXF1aWRtZXRhbC52MWFscGhhMS5SZWxlYXNlUmVxdWVzdBolLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlbGVhc2VSZXNwb25zZRJSCgVXYXRjaBIiLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVxdWVzdBojLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVzcG9uc2UwARJTCgZEZWxldGUSIy5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVsZXRlUmVzcG9uc2USXAoJU2V0QWN0aXZlEiYubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0QWN0aXZlUmVxdWVzdBonLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEFjdGl2ZVJlc3BvbnNlEl8KClNldFNhbmRib3gSJy5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRTYW5kYm94UmVxdWVzdBooLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldFNhbmRib3hSZXNwb25zZRJTCgZTdGF0dXMSIy5saXF1aWRtZXRhbC52MWFscGhhMS5TdGF0dXNSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU3RhdHVzUmVzcG9uc2VCmQEKGGNvbS5saXF1aWRtZXRhbC52MWFscGhhMUIMQ2F0YWxvZ1Byb3RvUAGiAgNMWFiqAhRMaXF1aWRtZXRhbC5WMWFscGhhMcoCFExpcXVpZG1ldGFsXFYxYWxwaGEx4gIgTGlxdWlkbWV0YWxcVjFhbHBoYTFcR1BCTWV0YWRhdGHqAhVMaXF1aWRtZXRhbDo6VjFhbHBoYTFiBnByb3RvMw", [file_google_protobuf_struct, file_google_protobuf_timestamp]);
15
+ fileDesc("CiJsaXF1aWRtZXRhbC92MWFscGhhMS9jYXRhbG9nLnByb3RvEhRsaXF1aWRtZXRhbC52MWFscGhhMSKHAQoTQXBwbGljYXRpb25zUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIUCgxzaG93X2RlbGV0ZWQYAyABKAgSHAoPbmV4dF9wYWdlX3Rva2VuGAQgASgJSACIAQFCEgoQX25leHRfcGFnZV90b2tlbiKEBQoUQXBwbGljYXRpb25zUmVzcG9uc2USTAoMYXBwbGljYXRpb25zGAEgAygLMjYubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2UuQXBwbGljYXRpb24SHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEa6wMKC0FwcGxpY2F0aW9uEgwKBG5hbWUYASABKAkSEgoKdmVyc2lvbl9pZBgCIAEoCRIQCghtYW5pZmVzdBgDIAEoCRISCgVzdWl0ZRgEIAEoCUgAiAEBEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmRlbGV0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESEQoJaXNfYWN0aXZlGAggASgIEhcKD29yZ2FuaXphdGlvbl9pZBgJIAEoCRITCgZicmFuY2gYCiABKAlIAogBARIUCgxpc19zYW5kYm94ZWQYCyABKAgSIAoTcHJldmlvdXNfdmVyc2lvbl9pZBgMIAEoCUgDiAEBEi4KBXN0YXRlGA0gASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEhEKBGxvY2sYDiABKAlIBIgBAUIICgZfc3VpdGVCDQoLX2RlbGV0ZWRfYXRCCQoHX2JyYW5jaEIWChRfcHJldmlvdXNfdmVyc2lvbl9pZEIHCgVfbG9ja0ISChBfbmV4dF9wYWdlX3Rva2VuItIBChBCb290c3RyYXBSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEg0KBXRva2VuGAMgASgJEh0KFWNsb3VkZmxhcmVfYWNjb3VudF9pZBgEIAEoCRIfChdjbG91ZGZsYXJlX2JlYXJlcl90b2tlbhgFIAEoCRIjChtsaXF1aWRtZXRhbF9zZXJ2aWNlc19kb21haW4YBiABKAkSIAoYY3VzdG9tZXJfc2VydmljZXNfZG9tYWluGAcgASgJIhMKEUJvb3RzdHJhcFJlc3BvbnNlIiwKKkludGVybmFsQXBwbGljYXRpb25zUmVxdWVzdFBhZ2luYXRpb25Ub2tlbiLeAQoTVXBsb2FkQnVuZGxlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYBCABKAkSEwoLYnVuZGxlX25hbWUYBSABKAkSPQoMYXJjaGl2ZV90eXBlGAYgASgOMicubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVuZGxlQXJjaGl2ZVR5cGUSDwoHYXJjaGl2ZRgHIAEoDCIWChRVcGxvYWRCdW5kbGVSZXNwb25zZSJ7ChVRdWVyeVJlc291cmNlc1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIeChZhcHBsaWNhdGlvbl92ZXJzaW9uX2lkGAQgASgJItUHChZRdWVyeVJlc291cmNlc1Jlc3BvbnNlEkgKCXJlc291cmNlcxgBIAMoCzI1LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2UuUmVzb3VyY2USHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEavgYKCFJlc291cmNlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAIgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYAyABKAkSEwoLcmVzb3VyY2VfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJElkKDXJlc291cmNlX3R5cGUYByABKA4yQi5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeVJlc291cmNlc1Jlc3BvbnNlLlJlc291cmNlLlJlc291cmNlVHlwZRIrCgphdHRyaWJ1dGVzGAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpjcmVhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLFAwoMUmVzb3VyY2VUeXBlEh0KGVJFU09VUkNFX1RZUEVfVU5TUEVDSUZJRUQQABIgChxSRVNPVVJDRV9UWVBFX1FVRVVFX0NPTlNVTUVSEAESGAoUUkVTT1VSQ0VfVFlQRV9TQ1JJUFQQAhIUChBSRVNPVVJDRV9UWVBFX0QxEAMSGgoWUkVTT1VSQ0VfVFlQRV9EMV9RVUVSWRAEEhsKF1JFU09VUkNFX1RZUEVfVkVDVE9SSVpFEAUSGQoVUkVTT1VSQ0VfVFlQRV9FTlZfVkFSEAYSGAoUUkVTT1VSQ0VfVFlQRV9CVUNLRVQQBxIXChNSRVNPVVJDRV9UWVBFX1FVRVVFEAgSIAocUkVTT1VSQ0VfVFlQRV9TQ1JJUFRfQklORElORxAJEiUKIVJFU09VUkNFX1RZUEVfQlVDS0VUX05PVElGSUNBVElPThAKEhoKFlJFU09VUkNFX1RZUEVfTUVUQURBVEEQCxIfChtSRVNPVVJDRV9UWVBFX0NVU1RPTV9ET01BSU4QDBIXChNSRVNPVVJDRV9UWVBFX1JPVVRFEA0SHgoaUkVTT1VSQ0VfVFlQRV9TTUFSVF9CVUNLRVQQDkISChBfbmV4dF9wYWdlX3Rva2VuIqQECg1EZXBsb3lSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkUKDGFwcGxpY2F0aW9ucxgDIAMoCzIvLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlcXVlc3QuQXBwbGljYXRpb24aLgoTQXBwbGljYXRpb25NZXRhZGF0YRIXCg9ydW50aW1lX3ZlcnNpb24YASABKAka8QIKC0FwcGxpY2F0aW9uEg0KBXN1aXRlGAEgASgJEhMKC2FwcGxpY2F0aW9uGAIgASgJEiAKE3ByZXZpb3VzX3ZlcnNpb25faWQYAyABKAlIAIgBARIfChJjdXJyZW50X3ZlcnNpb25faWQYBCABKAlIAYgBARITCgZicmFuY2gYBSABKAlIAogBARIQCghtYW5pZmVzdBgGIAEoCRJJCghtZXRhZGF0YRgHIAEoCzI3LmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlcXVlc3QuQXBwbGljYXRpb25NZXRhZGF0YRINCgVhbWVuZBgIIAEoCBIWCglpc19hY3RpdmUYCSABKAhIA4gBARIRCgRsb2NrGAogASgJSASIAQFCFgoUX3ByZXZpb3VzX3ZlcnNpb25faWRCFQoTX2N1cnJlbnRfdmVyc2lvbl9pZEIJCgdfYnJhbmNoQgwKCl9pc19hY3RpdmVCBwoFX2xvY2si1AEKDkRlcGxveVJlc3BvbnNlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRJGCgxhcHBsaWNhdGlvbnMYAiADKAsyMC5saXF1aWRtZXRhbC52MWFscGhhMS5EZXBsb3lSZXNwb25zZS5BcHBsaWNhdGlvbhphCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIOCgZicmFuY2gYAyABKAkSDAoEbG9jaxgEIAEoCSLeAQoOU2V0RW52c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSNgoEZW52cxgDIAMoCzIoLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEVudnNSZXF1ZXN0LkVudhpqCgNFbnYSGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkSCwoDa2V5GAMgASgJEg0KBXZhbHVlGAQgASgJEhEKCWlzX3NlY3JldBgFIAEoCCIRCg9TZXRFbnZzUmVzcG9uc2UivAEKDkdldEVudnNSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEjYKBGVudnMYAyADKAsyKC5saXF1aWRtZXRhbC52MWFscGhhMS5HZXRFbnZzUmVxdWVzdC5FbnYaSAoDRW52EhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEgsKA2tleRgDIAEoCSK2AQoPR2V0RW52c1Jlc3BvbnNlEjcKBGVudnMYASADKAsyKS5saXF1aWRtZXRhbC52MWFscGhhMS5HZXRFbnZzUmVzcG9uc2UuRW52GmoKA0VudhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRILCgNrZXkYAyABKAkSDQoFdmFsdWUYBCABKAkSEQoJaXNfc2VjcmV0GAUgASgIIsABCg5SZWxlYXNlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRI4CgVsb2NrcxgDIAMoCzIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlbGVhc2VSZXF1ZXN0LkxvY2saSgoETG9jaxIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIMCgRsb2NrGAMgASgJIhEKD1JlbGVhc2VSZXNwb25zZSLDAQoMV2F0Y2hSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkQKDGFwcGxpY2F0aW9ucxgDIAMoCzIuLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVxdWVzdC5BcHBsaWNhdGlvbhpDCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCSKZAQoNV2F0Y2hSZXNwb25zZRIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIQCghldmVudF9pZBgDIAEoCRJACgpldmVudF90eXBlGAQgASgOMiwubGlxdWlkbWV0YWwudjFhbHBoYTEuV2F0Y2hSZXNwb25zZUV2ZW50VHlwZSLFAQoNRGVsZXRlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRJFCgxhcHBsaWNhdGlvbnMYAyADKAsyLy5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVSZXF1ZXN0LkFwcGxpY2F0aW9uGkMKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJIhAKDkRlbGV0ZVJlc3BvbnNlIt4BChBTZXRBY3RpdmVSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkgKDGFwcGxpY2F0aW9ucxgDIAMoCzIyLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEFjdGl2ZVJlcXVlc3QuQXBwbGljYXRpb24aVgoLQXBwbGljYXRpb24SGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkSEQoJaXNfYWN0aXZlGAMgASgIIhMKEVNldEFjdGl2ZVJlc3BvbnNlIuMBChFTZXRTYW5kYm94UmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRJJCgxhcHBsaWNhdGlvbnMYAyADKAsyMy5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRTYW5kYm94UmVxdWVzdC5BcHBsaWNhdGlvbhpZCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIUCgxpc19zYW5kYm94ZWQYAyABKAgiFAoSU2V0U2FuZGJveFJlc3BvbnNlIm8KDVN0YXR1c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYBCABKAki8AEKDlN0YXR1c1Jlc3BvbnNlEi4KBXN0YXRlGAEgASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEjwKB21vZHVsZXMYAiADKAsyKy5saXF1aWRtZXRhbC52MWFscGhhMS5TdGF0dXNSZXNwb25zZS5Nb2R1bGUSEQoEbG9jaxgDIAEoCUgAiAEBGlQKBk1vZHVsZRIMCgRuYW1lGAEgASgJEi4KBXN0YXRlGAIgASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEgwKBHVybHMYAyADKAlCBwoFX2xvY2sijgEKE1F1ZXJ5TW9kdWxlc1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIeChZhcHBsaWNhdGlvbl92ZXJzaW9uX2lkGAQgASgJEhMKC21vZHVsZV90eXBlGAUgASgJIsMEChRRdWVyeU1vZHVsZXNSZXNwb25zZRJCCgdtb2R1bGVzGAEgAygLMjEubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuTW9kdWxlEhwKD25leHRfcGFnZV90b2tlbhgCIAEoCUgAiAEBGuUCCgZNb2R1bGUSFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEhgKEGFwcGxpY2F0aW9uX25hbWUYAiABKAkSHgoWYXBwbGljYXRpb25fdmVyc2lvbl9pZBgDIAEoCRIRCgltb2R1bGVfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJEkwKDXJlc291cmNlX3R5cGUYByABKA4yNS5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5Nb2R1bGVUeXBlEisKCmF0dHJpYnV0ZXMYCCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei4KCmNyZWF0ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIk0KCk1vZHVsZVR5cGUSIQodTU9EVUxFX1RZUEVfU01BUlRfVU5TUEVDSUZJRUQQABIcChhNT0RVTEVfVFlQRV9TTUFSVF9CVUNLRVQQAUISChBfbmV4dF9wYWdlX3Rva2VuKtIBCglVbml0U3RhdGUSGgoWVU5JVF9TVEFURV9VTlNQRUNJRklFRBAAEhYKElVOSVRfU1RBVEVfUEVORElORxABEhcKE1VOSVRfU1RBVEVfU1RBUlRJTkcQAhIWChJVTklUX1NUQVRFX1JVTk5JTkcQAxIXChNVTklUX1NUQVRFX1NUT1BQSU5HEAQSFgoSVU5JVF9TVEFURV9TVE9QUEVEEAUSFwoTVU5JVF9TVEFURV9ERUxFVElORxAGEhYKElVOSVRfU1RBVEVfREVMRVRFRBAHKlUKEUJ1bmRsZUFyY2hpdmVUeXBlEiMKH0JVTkRMRV9BUkNISVZFX1RZUEVfVU5TUEVDSUZJRUQQABIbChdCVU5ETEVfQVJDSElWRV9UWVBFX1pJUBABKpIBChZXYXRjaFJlc3BvbnNlRXZlbnRUeXBlEikKJVdBVENIX1JFU1BPTlNFX0VWRU5UX1RZUEVfVU5TUEVDSUZJRUQQABIlCiFXQVRDSF9SRVNQT05TRV9FVkVOVF9UWVBFX01FU1NBR0UQARImCiJXQVRDSF9SRVNQT05TRV9FVkVOVF9UWVBFX0NPTVBMRVRFEAIyqgoKDkNhdGFsb2dTZXJ2aWNlEmsKDlF1ZXJ5UmVzb3VyY2VzEisubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlSZXNvdXJjZXNSZXF1ZXN0GiwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlSZXNvdXJjZXNSZXNwb25zZRJlCgxRdWVyeU1vZHVsZXMSKS5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXF1ZXN0GioubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2USXAoJQm9vdHN0cmFwEiYubGlxdWlkbWV0YWwudjFhbHBoYTEuQm9vdHN0cmFwUmVxdWVzdBonLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJvb3RzdHJhcFJlc3BvbnNlEmUKDEFwcGxpY2F0aW9ucxIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLkFwcGxpY2F0aW9uc1JlcXVlc3QaKi5saXF1aWRtZXRhbC52MWFscGhhMS5BcHBsaWNhdGlvbnNSZXNwb25zZRJTCgZEZXBsb3kSIy5saXF1aWRtZXRhbC52MWFscGhhMS5EZXBsb3lSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVzcG9uc2USZQoMVXBsb2FkQnVuZGxlEikubGlxdWlkbWV0YWwudjFhbHBoYTEuVXBsb2FkQnVuZGxlUmVxdWVzdBoqLmxpcXVpZG1ldGFsLnYxYWxwaGExLlVwbG9hZEJ1bmRsZVJlc3BvbnNlElYKB1NldEVudnMSJC5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRFbnZzUmVxdWVzdBolLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEVudnNSZXNwb25zZRJWCgdHZXRFbnZzEiQubGlxdWlkbWV0YWwudjFhbHBoYTEuR2V0RW52c1JlcXVlc3QaJS5saXF1aWRtZXRhbC52MWFscGhhMS5HZXRFbnZzUmVzcG9uc2USVgoHUmVsZWFzZRIkLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlbGVhc2VSZXF1ZXN0GiUubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVsZWFzZVJlc3BvbnNlElIKBVdhdGNoEiIubGlxdWlkbWV0YWwudjFhbHBoYTEuV2F0Y2hSZXF1ZXN0GiMubGlxdWlkbWV0YWwudjFhbHBoYTEuV2F0Y2hSZXNwb25zZTABElMKBkRlbGV0ZRIjLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlbGV0ZVJlcXVlc3QaJC5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVSZXNwb25zZRJcCglTZXRBY3RpdmUSJi5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRBY3RpdmVSZXF1ZXN0GicubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0QWN0aXZlUmVzcG9uc2USXwoKU2V0U2FuZGJveBInLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldFNhbmRib3hSZXF1ZXN0GigubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0U2FuZGJveFJlc3BvbnNlElMKBlN0YXR1cxIjLmxpcXVpZG1ldGFsLnYxYWxwaGExLlN0YXR1c1JlcXVlc3QaJC5saXF1aWRtZXRhbC52MWFscGhhMS5TdGF0dXNSZXNwb25zZUKZAQoYY29tLmxpcXVpZG1ldGFsLnYxYWxwaGExQgxDYXRhbG9nUHJvdG9QAaICA0xYWKoCFExpcXVpZG1ldGFsLlYxYWxwaGExygIUTGlxdWlkbWV0YWxcVjFhbHBoYTHiAiBMaXF1aWRtZXRhbFxWMWFscGhhMVxHUEJNZXRhZGF0YeoCFUxpcXVpZG1ldGFsOjpWMWFscGhhMWIGcHJvdG8z", [file_google_protobuf_struct, file_google_protobuf_timestamp]);
16
16
 
17
17
  /**
18
18
  * @generated from message liquidmetal.v1alpha1.ApplicationsRequest
@@ -1309,6 +1309,151 @@ export type StatusResponse_Module = Message<"liquidmetal.v1alpha1.StatusResponse
1309
1309
  export const StatusResponse_ModuleSchema: GenMessage<StatusResponse_Module> = /*@__PURE__*/
1310
1310
  messageDesc(file_liquidmetal_v1alpha1_catalog, 26, 0);
1311
1311
 
1312
+ /**
1313
+ * @generated from message liquidmetal.v1alpha1.QueryModulesRequest
1314
+ */
1315
+ export type QueryModulesRequest = Message<"liquidmetal.v1alpha1.QueryModulesRequest"> & {
1316
+ /**
1317
+ * @generated from field: string user_id = 1;
1318
+ */
1319
+ userId: string;
1320
+
1321
+ /**
1322
+ * @generated from field: string organization_id = 2;
1323
+ */
1324
+ organizationId: string;
1325
+
1326
+ /**
1327
+ * @generated from field: string application_name = 3;
1328
+ */
1329
+ applicationName: string;
1330
+
1331
+ /**
1332
+ * @generated from field: string application_version_id = 4;
1333
+ */
1334
+ applicationVersionId: string;
1335
+
1336
+ /**
1337
+ * @generated from field: string module_type = 5;
1338
+ */
1339
+ moduleType: string;
1340
+ };
1341
+
1342
+ /**
1343
+ * Describes the message liquidmetal.v1alpha1.QueryModulesRequest.
1344
+ * Use `create(QueryModulesRequestSchema)` to create a new message.
1345
+ */
1346
+ export const QueryModulesRequestSchema: GenMessage<QueryModulesRequest> = /*@__PURE__*/
1347
+ messageDesc(file_liquidmetal_v1alpha1_catalog, 27);
1348
+
1349
+ /**
1350
+ * @generated from message liquidmetal.v1alpha1.QueryModulesResponse
1351
+ */
1352
+ export type QueryModulesResponse = Message<"liquidmetal.v1alpha1.QueryModulesResponse"> & {
1353
+ /**
1354
+ * @generated from field: repeated liquidmetal.v1alpha1.QueryModulesResponse.Module modules = 1;
1355
+ */
1356
+ modules: QueryModulesResponse_Module[];
1357
+
1358
+ /**
1359
+ * @generated from field: optional string next_page_token = 2;
1360
+ */
1361
+ nextPageToken?: string;
1362
+ };
1363
+
1364
+ /**
1365
+ * Describes the message liquidmetal.v1alpha1.QueryModulesResponse.
1366
+ * Use `create(QueryModulesResponseSchema)` to create a new message.
1367
+ */
1368
+ export const QueryModulesResponseSchema: GenMessage<QueryModulesResponse> = /*@__PURE__*/
1369
+ messageDesc(file_liquidmetal_v1alpha1_catalog, 28);
1370
+
1371
+ /**
1372
+ * @generated from message liquidmetal.v1alpha1.QueryModulesResponse.Module
1373
+ */
1374
+ export type QueryModulesResponse_Module = Message<"liquidmetal.v1alpha1.QueryModulesResponse.Module"> & {
1375
+ /**
1376
+ * @generated from field: string organization_id = 1;
1377
+ */
1378
+ organizationId: string;
1379
+
1380
+ /**
1381
+ * @generated from field: string application_name = 2;
1382
+ */
1383
+ applicationName: string;
1384
+
1385
+ /**
1386
+ * @generated from field: string application_version_id = 3;
1387
+ */
1388
+ applicationVersionId: string;
1389
+
1390
+ /**
1391
+ * @generated from field: string module_id = 4;
1392
+ */
1393
+ moduleId: string;
1394
+
1395
+ /**
1396
+ * @generated from field: string name = 5;
1397
+ */
1398
+ name: string;
1399
+
1400
+ /**
1401
+ * type and module_type represent the same concept except one is a string
1402
+ * and one is an enum.
1403
+ *
1404
+ * @generated from field: string type = 6;
1405
+ */
1406
+ type: string;
1407
+
1408
+ /**
1409
+ * @generated from field: liquidmetal.v1alpha1.QueryModulesResponse.ModuleType resource_type = 7;
1410
+ */
1411
+ resourceType: QueryModulesResponse_ModuleType;
1412
+
1413
+ /**
1414
+ * @generated from field: google.protobuf.Struct attributes = 8;
1415
+ */
1416
+ attributes?: JsonObject;
1417
+
1418
+ /**
1419
+ * @generated from field: google.protobuf.Timestamp created_at = 9;
1420
+ */
1421
+ createdAt?: Timestamp;
1422
+
1423
+ /**
1424
+ * @generated from field: google.protobuf.Timestamp updated_at = 10;
1425
+ */
1426
+ updatedAt?: Timestamp;
1427
+ };
1428
+
1429
+ /**
1430
+ * Describes the message liquidmetal.v1alpha1.QueryModulesResponse.Module.
1431
+ * Use `create(QueryModulesResponse_ModuleSchema)` to create a new message.
1432
+ */
1433
+ export const QueryModulesResponse_ModuleSchema: GenMessage<QueryModulesResponse_Module> = /*@__PURE__*/
1434
+ messageDesc(file_liquidmetal_v1alpha1_catalog, 28, 0);
1435
+
1436
+ /**
1437
+ * @generated from enum liquidmetal.v1alpha1.QueryModulesResponse.ModuleType
1438
+ */
1439
+ export enum QueryModulesResponse_ModuleType {
1440
+ /**
1441
+ * @generated from enum value: MODULE_TYPE_SMART_UNSPECIFIED = 0;
1442
+ */
1443
+ SMART_UNSPECIFIED = 0,
1444
+
1445
+ /**
1446
+ * @generated from enum value: MODULE_TYPE_SMART_BUCKET = 1;
1447
+ */
1448
+ SMART_BUCKET = 1,
1449
+ }
1450
+
1451
+ /**
1452
+ * Describes the enum liquidmetal.v1alpha1.QueryModulesResponse.ModuleType.
1453
+ */
1454
+ export const QueryModulesResponse_ModuleTypeSchema: GenEnum<QueryModulesResponse_ModuleType> = /*@__PURE__*/
1455
+ enumDesc(file_liquidmetal_v1alpha1_catalog, 28, 0);
1456
+
1312
1457
  /**
1313
1458
  * UnitState is the state of an application, module or resource.
1314
1459
  *
@@ -1434,6 +1579,18 @@ export const CatalogService: GenService<{
1434
1579
  input: typeof QueryResourcesRequestSchema;
1435
1580
  output: typeof QueryResourcesResponseSchema;
1436
1581
  },
1582
+ /**
1583
+ * QueryModules returns the application modules for a given query,
1584
+ * for example, not the underlying physical resources for a versioned bucket
1585
+ * but instead the interface to access the bucket
1586
+ *
1587
+ * @generated from rpc liquidmetal.v1alpha1.CatalogService.QueryModules
1588
+ */
1589
+ queryModules: {
1590
+ methodKind: "unary";
1591
+ input: typeof QueryModulesRequestSchema;
1592
+ output: typeof QueryModulesResponseSchema;
1593
+ },
1437
1594
  /**
1438
1595
  * Bootstrap is a special RPC that is used to bootstrap the system
1439
1596
  * using a one-time token.
@@ -15,7 +15,7 @@ import type { Message } from "@bufbuild/protobuf";
15
15
  * Describes the file liquidmetal/v1alpha1/object.proto.
16
16
  */
17
17
  export const file_liquidmetal_v1alpha1_object: GenFile = /*@__PURE__*/
18
- fileDesc("CiFsaXF1aWRtZXRhbC92MWFscGhhMS9vYmplY3QucHJvdG8SFGxpcXVpZG1ldGFsLnYxYWxwaGExIoABChBQdXRPYmplY3RSZXF1ZXN0EhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJEg4KBmJ1Y2tldBgDIAEoCRILCgNrZXkYBCABKAkSDwoHY29udGVudBgFIAEoDBIUCgxjb250ZW50X3R5cGUYBiABKAkiQQoRUHV0T2JqZWN0UmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCBIOCgZidWNrZXQYAiABKAkSCwoDa2V5GAMgASgJIlkKEEdldE9iamVjdFJlcXVlc3QSFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEg8KB3VzZXJfaWQYAiABKAkSDgoGYnVja2V0GAMgASgJEgsKA2tleRgEIAEoCSI6ChFHZXRPYmplY3RSZXNwb25zZRIPCgdjb250ZW50GAEgASgMEhQKDGNvbnRlbnRfdHlwZRgCIAEoCSJcChNEZWxldGVPYmplY3RSZXF1ZXN0EhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJEg4KBmJ1Y2tldBgDIAEoCRILCgNrZXkYBCABKAkiFgoURGVsZXRlT2JqZWN0UmVzcG9uc2UiTgoSTGlzdE9iamVjdHNSZXF1ZXN0EhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJEg4KBmJ1Y2tldBgDIAEoCSLOAQoTTGlzdE9iamVjdHNSZXNwb25zZRJFCgdvYmplY3RzGAEgAygLMjQubGlxdWlkbWV0YWwudjFhbHBoYTEuTGlzdE9iamVjdHNSZXNwb25zZS5PYmplY3RJbmZvGnAKCk9iamVjdEluZm8SCwoDa2V5GAEgASgJEgwKBHNpemUYAiABKAMSFAoMY29udGVudF90eXBlGAMgASgJEjEKDWxhc3RfbW9kaWZpZWQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wMp4DCg1PYmplY3RTZXJ2aWNlEl4KCVB1dE9iamVjdBImLmxpcXVpZG1ldGFsLnYxYWxwaGExLlB1dE9iamVjdFJlcXVlc3QaJy5saXF1aWRtZXRhbC52MWFscGhhMS5QdXRPYmplY3RSZXNwb25zZSIAEl4KCUdldE9iamVjdBImLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldE9iamVjdFJlcXVlc3QaJy5saXF1aWRtZXRhbC52MWFscGhhMS5HZXRPYmplY3RSZXNwb25zZSIAEmcKDERlbGV0ZU9iamVjdBIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlbGV0ZU9iamVjdFJlcXVlc3QaKi5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVPYmplY3RSZXNwb25zZSIAEmQKC0xpc3RPYmplY3RzEigubGlxdWlkbWV0YWwudjFhbHBoYTEuTGlzdE9iamVjdHNSZXF1ZXN0GikubGlxdWlkbWV0YWwudjFhbHBoYTEuTGlzdE9iamVjdHNSZXNwb25zZSIAQpgBChhjb20ubGlxdWlkbWV0YWwudjFhbHBoYTFCC09iamVjdFByb3RvUAGiAgNMWFiqAhRMaXF1aWRtZXRhbC5WMWFscGhhMcoCFExpcXVpZG1ldGFsXFYxYWxwaGEx4gIgTGlxdWlkbWV0YWxcVjFhbHBoYTFcR1BCTWV0YWRhdGHqAhVMaXF1aWRtZXRhbDo6VjFhbHBoYTFiBnByb3RvMw", [file_google_protobuf_timestamp]);
18
+ fileDesc("CiFsaXF1aWRtZXRhbC92MWFscGhhMS9vYmplY3QucHJvdG8SFGxpcXVpZG1ldGFsLnYxYWxwaGExIoMBChBQdXRPYmplY3RSZXF1ZXN0EhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJEhEKCWJ1Y2tldF9pZBgDIAEoCRILCgNrZXkYBCABKAkSDwoHY29udGVudBgFIAEoDBIUCgxjb250ZW50X3R5cGUYBiABKAkiMwoRUHV0T2JqZWN0UmVzcG9uc2USEQoJYnVja2V0X2lkGAEgASgJEgsKA2tleRgCIAEoCSJcChBHZXRPYmplY3RSZXF1ZXN0EhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJEhEKCWJ1Y2tldF9pZBgDIAEoCRILCgNrZXkYBCABKAkiOgoRR2V0T2JqZWN0UmVzcG9uc2USDwoHY29udGVudBgBIAEoDBIUCgxjb250ZW50X3R5cGUYAiABKAkiXwoTRGVsZXRlT2JqZWN0UmVxdWVzdBIXCg9vcmdhbml6YXRpb25faWQYASABKAkSDwoHdXNlcl9pZBgCIAEoCRIRCglidWNrZXRfaWQYAyABKAkSCwoDa2V5GAQgASgJIhYKFERlbGV0ZU9iamVjdFJlc3BvbnNlIlEKEkxpc3RPYmplY3RzUmVxdWVzdBIXCg9vcmdhbml6YXRpb25faWQYASABKAkSDwoHdXNlcl9pZBgCIAEoCRIRCglidWNrZXRfaWQYAyABKAkizgEKE0xpc3RPYmplY3RzUmVzcG9uc2USRQoHb2JqZWN0cxgBIAMoCzI0LmxpcXVpZG1ldGFsLnYxYWxwaGExLkxpc3RPYmplY3RzUmVzcG9uc2UuT2JqZWN0SW5mbxpwCgpPYmplY3RJbmZvEgsKA2tleRgBIAEoCRIMCgRzaXplGAIgASgDEhQKDGNvbnRlbnRfdHlwZRgDIAEoCRIxCg1sYXN0X21vZGlmaWVkGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcDKeAwoNT2JqZWN0U2VydmljZRJeCglQdXRPYmplY3QSJi5saXF1aWRtZXRhbC52MWFscGhhMS5QdXRPYmplY3RSZXF1ZXN0GicubGlxdWlkbWV0YWwudjFhbHBoYTEuUHV0T2JqZWN0UmVzcG9uc2UiABJeCglHZXRPYmplY3QSJi5saXF1aWRtZXRhbC52MWFscGhhMS5HZXRPYmplY3RSZXF1ZXN0GicubGlxdWlkbWV0YWwudjFhbHBoYTEuR2V0T2JqZWN0UmVzcG9uc2UiABJnCgxEZWxldGVPYmplY3QSKS5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVPYmplY3RSZXF1ZXN0GioubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVsZXRlT2JqZWN0UmVzcG9uc2UiABJkCgtMaXN0T2JqZWN0cxIoLmxpcXVpZG1ldGFsLnYxYWxwaGExLkxpc3RPYmplY3RzUmVxdWVzdBopLmxpcXVpZG1ldGFsLnYxYWxwaGExLkxpc3RPYmplY3RzUmVzcG9uc2UiAEKYAQoYY29tLmxpcXVpZG1ldGFsLnYxYWxwaGExQgtPYmplY3RQcm90b1ABogIDTFhYqgIUTGlxdWlkbWV0YWwuVjFhbHBoYTHKAhRMaXF1aWRtZXRhbFxWMWFscGhhMeICIExpcXVpZG1ldGFsXFYxYWxwaGExXEdQQk1ldGFkYXRh6gIVTGlxdWlkbWV0YWw6OlYxYWxwaGExYgZwcm90bzM", [file_google_protobuf_timestamp]);
19
19
 
20
20
  /**
21
21
  * @generated from message liquidmetal.v1alpha1.PutObjectRequest
@@ -32,9 +32,9 @@ export type PutObjectRequest = Message<"liquidmetal.v1alpha1.PutObjectRequest">
32
32
  userId: string;
33
33
 
34
34
  /**
35
- * @generated from field: string bucket = 3;
35
+ * @generated from field: string bucket_id = 3;
36
36
  */
37
- bucket: string;
37
+ bucketId: string;
38
38
 
39
39
  /**
40
40
  * @generated from field: string key = 4;
@@ -64,17 +64,12 @@ export const PutObjectRequestSchema: GenMessage<PutObjectRequest> = /*@__PURE__*
64
64
  */
65
65
  export type PutObjectResponse = Message<"liquidmetal.v1alpha1.PutObjectResponse"> & {
66
66
  /**
67
- * @generated from field: bool success = 1;
67
+ * @generated from field: string bucket_id = 1;
68
68
  */
69
- success: boolean;
69
+ bucketId: string;
70
70
 
71
71
  /**
72
- * @generated from field: string bucket = 2;
73
- */
74
- bucket: string;
75
-
76
- /**
77
- * @generated from field: string key = 3;
72
+ * @generated from field: string key = 2;
78
73
  */
79
74
  key: string;
80
75
  };
@@ -101,9 +96,9 @@ export type GetObjectRequest = Message<"liquidmetal.v1alpha1.GetObjectRequest">
101
96
  userId: string;
102
97
 
103
98
  /**
104
- * @generated from field: string bucket = 3;
99
+ * @generated from field: string bucket_id = 3;
105
100
  */
106
- bucket: string;
101
+ bucketId: string;
107
102
 
108
103
  /**
109
104
  * @generated from field: string key = 4;
@@ -155,9 +150,9 @@ export type DeleteObjectRequest = Message<"liquidmetal.v1alpha1.DeleteObjectRequ
155
150
  userId: string;
156
151
 
157
152
  /**
158
- * @generated from field: string bucket = 3;
153
+ * @generated from field: string bucket_id = 3;
159
154
  */
160
- bucket: string;
155
+ bucketId: string;
161
156
 
162
157
  /**
163
158
  * @generated from field: string key = 4;
@@ -200,9 +195,9 @@ export type ListObjectsRequest = Message<"liquidmetal.v1alpha1.ListObjectsReques
200
195
  userId: string;
201
196
 
202
197
  /**
203
- * @generated from field: string bucket = 3;
198
+ * @generated from field: string bucket_id = 3;
204
199
  */
205
- bucket: string;
200
+ bucketId: string;
206
201
  };
207
202
 
208
203
  /**