@pidgr/proto 0.37.1 → 0.38.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pidgr/proto",
3
- "version": "0.37.1",
3
+ "version": "0.38.0",
4
4
  "description": "TypeScript protobuf and gRPC client stubs for the Pidgr internal communications platform",
5
5
  "keywords": [
6
6
  "pidgr",
@@ -0,0 +1,338 @@
1
+ // @generated by protoc-gen-es v2.11.0 with parameter "target=ts"
2
+ // @generated from file pidgr/v1/invite_link.proto (package pidgr.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
6
+ import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
7
+ import type { Timestamp } from "@bufbuild/protobuf/wkt";
8
+ import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
9
+ import type { Message } from "@bufbuild/protobuf";
10
+
11
+ /**
12
+ * Describes the file pidgr/v1/invite_link.proto.
13
+ */
14
+ export const file_pidgr_v1_invite_link: GenFile = /*@__PURE__*/
15
+ fileDesc("ChpwaWRnci92MS9pbnZpdGVfbGluay5wcm90bxIIcGlkZ3IudjEigQIKCkludml0ZUxpbmsSCgoCaWQYASABKAkSDQoFdG9rZW4YAiABKAkSDwoHcm9sZV9pZBgDIAEoCRIQCghtYXhfdXNlcxgEIAEoBRIRCgl1c2VfY291bnQYBSABKAUSLgoKZXhwaXJlc19hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKcmV2b2tlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEgoKY3JlYXRlZF9ieRgIIAEoCRIuCgpjcmVhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJWChdDcmVhdGVJbnZpdGVMaW5rUmVxdWVzdBIPCgdyb2xlX2lkGAEgASgJEhAKCG1heF91c2VzGAIgASgFEhgKEGV4cGlyZXNfaW5faG91cnMYAyABKAUiUgoYQ3JlYXRlSW52aXRlTGlua1Jlc3BvbnNlEikKC2ludml0ZV9saW5rGAEgASgLMhQucGlkZ3IudjEuSW52aXRlTGluaxILCgN1cmwYAiABKAkiGAoWTGlzdEludml0ZUxpbmtzUmVxdWVzdCJFChdMaXN0SW52aXRlTGlua3NSZXNwb25zZRIqCgxpbnZpdGVfbGlua3MYASADKAsyFC5waWRnci52MS5JbnZpdGVMaW5rIjEKF1Jldm9rZUludml0ZUxpbmtSZXF1ZXN0EhYKDmludml0ZV9saW5rX2lkGAEgASgJIhoKGFJldm9rZUludml0ZUxpbmtSZXNwb25zZSI3ChdSZWRlZW1JbnZpdGVMaW5rUmVxdWVzdBINCgV0b2tlbhgBIAEoCRINCgVlbWFpbBgCIAEoCSI1ChhSZWRlZW1JbnZpdGVMaW5rUmVzcG9uc2USGQoRb3JnYW5pemF0aW9uX25hbWUYASABKAky/AIKEUludml0ZUxpbmtTZXJ2aWNlElkKEENyZWF0ZUludml0ZUxpbmsSIS5waWRnci52MS5DcmVhdGVJbnZpdGVMaW5rUmVxdWVzdBoiLnBpZGdyLnYxLkNyZWF0ZUludml0ZUxpbmtSZXNwb25zZRJWCg9MaXN0SW52aXRlTGlua3MSIC5waWRnci52MS5MaXN0SW52aXRlTGlua3NSZXF1ZXN0GiEucGlkZ3IudjEuTGlzdEludml0ZUxpbmtzUmVzcG9uc2USWQoQUmV2b2tlSW52aXRlTGluaxIhLnBpZGdyLnYxLlJldm9rZUludml0ZUxpbmtSZXF1ZXN0GiIucGlkZ3IudjEuUmV2b2tlSW52aXRlTGlua1Jlc3BvbnNlElkKEFJlZGVlbUludml0ZUxpbmsSIS5waWRnci52MS5SZWRlZW1JbnZpdGVMaW5rUmVxdWVzdBoiLnBpZGdyLnYxLlJlZGVlbUludml0ZUxpbmtSZXNwb25zZUI2WjRnaXRodWIuY29tL3BpZGdyL3BpZGdyLXByb3RvL2dlbi9nby9waWRnci92MTtwaWRncnYxYgZwcm90bzM", [file_google_protobuf_timestamp]);
16
+
17
+ /**
18
+ * A shareable invite link that allows users to self-join an organization.
19
+ * Links carry a role assignment and optional usage/expiry constraints.
20
+ *
21
+ * @generated from message pidgr.v1.InviteLink
22
+ */
23
+ export type InviteLink = Message<"pidgr.v1.InviteLink"> & {
24
+ /**
25
+ * Unique identifier for the invite link.
26
+ *
27
+ * @generated from field: string id = 1;
28
+ */
29
+ id: string;
30
+
31
+ /**
32
+ * Cryptographically random base64url-encoded token (43 characters).
33
+ *
34
+ * @generated from field: string token = 2;
35
+ */
36
+ token: string;
37
+
38
+ /**
39
+ * ID of the role assigned to users who redeem this link.
40
+ *
41
+ * @generated from field: string role_id = 3;
42
+ */
43
+ roleId: string;
44
+
45
+ /**
46
+ * Maximum number of times this link can be redeemed.
47
+ * 0 means unlimited.
48
+ *
49
+ * @generated from field: int32 max_uses = 4;
50
+ */
51
+ maxUses: number;
52
+
53
+ /**
54
+ * Number of times this link has been redeemed.
55
+ *
56
+ * @generated from field: int32 use_count = 5;
57
+ */
58
+ useCount: number;
59
+
60
+ /**
61
+ * When the link expires. Empty if no expiry.
62
+ *
63
+ * @generated from field: google.protobuf.Timestamp expires_at = 6;
64
+ */
65
+ expiresAt?: Timestamp;
66
+
67
+ /**
68
+ * When the link was revoked. Empty if not revoked.
69
+ *
70
+ * @generated from field: google.protobuf.Timestamp revoked_at = 7;
71
+ */
72
+ revokedAt?: Timestamp;
73
+
74
+ /**
75
+ * ID of the admin who created the link.
76
+ *
77
+ * @generated from field: string created_by = 8;
78
+ */
79
+ createdBy: string;
80
+
81
+ /**
82
+ * When the link was created.
83
+ *
84
+ * @generated from field: google.protobuf.Timestamp created_at = 9;
85
+ */
86
+ createdAt?: Timestamp;
87
+ };
88
+
89
+ /**
90
+ * Describes the message pidgr.v1.InviteLink.
91
+ * Use `create(InviteLinkSchema)` to create a new message.
92
+ */
93
+ export const InviteLinkSchema: GenMessage<InviteLink> = /*@__PURE__*/
94
+ messageDesc(file_pidgr_v1_invite_link, 0);
95
+
96
+ /**
97
+ * Request to create a new invite link for the organization.
98
+ *
99
+ * @generated from message pidgr.v1.CreateInviteLinkRequest
100
+ */
101
+ export type CreateInviteLinkRequest = Message<"pidgr.v1.CreateInviteLinkRequest"> & {
102
+ /**
103
+ * ID of the role to assign. Defaults to the organization's employee role if empty.
104
+ *
105
+ * @generated from field: string role_id = 1;
106
+ */
107
+ roleId: string;
108
+
109
+ /**
110
+ * Maximum number of redemptions. 0 means unlimited.
111
+ *
112
+ * @generated from field: int32 max_uses = 2;
113
+ */
114
+ maxUses: number;
115
+
116
+ /**
117
+ * Number of hours until the link expires. 0 means no expiry.
118
+ * Constraints: Valid range 0 to 8760 (1 year).
119
+ *
120
+ * @generated from field: int32 expires_in_hours = 3;
121
+ */
122
+ expiresInHours: number;
123
+ };
124
+
125
+ /**
126
+ * Describes the message pidgr.v1.CreateInviteLinkRequest.
127
+ * Use `create(CreateInviteLinkRequestSchema)` to create a new message.
128
+ */
129
+ export const CreateInviteLinkRequestSchema: GenMessage<CreateInviteLinkRequest> = /*@__PURE__*/
130
+ messageDesc(file_pidgr_v1_invite_link, 1);
131
+
132
+ /**
133
+ * Response after creating an invite link.
134
+ *
135
+ * @generated from message pidgr.v1.CreateInviteLinkResponse
136
+ */
137
+ export type CreateInviteLinkResponse = Message<"pidgr.v1.CreateInviteLinkResponse"> & {
138
+ /**
139
+ * The newly created invite link.
140
+ *
141
+ * @generated from field: pidgr.v1.InviteLink invite_link = 1;
142
+ */
143
+ inviteLink?: InviteLink;
144
+
145
+ /**
146
+ * Full URL for sharing (e.g. "https://app.pidgr.com/join?token=<TOKEN>").
147
+ *
148
+ * @generated from field: string url = 2;
149
+ */
150
+ url: string;
151
+ };
152
+
153
+ /**
154
+ * Describes the message pidgr.v1.CreateInviteLinkResponse.
155
+ * Use `create(CreateInviteLinkResponseSchema)` to create a new message.
156
+ */
157
+ export const CreateInviteLinkResponseSchema: GenMessage<CreateInviteLinkResponse> = /*@__PURE__*/
158
+ messageDesc(file_pidgr_v1_invite_link, 2);
159
+
160
+ /**
161
+ * Request to list all invite links for the organization.
162
+ *
163
+ * @generated from message pidgr.v1.ListInviteLinksRequest
164
+ */
165
+ export type ListInviteLinksRequest = Message<"pidgr.v1.ListInviteLinksRequest"> & {
166
+ };
167
+
168
+ /**
169
+ * Describes the message pidgr.v1.ListInviteLinksRequest.
170
+ * Use `create(ListInviteLinksRequestSchema)` to create a new message.
171
+ */
172
+ export const ListInviteLinksRequestSchema: GenMessage<ListInviteLinksRequest> = /*@__PURE__*/
173
+ messageDesc(file_pidgr_v1_invite_link, 3);
174
+
175
+ /**
176
+ * Response containing all invite links for the organization.
177
+ *
178
+ * @generated from message pidgr.v1.ListInviteLinksResponse
179
+ */
180
+ export type ListInviteLinksResponse = Message<"pidgr.v1.ListInviteLinksResponse"> & {
181
+ /**
182
+ * All invite links (active, expired, maxed-out, and revoked), ordered by creation date descending.
183
+ *
184
+ * @generated from field: repeated pidgr.v1.InviteLink invite_links = 1;
185
+ */
186
+ inviteLinks: InviteLink[];
187
+ };
188
+
189
+ /**
190
+ * Describes the message pidgr.v1.ListInviteLinksResponse.
191
+ * Use `create(ListInviteLinksResponseSchema)` to create a new message.
192
+ */
193
+ export const ListInviteLinksResponseSchema: GenMessage<ListInviteLinksResponse> = /*@__PURE__*/
194
+ messageDesc(file_pidgr_v1_invite_link, 4);
195
+
196
+ /**
197
+ * Request to revoke an invite link.
198
+ *
199
+ * @generated from message pidgr.v1.RevokeInviteLinkRequest
200
+ */
201
+ export type RevokeInviteLinkRequest = Message<"pidgr.v1.RevokeInviteLinkRequest"> & {
202
+ /**
203
+ * ID of the invite link to revoke. Required.
204
+ *
205
+ * @generated from field: string invite_link_id = 1;
206
+ */
207
+ inviteLinkId: string;
208
+ };
209
+
210
+ /**
211
+ * Describes the message pidgr.v1.RevokeInviteLinkRequest.
212
+ * Use `create(RevokeInviteLinkRequestSchema)` to create a new message.
213
+ */
214
+ export const RevokeInviteLinkRequestSchema: GenMessage<RevokeInviteLinkRequest> = /*@__PURE__*/
215
+ messageDesc(file_pidgr_v1_invite_link, 5);
216
+
217
+ /**
218
+ * Response after revoking an invite link.
219
+ *
220
+ * @generated from message pidgr.v1.RevokeInviteLinkResponse
221
+ */
222
+ export type RevokeInviteLinkResponse = Message<"pidgr.v1.RevokeInviteLinkResponse"> & {
223
+ };
224
+
225
+ /**
226
+ * Describes the message pidgr.v1.RevokeInviteLinkResponse.
227
+ * Use `create(RevokeInviteLinkResponseSchema)` to create a new message.
228
+ */
229
+ export const RevokeInviteLinkResponseSchema: GenMessage<RevokeInviteLinkResponse> = /*@__PURE__*/
230
+ messageDesc(file_pidgr_v1_invite_link, 6);
231
+
232
+ /**
233
+ * Request to redeem an invite link (unauthenticated).
234
+ *
235
+ * @generated from message pidgr.v1.RedeemInviteLinkRequest
236
+ */
237
+ export type RedeemInviteLinkRequest = Message<"pidgr.v1.RedeemInviteLinkRequest"> & {
238
+ /**
239
+ * The invite link token from the URL query parameter.
240
+ *
241
+ * @generated from field: string token = 1;
242
+ */
243
+ token: string;
244
+
245
+ /**
246
+ * Email address of the user joining the organization.
247
+ * Constraints: Max length 254 characters (RFC 5321).
248
+ *
249
+ * @generated from field: string email = 2;
250
+ */
251
+ email: string;
252
+ };
253
+
254
+ /**
255
+ * Describes the message pidgr.v1.RedeemInviteLinkRequest.
256
+ * Use `create(RedeemInviteLinkRequestSchema)` to create a new message.
257
+ */
258
+ export const RedeemInviteLinkRequestSchema: GenMessage<RedeemInviteLinkRequest> = /*@__PURE__*/
259
+ messageDesc(file_pidgr_v1_invite_link, 7);
260
+
261
+ /**
262
+ * Response after redeeming an invite link.
263
+ *
264
+ * @generated from message pidgr.v1.RedeemInviteLinkResponse
265
+ */
266
+ export type RedeemInviteLinkResponse = Message<"pidgr.v1.RedeemInviteLinkResponse"> & {
267
+ /**
268
+ * Name of the organization the user was added to.
269
+ *
270
+ * @generated from field: string organization_name = 1;
271
+ */
272
+ organizationName: string;
273
+ };
274
+
275
+ /**
276
+ * Describes the message pidgr.v1.RedeemInviteLinkResponse.
277
+ * Use `create(RedeemInviteLinkResponseSchema)` to create a new message.
278
+ */
279
+ export const RedeemInviteLinkResponseSchema: GenMessage<RedeemInviteLinkResponse> = /*@__PURE__*/
280
+ messageDesc(file_pidgr_v1_invite_link, 8);
281
+
282
+ /**
283
+ * Manages shareable invite links for organization self-join.
284
+ * Create, List, and Revoke require JWT + PERMISSION_MEMBERS_INVITE.
285
+ * Redeem is unauthenticated — the token IS the authorization.
286
+ *
287
+ * @generated from service pidgr.v1.InviteLinkService
288
+ */
289
+ export const InviteLinkService: GenService<{
290
+ /**
291
+ * Create a new shareable invite link for the organization.
292
+ * Authorization: Requires PERMISSION_MEMBERS_INVITE.
293
+ *
294
+ * @generated from rpc pidgr.v1.InviteLinkService.CreateInviteLink
295
+ */
296
+ createInviteLink: {
297
+ methodKind: "unary";
298
+ input: typeof CreateInviteLinkRequestSchema;
299
+ output: typeof CreateInviteLinkResponseSchema;
300
+ },
301
+ /**
302
+ * List all invite links for the organization.
303
+ * Authorization: Requires PERMISSION_MEMBERS_INVITE.
304
+ *
305
+ * @generated from rpc pidgr.v1.InviteLinkService.ListInviteLinks
306
+ */
307
+ listInviteLinks: {
308
+ methodKind: "unary";
309
+ input: typeof ListInviteLinksRequestSchema;
310
+ output: typeof ListInviteLinksResponseSchema;
311
+ },
312
+ /**
313
+ * Revoke an invite link, making it immediately unusable. Idempotent.
314
+ * Authorization: Requires PERMISSION_MEMBERS_INVITE.
315
+ *
316
+ * @generated from rpc pidgr.v1.InviteLinkService.RevokeInviteLink
317
+ */
318
+ revokeInviteLink: {
319
+ methodKind: "unary";
320
+ input: typeof RevokeInviteLinkRequestSchema;
321
+ output: typeof RevokeInviteLinkResponseSchema;
322
+ },
323
+ /**
324
+ * Redeem an invite link to join an organization.
325
+ * This is a pre-authentication endpoint — no JWT required.
326
+ * Rate limited to 10 requests per minute per IP.
327
+ * Authorization: None (token-based).
328
+ *
329
+ * @generated from rpc pidgr.v1.InviteLinkService.RedeemInviteLink
330
+ */
331
+ redeemInviteLink: {
332
+ methodKind: "unary";
333
+ input: typeof RedeemInviteLinkRequestSchema;
334
+ output: typeof RedeemInviteLinkResponseSchema;
335
+ },
336
+ }> = /*@__PURE__*/
337
+ serviceDesc(file_pidgr_v1_invite_link, 0);
338
+
@@ -14,7 +14,7 @@ import type { Message } from "@bufbuild/protobuf";
14
14
  * Describes the file pidgr/v1/member.proto.
15
15
  */
16
16
  export const file_pidgr_v1_member: GenFile = /*@__PURE__*/
17
- fileDesc("ChVwaWRnci92MS9tZW1iZXIucHJvdG8SCHBpZGdyLnYxIm8KEUludml0ZVVzZXJSZXF1ZXN0Eg0KBWVtYWlsGAEgASgJEgwKBG5hbWUYAiABKAkSDwoHcm9sZV9pZBgEIAEoCRImCgdwcm9maWxlGAUgASgLMhUucGlkZ3IudjEuVXNlclByb2ZpbGVKBAgDEAQiMgoSSW52aXRlVXNlclJlc3BvbnNlEhwKBHVzZXIYASABKAsyDi5waWRnci52MS5Vc2VyIiEKDkdldFVzZXJSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkiLwoPR2V0VXNlclJlc3BvbnNlEhwKBHVzZXIYASABKAsyDi5waWRnci52MS5Vc2VyIjwKEExpc3RVc2Vyc1JlcXVlc3QSKAoKcGFnaW5hdGlvbhgBIAEoCzIULnBpZGdyLnYxLlBhZ2luYXRpb24iZQoRTGlzdFVzZXJzUmVzcG9uc2USHQoFdXNlcnMYASADKAsyDi5waWRnci52MS5Vc2VyEjEKD3BhZ2luYXRpb25fbWV0YRgCIAEoCzIYLnBpZGdyLnYxLlBhZ2luYXRpb25NZXRhIjkKFVVwZGF0ZVVzZXJSb2xlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEg8KB3JvbGVfaWQYAiABKAkiNgoWVXBkYXRlVXNlclJvbGVSZXNwb25zZRIcCgR1c2VyGAEgASgLMg4ucGlkZ3IudjEuVXNlciIoChVEZWFjdGl2YXRlVXNlclJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCSI2ChZEZWFjdGl2YXRlVXNlclJlc3BvbnNlEhwKBHVzZXIYASABKAsyDi5waWRnci52MS5Vc2VyIlMKGFVwZGF0ZVVzZXJQcm9maWxlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEiYKB3Byb2ZpbGUYAiABKAsyFS5waWRnci52MS5Vc2VyUHJvZmlsZSI5ChlVcGRhdGVVc2VyUHJvZmlsZVJlc3BvbnNlEhwKBHVzZXIYASABKAsyDi5waWRnci52MS5Vc2VyIhgKFkdldFVzZXJTZXR0aW5nc1JlcXVlc3QiQwoXR2V0VXNlclNldHRpbmdzUmVzcG9uc2USKAoIc2V0dGluZ3MYASABKAsyFi5waWRnci52MS5Vc2VyU2V0dGluZ3MiRQoZVXBkYXRlVXNlclNldHRpbmdzUmVxdWVzdBIoCghzZXR0aW5ncxgBIAEoCzIWLnBpZGdyLnYxLlVzZXJTZXR0aW5ncyJGChpVcGRhdGVVc2VyU2V0dGluZ3NSZXNwb25zZRIoCghzZXR0aW5ncxgBIAEoCzIWLnBpZGdyLnYxLlVzZXJTZXR0aW5nczKfBQoNTWVtYmVyU2VydmljZRJHCgpJbnZpdGVVc2VyEhsucGlkZ3IudjEuSW52aXRlVXNlclJlcXVlc3QaHC5waWRnci52MS5JbnZpdGVVc2VyUmVzcG9uc2USPgoHR2V0VXNlchIYLnBpZGdyLnYxLkdldFVzZXJSZXF1ZXN0GhkucGlkZ3IudjEuR2V0VXNlclJlc3BvbnNlEkQKCUxpc3RVc2VycxIaLnBpZGdyLnYxLkxpc3RVc2Vyc1JlcXVlc3QaGy5waWRnci52MS5MaXN0VXNlcnNSZXNwb25zZRJTCg5VcGRhdGVVc2VyUm9sZRIfLnBpZGdyLnYxLlVwZGF0ZVVzZXJSb2xlUmVxdWVzdBogLnBpZGdyLnYxLlVwZGF0ZVVzZXJSb2xlUmVzcG9uc2USUwoORGVhY3RpdmF0ZVVzZXISHy5waWRnci52MS5EZWFjdGl2YXRlVXNlclJlcXVlc3QaIC5waWRnci52MS5EZWFjdGl2YXRlVXNlclJlc3BvbnNlElwKEVVwZGF0ZVVzZXJQcm9maWxlEiIucGlkZ3IudjEuVXBkYXRlVXNlclByb2ZpbGVSZXF1ZXN0GiMucGlkZ3IudjEuVXBkYXRlVXNlclByb2ZpbGVSZXNwb25zZRJWCg9HZXRVc2VyU2V0dGluZ3MSIC5waWRnci52MS5HZXRVc2VyU2V0dGluZ3NSZXF1ZXN0GiEucGlkZ3IudjEuR2V0VXNlclNldHRpbmdzUmVzcG9uc2USXwoSVXBkYXRlVXNlclNldHRpbmdzEiMucGlkZ3IudjEuVXBkYXRlVXNlclNldHRpbmdzUmVxdWVzdBokLnBpZGdyLnYxLlVwZGF0ZVVzZXJTZXR0aW5nc1Jlc3BvbnNlQjZaNGdpdGh1Yi5jb20vcGlkZ3IvcGlkZ3ItcHJvdG8vZ2VuL2dvL3BpZGdyL3YxO3BpZGdydjFiBnByb3RvMw", [file_pidgr_v1_common, file_pidgr_v1_user]);
17
+ fileDesc("ChVwaWRnci92MS9tZW1iZXIucHJvdG8SCHBpZGdyLnYxIm8KEUludml0ZVVzZXJSZXF1ZXN0Eg0KBWVtYWlsGAEgASgJEgwKBG5hbWUYAiABKAkSDwoHcm9sZV9pZBgEIAEoCRImCgdwcm9maWxlGAUgASgLMhUucGlkZ3IudjEuVXNlclByb2ZpbGVKBAgDEAQiMgoSSW52aXRlVXNlclJlc3BvbnNlEhwKBHVzZXIYASABKAsyDi5waWRnci52MS5Vc2VyIiEKDkdldFVzZXJSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkiLwoPR2V0VXNlclJlc3BvbnNlEhwKBHVzZXIYASABKAsyDi5waWRnci52MS5Vc2VyIjwKEExpc3RVc2Vyc1JlcXVlc3QSKAoKcGFnaW5hdGlvbhgBIAEoCzIULnBpZGdyLnYxLlBhZ2luYXRpb24iZQoRTGlzdFVzZXJzUmVzcG9uc2USHQoFdXNlcnMYASADKAsyDi5waWRnci52MS5Vc2VyEjEKD3BhZ2luYXRpb25fbWV0YRgCIAEoCzIYLnBpZGdyLnYxLlBhZ2luYXRpb25NZXRhIjkKFVVwZGF0ZVVzZXJSb2xlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEg8KB3JvbGVfaWQYAiABKAkiNgoWVXBkYXRlVXNlclJvbGVSZXNwb25zZRIcCgR1c2VyGAEgASgLMg4ucGlkZ3IudjEuVXNlciIoChVEZWFjdGl2YXRlVXNlclJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCSI2ChZEZWFjdGl2YXRlVXNlclJlc3BvbnNlEhwKBHVzZXIYASABKAsyDi5waWRnci52MS5Vc2VyIlMKGFVwZGF0ZVVzZXJQcm9maWxlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEiYKB3Byb2ZpbGUYAiABKAsyFS5waWRnci52MS5Vc2VyUHJvZmlsZSI5ChlVcGRhdGVVc2VyUHJvZmlsZVJlc3BvbnNlEhwKBHVzZXIYASABKAsyDi5waWRnci52MS5Vc2VyIhgKFkdldFVzZXJTZXR0aW5nc1JlcXVlc3QiQwoXR2V0VXNlclNldHRpbmdzUmVzcG9uc2USKAoIc2V0dGluZ3MYASABKAsyFi5waWRnci52MS5Vc2VyU2V0dGluZ3MiRQoZVXBkYXRlVXNlclNldHRpbmdzUmVxdWVzdBIoCghzZXR0aW5ncxgBIAEoCzIWLnBpZGdyLnYxLlVzZXJTZXR0aW5ncyJGChpVcGRhdGVVc2VyU2V0dGluZ3NSZXNwb25zZRIoCghzZXR0aW5ncxgBIAEoCzIWLnBpZGdyLnYxLlVzZXJTZXR0aW5ncyI5ChZCdWxrSW52aXRlVXNlcnNSZXF1ZXN0Eg4KBmVtYWlscxgBIAMoCRIPCgdyb2xlX2lkGAIgASgJIl8KEEJ1bGtJbnZpdGVSZXN1bHQSDQoFZW1haWwYASABKAkSDwoHc3VjY2VzcxgCIAEoCBINCgVlcnJvchgDIAEoCRIcCgR1c2VyGAQgASgLMg4ucGlkZ3IudjEuVXNlciJzChdCdWxrSW52aXRlVXNlcnNSZXNwb25zZRIrCgdyZXN1bHRzGAEgAygLMhoucGlkZ3IudjEuQnVsa0ludml0ZVJlc3VsdBIVCg1pbnZpdGVkX2NvdW50GAIgASgFEhQKDGZhaWxlZF9jb3VudBgDIAEoBTL3BQoNTWVtYmVyU2VydmljZRJHCgpJbnZpdGVVc2VyEhsucGlkZ3IudjEuSW52aXRlVXNlclJlcXVlc3QaHC5waWRnci52MS5JbnZpdGVVc2VyUmVzcG9uc2USPgoHR2V0VXNlchIYLnBpZGdyLnYxLkdldFVzZXJSZXF1ZXN0GhkucGlkZ3IudjEuR2V0VXNlclJlc3BvbnNlEkQKCUxpc3RVc2VycxIaLnBpZGdyLnYxLkxpc3RVc2Vyc1JlcXVlc3QaGy5waWRnci52MS5MaXN0VXNlcnNSZXNwb25zZRJTCg5VcGRhdGVVc2VyUm9sZRIfLnBpZGdyLnYxLlVwZGF0ZVVzZXJSb2xlUmVxdWVzdBogLnBpZGdyLnYxLlVwZGF0ZVVzZXJSb2xlUmVzcG9uc2USUwoORGVhY3RpdmF0ZVVzZXISHy5waWRnci52MS5EZWFjdGl2YXRlVXNlclJlcXVlc3QaIC5waWRnci52MS5EZWFjdGl2YXRlVXNlclJlc3BvbnNlElwKEVVwZGF0ZVVzZXJQcm9maWxlEiIucGlkZ3IudjEuVXBkYXRlVXNlclByb2ZpbGVSZXF1ZXN0GiMucGlkZ3IudjEuVXBkYXRlVXNlclByb2ZpbGVSZXNwb25zZRJWCg9HZXRVc2VyU2V0dGluZ3MSIC5waWRnci52MS5HZXRVc2VyU2V0dGluZ3NSZXF1ZXN0GiEucGlkZ3IudjEuR2V0VXNlclNldHRpbmdzUmVzcG9uc2USXwoSVXBkYXRlVXNlclNldHRpbmdzEiMucGlkZ3IudjEuVXBkYXRlVXNlclNldHRpbmdzUmVxdWVzdBokLnBpZGdyLnYxLlVwZGF0ZVVzZXJTZXR0aW5nc1Jlc3BvbnNlElYKD0J1bGtJbnZpdGVVc2VycxIgLnBpZGdyLnYxLkJ1bGtJbnZpdGVVc2Vyc1JlcXVlc3QaIS5waWRnci52MS5CdWxrSW52aXRlVXNlcnNSZXNwb25zZUI2WjRnaXRodWIuY29tL3BpZGdyL3BpZGdyLXByb3RvL2dlbi9nby9waWRnci92MTtwaWRncnYxYgZwcm90bzM", [file_pidgr_v1_common, file_pidgr_v1_user]);
18
18
 
19
19
  /**
20
20
  * Request to invite a new user to the organization.
@@ -392,6 +392,113 @@ export type UpdateUserSettingsResponse = Message<"pidgr.v1.UpdateUserSettingsRes
392
392
  export const UpdateUserSettingsResponseSchema: GenMessage<UpdateUserSettingsResponse> = /*@__PURE__*/
393
393
  messageDesc(file_pidgr_v1_member, 15);
394
394
 
395
+ /**
396
+ * Request to invite multiple users to the organization in a single call.
397
+ *
398
+ * @generated from message pidgr.v1.BulkInviteUsersRequest
399
+ */
400
+ export type BulkInviteUsersRequest = Message<"pidgr.v1.BulkInviteUsersRequest"> & {
401
+ /**
402
+ * Email addresses to invite.
403
+ * Constraints: Min 1, max 100 emails. Duplicates are deduplicated before processing.
404
+ *
405
+ * @generated from field: repeated string emails = 1;
406
+ */
407
+ emails: string[];
408
+
409
+ /**
410
+ * ID of the role to assign. Defaults to the organization's employee role if empty.
411
+ *
412
+ * @generated from field: string role_id = 2;
413
+ */
414
+ roleId: string;
415
+ };
416
+
417
+ /**
418
+ * Describes the message pidgr.v1.BulkInviteUsersRequest.
419
+ * Use `create(BulkInviteUsersRequestSchema)` to create a new message.
420
+ */
421
+ export const BulkInviteUsersRequestSchema: GenMessage<BulkInviteUsersRequest> = /*@__PURE__*/
422
+ messageDesc(file_pidgr_v1_member, 16);
423
+
424
+ /**
425
+ * Per-email result within a bulk invite operation.
426
+ *
427
+ * @generated from message pidgr.v1.BulkInviteResult
428
+ */
429
+ export type BulkInviteResult = Message<"pidgr.v1.BulkInviteResult"> & {
430
+ /**
431
+ * The email address that was processed.
432
+ *
433
+ * @generated from field: string email = 1;
434
+ */
435
+ email: string;
436
+
437
+ /**
438
+ * Whether the invitation succeeded.
439
+ *
440
+ * @generated from field: bool success = 2;
441
+ */
442
+ success: boolean;
443
+
444
+ /**
445
+ * Error message if the invitation failed (e.g. "user already exists").
446
+ * Empty on success.
447
+ *
448
+ * @generated from field: string error = 3;
449
+ */
450
+ error: string;
451
+
452
+ /**
453
+ * The created user. Only set on success.
454
+ *
455
+ * @generated from field: pidgr.v1.User user = 4;
456
+ */
457
+ user?: User;
458
+ };
459
+
460
+ /**
461
+ * Describes the message pidgr.v1.BulkInviteResult.
462
+ * Use `create(BulkInviteResultSchema)` to create a new message.
463
+ */
464
+ export const BulkInviteResultSchema: GenMessage<BulkInviteResult> = /*@__PURE__*/
465
+ messageDesc(file_pidgr_v1_member, 17);
466
+
467
+ /**
468
+ * Response after bulk inviting users.
469
+ *
470
+ * @generated from message pidgr.v1.BulkInviteUsersResponse
471
+ */
472
+ export type BulkInviteUsersResponse = Message<"pidgr.v1.BulkInviteUsersResponse"> & {
473
+ /**
474
+ * Per-email results in the same order as the deduplicated input.
475
+ *
476
+ * @generated from field: repeated pidgr.v1.BulkInviteResult results = 1;
477
+ */
478
+ results: BulkInviteResult[];
479
+
480
+ /**
481
+ * Number of users successfully invited.
482
+ *
483
+ * @generated from field: int32 invited_count = 2;
484
+ */
485
+ invitedCount: number;
486
+
487
+ /**
488
+ * Number of emails that failed.
489
+ *
490
+ * @generated from field: int32 failed_count = 3;
491
+ */
492
+ failedCount: number;
493
+ };
494
+
495
+ /**
496
+ * Describes the message pidgr.v1.BulkInviteUsersResponse.
497
+ * Use `create(BulkInviteUsersResponseSchema)` to create a new message.
498
+ */
499
+ export const BulkInviteUsersResponseSchema: GenMessage<BulkInviteUsersResponse> = /*@__PURE__*/
500
+ messageDesc(file_pidgr_v1_member, 18);
501
+
395
502
  /**
396
503
  * Manages members (users) within an organization.
397
504
  * All RPCs operate within the caller's org (extracted from JWT).
@@ -490,6 +597,19 @@ export const MemberService: GenService<{
490
597
  input: typeof UpdateUserSettingsRequestSchema;
491
598
  output: typeof UpdateUserSettingsResponseSchema;
492
599
  },
600
+ /**
601
+ * Invite multiple users to the organization in a single call.
602
+ * Emails are deduplicated. Each email is processed independently — individual
603
+ * failures do not abort the batch. Identity provider calls are parallelized (bounded concurrency).
604
+ * Authorization: Requires PERMISSION_MEMBERS_INVITE.
605
+ *
606
+ * @generated from rpc pidgr.v1.MemberService.BulkInviteUsers
607
+ */
608
+ bulkInviteUsers: {
609
+ methodKind: "unary";
610
+ input: typeof BulkInviteUsersRequestSchema;
611
+ output: typeof BulkInviteUsersResponseSchema;
612
+ },
493
613
  }> = /*@__PURE__*/
494
614
  serviceDesc(file_pidgr_v1_member, 0);
495
615