@noodleseed/one 0.109.0 → 0.110.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/dist/commands/deploy-ops.d.ts +0 -1
- package/dist/commands/deploy-ops.d.ts.map +1 -1
- package/dist/commands/deploy-ops.js +6 -42
- package/dist/commands/deploy-ops.js.map +1 -1
- package/dist/commands/project-setup.d.ts.map +1 -1
- package/dist/commands/project-setup.js +0 -4
- package/dist/commands/project-setup.js.map +1 -1
- package/dist/first-run.d.ts.map +1 -1
- package/dist/first-run.js +0 -3
- package/dist/first-run.js.map +1 -1
- package/node_modules/@noodle-borg/control-plane/dist/contracts.d.ts +210 -0
- package/node_modules/@noodle-borg/control-plane/dist/contracts.d.ts.map +1 -0
- package/node_modules/@noodle-borg/control-plane/dist/contracts.js +2 -0
- package/node_modules/@noodle-borg/control-plane/dist/contracts.js.map +1 -0
- package/node_modules/@noodle-borg/control-plane/dist/index.d.ts +6 -0
- package/node_modules/@noodle-borg/control-plane/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/control-plane/dist/index.js +4 -0
- package/node_modules/@noodle-borg/control-plane/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/control-plane/dist/postgres-contracts.d.ts +11 -0
- package/node_modules/@noodle-borg/control-plane/dist/postgres-contracts.d.ts.map +1 -0
- package/node_modules/@noodle-borg/control-plane/dist/postgres-contracts.js +2 -0
- package/node_modules/@noodle-borg/control-plane/dist/postgres-contracts.js.map +1 -0
- package/node_modules/@noodle-borg/{service/dist/store/postgres-control-plane.d.ts → control-plane/dist/postgres-organization-store.d.ts} +4 -3
- package/node_modules/@noodle-borg/control-plane/dist/postgres-organization-store.d.ts.map +1 -0
- package/node_modules/@noodle-borg/{service/dist/store/postgres-control-plane.js → control-plane/dist/postgres-organization-store.js} +4 -5
- package/node_modules/@noodle-borg/control-plane/dist/postgres-organization-store.js.map +1 -0
- package/node_modules/@noodle-borg/control-plane/dist/postgres-schema.d.ts +4 -0
- package/node_modules/@noodle-borg/control-plane/dist/postgres-schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/control-plane/dist/postgres-schema.js +88 -0
- package/node_modules/@noodle-borg/control-plane/dist/postgres-schema.js.map +1 -0
- package/node_modules/@noodle-borg/control-plane/dist/validation.d.ts +16 -0
- package/node_modules/@noodle-borg/control-plane/dist/validation.d.ts.map +1 -0
- package/node_modules/@noodle-borg/control-plane/dist/validation.js +87 -0
- package/node_modules/@noodle-borg/control-plane/dist/validation.js.map +1 -0
- package/node_modules/@noodle-borg/control-plane/package.json +30 -0
- package/node_modules/@noodle-borg/service/dist/platform-auth-operator.d.ts +10 -10
- package/node_modules/@noodle-borg/service/dist/store/postgres-deploy-records.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-deploy-records.js +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +2 -84
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-signup.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-signup.js +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-signup.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.js +3 -2
- package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +2 -20
- package/node_modules/@noodle-borg/service/dist/store/validate.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/validate.js +7 -85
- package/node_modules/@noodle-borg/service/dist/store/validate.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.d.ts +3 -208
- package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
- package/node_modules/@noodle-borg/service/package.json +1 -0
- package/package.json +2 -1
- package/dist/banner.d.ts +0 -11
- package/dist/banner.d.ts.map +0 -1
- package/dist/banner.js +0 -183
- package/dist/banner.js.map +0 -1
- package/dist/commands/deploy-fire-progress.d.ts +0 -28
- package/dist/commands/deploy-fire-progress.d.ts.map +0 -1
- package/dist/commands/deploy-fire-progress.js +0 -64
- package/dist/commands/deploy-fire-progress.js.map +0 -1
- package/dist/fire.d.ts +0 -108
- package/dist/fire.d.ts.map +0 -1
- package/dist/fire.js +0 -511
- package/dist/fire.js.map +0 -1
- package/dist/flavor.d.ts +0 -19
- package/dist/flavor.d.ts.map +0 -1
- package/dist/flavor.js +0 -105
- package/dist/flavor.js.map +0 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts.map +0 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js.map +0 -1
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
export type OrgRole = 'owner' | 'developer';
|
|
2
|
+
export interface OrgRecord {
|
|
3
|
+
readonly slug: string;
|
|
4
|
+
readonly displayName?: string;
|
|
5
|
+
readonly createdAt: string;
|
|
6
|
+
}
|
|
7
|
+
export interface CreateOrgWithOwnerInput {
|
|
8
|
+
readonly slug: string;
|
|
9
|
+
readonly displayName?: string;
|
|
10
|
+
readonly owner: {
|
|
11
|
+
readonly identityIssuer?: string;
|
|
12
|
+
readonly subject: string;
|
|
13
|
+
readonly email: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export interface OrgMemberRecord {
|
|
17
|
+
readonly orgSlug: string;
|
|
18
|
+
readonly subject: string;
|
|
19
|
+
readonly email: string;
|
|
20
|
+
readonly role: OrgRole;
|
|
21
|
+
readonly createdAt: string;
|
|
22
|
+
}
|
|
23
|
+
export interface OrgDomainRecord {
|
|
24
|
+
readonly orgSlug: string;
|
|
25
|
+
readonly domain: string;
|
|
26
|
+
readonly challenge: string;
|
|
27
|
+
readonly createdAt: string;
|
|
28
|
+
readonly verifiedAt?: string;
|
|
29
|
+
readonly lastCheckedAt?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface OrgOpenAIAppsChallengeRecord {
|
|
32
|
+
readonly orgSlug: string;
|
|
33
|
+
readonly challenge: string;
|
|
34
|
+
readonly updatedAt: string;
|
|
35
|
+
readonly updatedBySubject?: string;
|
|
36
|
+
readonly updatedByEmail?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface OrgInvitationRecord {
|
|
39
|
+
readonly orgSlug: string;
|
|
40
|
+
readonly email: string;
|
|
41
|
+
readonly role: OrgRole;
|
|
42
|
+
readonly tokenHash: string;
|
|
43
|
+
readonly createdAt: string;
|
|
44
|
+
readonly expiresAt: string;
|
|
45
|
+
readonly createdBySubject: string;
|
|
46
|
+
readonly createdByEmail?: string;
|
|
47
|
+
readonly acceptedAt?: string;
|
|
48
|
+
}
|
|
49
|
+
export type SignupAllowlistKind = 'subject' | 'domain';
|
|
50
|
+
export interface SignupAllowlistRecord {
|
|
51
|
+
readonly kind: SignupAllowlistKind;
|
|
52
|
+
readonly value: string;
|
|
53
|
+
readonly createdAt: string;
|
|
54
|
+
readonly createdBySubject?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface PersonalWorkspaceProvisionInput {
|
|
57
|
+
readonly slug: string;
|
|
58
|
+
readonly displayName: string;
|
|
59
|
+
readonly identityIssuer?: string;
|
|
60
|
+
readonly subject: string;
|
|
61
|
+
readonly email: string;
|
|
62
|
+
readonly firstName?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface PersonalWorkspaceProvisionResult {
|
|
65
|
+
readonly org: OrgRecord;
|
|
66
|
+
/** True only when this call created the personal org and its welcome-email outbox record. */
|
|
67
|
+
readonly created: boolean;
|
|
68
|
+
}
|
|
69
|
+
export interface WelcomeEmailRecord {
|
|
70
|
+
readonly subject: string;
|
|
71
|
+
readonly email: string;
|
|
72
|
+
readonly firstName?: string;
|
|
73
|
+
readonly createdAt: string;
|
|
74
|
+
readonly attemptCount: number;
|
|
75
|
+
readonly nextAttemptAt: string;
|
|
76
|
+
readonly leaseExpiresAt?: string;
|
|
77
|
+
readonly sentAt?: string;
|
|
78
|
+
readonly providerMessageId?: string;
|
|
79
|
+
readonly lastErrorCode?: 'delivery_failed';
|
|
80
|
+
}
|
|
81
|
+
export interface OrganizationStore {
|
|
82
|
+
/** Atomically create a user's personal org, owner membership, and first-signup welcome outbox row. */
|
|
83
|
+
provisionPersonalWorkspace(input: PersonalWorkspaceProvisionInput): Promise<PersonalWorkspaceProvisionResult>;
|
|
84
|
+
claimWelcomeEmail(input: {
|
|
85
|
+
readonly now: Date;
|
|
86
|
+
readonly leaseMs: number;
|
|
87
|
+
}): Promise<WelcomeEmailRecord | undefined>;
|
|
88
|
+
markWelcomeEmailSent(input: {
|
|
89
|
+
readonly subject: string;
|
|
90
|
+
readonly providerMessageId: string;
|
|
91
|
+
}): Promise<void>;
|
|
92
|
+
markWelcomeEmailFailed(input: {
|
|
93
|
+
readonly subject: string;
|
|
94
|
+
readonly nextAttemptAt: Date;
|
|
95
|
+
}): Promise<void>;
|
|
96
|
+
/** Point read used by operators and focused tests; never exposed through the public API. */
|
|
97
|
+
getWelcomeEmail(subject: string): Promise<WelcomeEmailRecord | undefined>;
|
|
98
|
+
createOrg(input: {
|
|
99
|
+
readonly slug: string;
|
|
100
|
+
readonly displayName?: string;
|
|
101
|
+
}): Promise<OrgRecord>;
|
|
102
|
+
/**
|
|
103
|
+
* Create an org with its first owner, or repair an existing org that has no owner. Existing owned
|
|
104
|
+
* orgs keep their membership unchanged so a later super-admin cannot claim them by repeating create.
|
|
105
|
+
*/
|
|
106
|
+
createOrgWithOwner(input: CreateOrgWithOwnerInput): Promise<OrgRecord>;
|
|
107
|
+
/** Update an existing org's display name; `undefined` when the org does not exist (never creates). */
|
|
108
|
+
updateOrg(input: {
|
|
109
|
+
readonly slug: string;
|
|
110
|
+
readonly displayName: string;
|
|
111
|
+
}): Promise<OrgRecord | undefined>;
|
|
112
|
+
/** Point read for org inspect (`GET /v1/orgs/{org}`); `undefined` when the org does not exist. */
|
|
113
|
+
getOrg(org: string): Promise<OrgRecord | undefined>;
|
|
114
|
+
listOrgs(): Promise<readonly OrgRecord[]>;
|
|
115
|
+
listOrgsForSubject(subject: string): Promise<readonly OrgRecord[]>;
|
|
116
|
+
addOrgMember(input: {
|
|
117
|
+
readonly org: string;
|
|
118
|
+
readonly subject: string;
|
|
119
|
+
readonly email: string;
|
|
120
|
+
readonly role: OrgRole;
|
|
121
|
+
}): Promise<OrgMemberRecord>;
|
|
122
|
+
removeOrgMember(input: {
|
|
123
|
+
readonly org: string;
|
|
124
|
+
readonly subject: string;
|
|
125
|
+
}): Promise<boolean>;
|
|
126
|
+
/** Change an existing member's role; `undefined` when the member does not exist (never adds). */
|
|
127
|
+
updateOrgMemberRole(input: {
|
|
128
|
+
readonly org: string;
|
|
129
|
+
readonly subject: string;
|
|
130
|
+
readonly role: OrgRole;
|
|
131
|
+
}): Promise<OrgMemberRecord | undefined>;
|
|
132
|
+
getOrgMember(input: {
|
|
133
|
+
readonly org: string;
|
|
134
|
+
readonly subject: string;
|
|
135
|
+
}): Promise<OrgMemberRecord | undefined>;
|
|
136
|
+
listOrgMembers(org: string): Promise<readonly OrgMemberRecord[]>;
|
|
137
|
+
isOrgMember(input: {
|
|
138
|
+
readonly org: string;
|
|
139
|
+
readonly subject: string;
|
|
140
|
+
}): Promise<boolean>;
|
|
141
|
+
/** Register a domain whose signed-in users are org members on the data plane (ADR 0181). */
|
|
142
|
+
addOrgDomain(input: {
|
|
143
|
+
readonly org: string;
|
|
144
|
+
readonly domain: string;
|
|
145
|
+
readonly challenge?: string;
|
|
146
|
+
}): Promise<OrgDomainRecord>;
|
|
147
|
+
removeOrgDomain(input: {
|
|
148
|
+
readonly org: string;
|
|
149
|
+
readonly domain: string;
|
|
150
|
+
}): Promise<boolean>;
|
|
151
|
+
/** Dormant DNS-proof state, retained for a future org auto-join surface; it gates nothing today. */
|
|
152
|
+
markOrgDomainVerification(input: {
|
|
153
|
+
readonly org: string;
|
|
154
|
+
readonly domain: string;
|
|
155
|
+
readonly verified: boolean;
|
|
156
|
+
}): Promise<OrgDomainRecord | undefined>;
|
|
157
|
+
listOrgDomains(org: string): Promise<readonly OrgDomainRecord[]>;
|
|
158
|
+
setOrgOpenAIAppsChallenge(input: {
|
|
159
|
+
readonly org: string;
|
|
160
|
+
readonly challenge: string;
|
|
161
|
+
readonly updatedBySubject?: string;
|
|
162
|
+
readonly updatedByEmail?: string;
|
|
163
|
+
}): Promise<OrgOpenAIAppsChallengeRecord>;
|
|
164
|
+
getOrgOpenAIAppsChallenge(org: string): Promise<OrgOpenAIAppsChallengeRecord | undefined>;
|
|
165
|
+
clearOrgOpenAIAppsChallenge(org: string): Promise<boolean>;
|
|
166
|
+
isDataPlaneOrgMember(input: {
|
|
167
|
+
readonly org: string;
|
|
168
|
+
readonly subject: string;
|
|
169
|
+
readonly email?: string;
|
|
170
|
+
}): Promise<boolean>;
|
|
171
|
+
allowSignup(input: {
|
|
172
|
+
readonly kind: SignupAllowlistKind;
|
|
173
|
+
readonly value: string;
|
|
174
|
+
readonly createdBySubject?: string;
|
|
175
|
+
}): Promise<SignupAllowlistRecord>;
|
|
176
|
+
listSignupAllowlist(): Promise<readonly SignupAllowlistRecord[]>;
|
|
177
|
+
isSignupAllowed(input: {
|
|
178
|
+
readonly subject: string;
|
|
179
|
+
readonly email: string;
|
|
180
|
+
}): Promise<boolean>;
|
|
181
|
+
createOrgInvitation(input: {
|
|
182
|
+
readonly org: string;
|
|
183
|
+
readonly email: string;
|
|
184
|
+
readonly role: OrgRole;
|
|
185
|
+
readonly tokenHash: string;
|
|
186
|
+
readonly createdBySubject: string;
|
|
187
|
+
readonly createdByEmail?: string;
|
|
188
|
+
readonly expiresAt: Date;
|
|
189
|
+
}): Promise<OrgInvitationRecord>;
|
|
190
|
+
getOrgInvitation(input: {
|
|
191
|
+
readonly tokenHash: string;
|
|
192
|
+
}): Promise<OrgInvitationRecord | undefined>;
|
|
193
|
+
consumeOrgInvitation(input: {
|
|
194
|
+
readonly tokenHash: string;
|
|
195
|
+
}): Promise<OrgInvitationRecord | undefined>;
|
|
196
|
+
/**
|
|
197
|
+
* Every invitation record for one org (pending, accepted, and expired), newest-first. Callers derive
|
|
198
|
+
* status from `acceptedAt`/`expiresAt`; the raw `tokenHash` must never leave the control plane.
|
|
199
|
+
*/
|
|
200
|
+
listOrgInvitations(org: string): Promise<readonly OrgInvitationRecord[]>;
|
|
201
|
+
/**
|
|
202
|
+
* Delete every unaccepted invitation for one email (case-insensitive) in one org, returning how many
|
|
203
|
+
* were revoked. Accepted invitations are membership history and stay in place.
|
|
204
|
+
*/
|
|
205
|
+
revokeOrgInvitation(input: {
|
|
206
|
+
readonly org: string;
|
|
207
|
+
readonly email: string;
|
|
208
|
+
}): Promise<number>;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { CreateOrgWithOwnerInput, OrganizationStore, OrgDomainRecord, OrgInvitationRecord, OrgMemberRecord, OrgOpenAIAppsChallengeRecord, OrgRecord, OrgRole, PersonalWorkspaceProvisionInput, PersonalWorkspaceProvisionResult, SignupAllowlistKind, SignupAllowlistRecord, WelcomeEmailRecord, } from './contracts.js';
|
|
2
|
+
export type { EnsureDefaultOrgBillingTx } from './postgres-contracts.js';
|
|
3
|
+
export { addOrgDomainRow, addOrgMemberRow, allowSignupRow, claimWelcomeEmailRow, clearOrgOpenAIAppsChallengeRow, consumeOrgInvitationRow, createOrgInvitationRow, createOrgRow, createOrgWithOwnerRow, getOrgInvitationRow, getOrgMemberRow, getOrgOpenAIAppsChallengeRow, getOrgRow, getWelcomeEmailRow, hasOrgDomainMembership, isOrgMemberRow, isSignupAllowedByRows, listOrgDomainRows, listOrgInvitationRows, listOrgMemberRows, listOrgRows, listOrgRowsForSubject, listSignupAllowlistRows, markOrgDomainVerificationRow, markWelcomeEmailFailedRow, markWelcomeEmailSentRow, removeOrgDomainRow, removeOrgMemberRow, revokeOrgInvitationRows, setOrgOpenAIAppsChallengeRow, updateOrgMemberRoleRow, updateOrgRow, } from './postgres-organization-store.js';
|
|
4
|
+
export { ensureOrganizationSchema } from './postgres-schema.js';
|
|
5
|
+
export { DOMAIN_PATTERN, isSystemOwnedOrgSlug, OPENAI_APPS_CHALLENGE_MAX_LENGTH, SLUG_PATTERN, validateDomain, validateOpenAIAppsChallenge, validateOrgMembershipDomain, validateOrgRole, validateSignupAllowlistKind, validateSlug, validateUserOwnedOrgSlug, } from './validation.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,4BAA4B,EAC5B,SAAS,EACT,OAAO,EACP,+BAA+B,EAC/B,gCAAgC,EAChC,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,4BAA4B,EAC5B,SAAS,EACT,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,EACtB,YAAY,GACb,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,gCAAgC,EAChC,YAAY,EACZ,cAAc,EACd,2BAA2B,EAC3B,2BAA2B,EAC3B,eAAe,EACf,2BAA2B,EAC3B,YAAY,EACZ,wBAAwB,GACzB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { addOrgDomainRow, addOrgMemberRow, allowSignupRow, claimWelcomeEmailRow, clearOrgOpenAIAppsChallengeRow, consumeOrgInvitationRow, createOrgInvitationRow, createOrgRow, createOrgWithOwnerRow, getOrgInvitationRow, getOrgMemberRow, getOrgOpenAIAppsChallengeRow, getOrgRow, getWelcomeEmailRow, hasOrgDomainMembership, isOrgMemberRow, isSignupAllowedByRows, listOrgDomainRows, listOrgInvitationRows, listOrgMemberRows, listOrgRows, listOrgRowsForSubject, listSignupAllowlistRows, markOrgDomainVerificationRow, markWelcomeEmailFailedRow, markWelcomeEmailSentRow, removeOrgDomainRow, removeOrgMemberRow, revokeOrgInvitationRows, setOrgOpenAIAppsChallengeRow, updateOrgMemberRoleRow, updateOrgRow, } from './postgres-organization-store.js';
|
|
2
|
+
export { ensureOrganizationSchema } from './postgres-schema.js';
|
|
3
|
+
export { DOMAIN_PATTERN, isSystemOwnedOrgSlug, OPENAI_APPS_CHALLENGE_MAX_LENGTH, SLUG_PATTERN, validateDomain, validateOpenAIAppsChallenge, validateOrgMembershipDomain, validateOrgRole, validateSignupAllowlistKind, validateSlug, validateUserOwnedOrgSlug, } from './validation.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,4BAA4B,EAC5B,SAAS,EACT,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,EACtB,YAAY,GACb,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,gCAAgC,EAChC,YAAY,EACZ,cAAc,EACd,2BAA2B,EAC3B,2BAA2B,EAC3B,eAAe,EACf,2BAA2B,EAC3B,YAAY,EACZ,wBAAwB,GACzB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PoolClient } from 'pg';
|
|
2
|
+
export type EnsureDefaultOrgBillingTx = (client: PoolClient, input: {
|
|
3
|
+
readonly org: string;
|
|
4
|
+
readonly owner: {
|
|
5
|
+
readonly identityIssuer?: string;
|
|
6
|
+
readonly subject: string;
|
|
7
|
+
readonly email: string;
|
|
8
|
+
};
|
|
9
|
+
readonly reason: 'organization-created';
|
|
10
|
+
}, createdAt: Date) => Promise<void>;
|
|
11
|
+
//# sourceMappingURL=postgres-contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-contracts.d.ts","sourceRoot":"","sources":["../src/postgres-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAErC,MAAM,MAAM,yBAAyB,GAAG,CACtC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE;IACL,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;CACzC,EACD,SAAS,EAAE,IAAI,KACZ,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-contracts.js","sourceRoot":"","sources":["../src/postgres-contracts.ts"],"names":[],"mappings":""}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Pool } from 'pg';
|
|
2
|
-
import type { CreateOrgWithOwnerInput, OrgDomainRecord, OrgInvitationRecord, OrgMemberRecord, OrgOpenAIAppsChallengeRecord, OrgRecord, OrgRole, SignupAllowlistKind, SignupAllowlistRecord, WelcomeEmailRecord } from '
|
|
2
|
+
import type { CreateOrgWithOwnerInput, OrgDomainRecord, OrgInvitationRecord, OrgMemberRecord, OrgOpenAIAppsChallengeRecord, OrgRecord, OrgRole, SignupAllowlistKind, SignupAllowlistRecord, WelcomeEmailRecord } from './contracts.js';
|
|
3
|
+
import type { EnsureDefaultOrgBillingTx } from './postgres-contracts.js';
|
|
3
4
|
export declare function createOrgRow(pool: Pool, input: {
|
|
4
5
|
readonly slug: string;
|
|
5
6
|
readonly displayName?: string;
|
|
@@ -17,7 +18,7 @@ export declare function markWelcomeEmailFailedRow(pool: Pool, input: {
|
|
|
17
18
|
readonly nextAttemptAt: Date;
|
|
18
19
|
}): Promise<void>;
|
|
19
20
|
export declare function getWelcomeEmailRow(pool: Pool, subject: string): Promise<WelcomeEmailRecord | undefined>;
|
|
20
|
-
export declare function createOrgWithOwnerRow(pool: Pool, input: CreateOrgWithOwnerInput, now: () => Date): Promise<OrgRecord>;
|
|
21
|
+
export declare function createOrgWithOwnerRow(pool: Pool, input: CreateOrgWithOwnerInput, now: () => Date, ensureDefaultOrgBilling: EnsureDefaultOrgBillingTx): Promise<OrgRecord>;
|
|
21
22
|
export declare function getOrgRow(pool: Pool, slug: string): Promise<OrgRecord | undefined>;
|
|
22
23
|
export declare function updateOrgRow(pool: Pool, input: {
|
|
23
24
|
readonly slug: string;
|
|
@@ -106,4 +107,4 @@ export declare function revokeOrgInvitationRows(pool: Pool, input: {
|
|
|
106
107
|
readonly org: string;
|
|
107
108
|
readonly email: string;
|
|
108
109
|
}): Promise<number>;
|
|
109
|
-
//# sourceMappingURL=postgres-
|
|
110
|
+
//# sourceMappingURL=postgres-organization-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-organization-store.d.ts","sourceRoot":"","sources":["../src/postgres-organization-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import {
|
|
3
|
-
import { validateDomain, validateOpenAIAppsChallenge, validateOrgMembershipDomain, validateOrgRole, validateSignupAllowlistKind, validateSlug, validateUserOwnedOrgSlug, } from '../store.js';
|
|
2
|
+
import { validateDomain, validateOpenAIAppsChallenge, validateOrgMembershipDomain, validateOrgRole, validateSignupAllowlistKind, validateSlug, validateUserOwnedOrgSlug, } from './validation.js';
|
|
4
3
|
export async function createOrgRow(pool, input) {
|
|
5
4
|
const slug = validateSlug('org', input.slug);
|
|
6
5
|
const { rows } = await pool.query(`INSERT INTO orgs (slug, display_name)
|
|
@@ -42,7 +41,7 @@ export async function getWelcomeEmailRow(pool, subject) {
|
|
|
42
41
|
const { rows } = await pool.query('SELECT * FROM welcome_email_outbox WHERE subject = $1', [subject]);
|
|
43
42
|
return rows[0] ? welcomeEmailRowToRecord(rows[0]) : undefined;
|
|
44
43
|
}
|
|
45
|
-
export async function createOrgWithOwnerRow(pool, input, now) {
|
|
44
|
+
export async function createOrgWithOwnerRow(pool, input, now, ensureDefaultOrgBilling) {
|
|
46
45
|
const slug = validateUserOwnedOrgSlug(input.slug);
|
|
47
46
|
const client = await pool.connect();
|
|
48
47
|
try {
|
|
@@ -64,7 +63,7 @@ export async function createOrgWithOwnerRow(pool, input, now) {
|
|
|
64
63
|
email = EXCLUDED.email,
|
|
65
64
|
role = 'owner'`, [slug, input.owner.subject, input.owner.email.toLowerCase()]);
|
|
66
65
|
const billingCreatedAt = now();
|
|
67
|
-
await
|
|
66
|
+
await ensureDefaultOrgBilling(client, {
|
|
68
67
|
org: slug,
|
|
69
68
|
owner: input.owner,
|
|
70
69
|
reason: 'organization-created',
|
|
@@ -351,4 +350,4 @@ function welcomeEmailRowToRecord(row) {
|
|
|
351
350
|
...(row.last_error_code === 'delivery_failed' ? { lastErrorCode: 'delivery_failed' } : {}),
|
|
352
351
|
};
|
|
353
352
|
}
|
|
354
|
-
//# sourceMappingURL=postgres-
|
|
353
|
+
//# sourceMappingURL=postgres-organization-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-organization-store.js","sourceRoot":"","sources":["../src/postgres-organization-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-schema.d.ts","sourceRoot":"","sources":["../src/postgres-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,sFAAsF;AACtF,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFxE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/** Idempotent organization, membership, signup, and onboarding persistence schema. */
|
|
2
|
+
export async function ensureOrganizationSchema(pool) {
|
|
3
|
+
await pool.query(`
|
|
4
|
+
CREATE TABLE IF NOT EXISTS orgs (
|
|
5
|
+
slug text PRIMARY KEY,
|
|
6
|
+
display_name text,
|
|
7
|
+
created_at timestamptz NOT NULL DEFAULT now()
|
|
8
|
+
)
|
|
9
|
+
`);
|
|
10
|
+
await pool.query(`
|
|
11
|
+
CREATE TABLE IF NOT EXISTS org_members (
|
|
12
|
+
org_slug text NOT NULL REFERENCES orgs(slug) ON DELETE CASCADE,
|
|
13
|
+
subject text NOT NULL,
|
|
14
|
+
email text NOT NULL,
|
|
15
|
+
role text NOT NULL,
|
|
16
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
17
|
+
PRIMARY KEY (org_slug, subject)
|
|
18
|
+
)
|
|
19
|
+
`);
|
|
20
|
+
await pool.query(`
|
|
21
|
+
CREATE TABLE IF NOT EXISTS welcome_email_outbox (
|
|
22
|
+
subject text PRIMARY KEY,
|
|
23
|
+
org_slug text NOT NULL REFERENCES orgs(slug) ON DELETE CASCADE,
|
|
24
|
+
email text NOT NULL,
|
|
25
|
+
first_name text,
|
|
26
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
27
|
+
attempt_count integer NOT NULL DEFAULT 0,
|
|
28
|
+
next_attempt_at timestamptz NOT NULL DEFAULT now(),
|
|
29
|
+
lease_expires_at timestamptz,
|
|
30
|
+
sent_at timestamptz,
|
|
31
|
+
provider_message_id text,
|
|
32
|
+
last_error_code text
|
|
33
|
+
)
|
|
34
|
+
`);
|
|
35
|
+
await pool.query(`ALTER TABLE welcome_email_outbox ADD COLUMN IF NOT EXISTS first_name text`);
|
|
36
|
+
await pool.query(`
|
|
37
|
+
CREATE INDEX IF NOT EXISTS welcome_email_outbox_pending_idx
|
|
38
|
+
ON welcome_email_outbox (next_attempt_at, created_at)
|
|
39
|
+
WHERE sent_at IS NULL
|
|
40
|
+
`);
|
|
41
|
+
await pool.query(`
|
|
42
|
+
CREATE TABLE IF NOT EXISTS org_domains (
|
|
43
|
+
org_slug text NOT NULL REFERENCES orgs(slug) ON DELETE CASCADE,
|
|
44
|
+
domain text NOT NULL,
|
|
45
|
+
challenge text NOT NULL,
|
|
46
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
47
|
+
verified_at timestamptz,
|
|
48
|
+
last_checked_at timestamptz,
|
|
49
|
+
PRIMARY KEY (org_slug, domain)
|
|
50
|
+
)
|
|
51
|
+
`);
|
|
52
|
+
await pool.query(`
|
|
53
|
+
CREATE TABLE IF NOT EXISTS org_openai_apps_challenges (
|
|
54
|
+
org_slug text PRIMARY KEY REFERENCES orgs(slug) ON DELETE CASCADE,
|
|
55
|
+
challenge text NOT NULL,
|
|
56
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
57
|
+
updated_by_subject text,
|
|
58
|
+
updated_by_email text
|
|
59
|
+
)
|
|
60
|
+
`);
|
|
61
|
+
await pool.query(`
|
|
62
|
+
CREATE TABLE IF NOT EXISTS signup_allowlist (
|
|
63
|
+
kind text NOT NULL CHECK (kind IN ('subject', 'domain')),
|
|
64
|
+
value text NOT NULL,
|
|
65
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
66
|
+
created_by_subject text,
|
|
67
|
+
PRIMARY KEY (kind, value)
|
|
68
|
+
)
|
|
69
|
+
`);
|
|
70
|
+
await pool.query(`
|
|
71
|
+
CREATE TABLE IF NOT EXISTS org_invitations (
|
|
72
|
+
token_hash text PRIMARY KEY,
|
|
73
|
+
org_slug text NOT NULL REFERENCES orgs(slug) ON DELETE CASCADE,
|
|
74
|
+
email text NOT NULL,
|
|
75
|
+
role text NOT NULL,
|
|
76
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
77
|
+
expires_at timestamptz NOT NULL,
|
|
78
|
+
created_by_subject text NOT NULL,
|
|
79
|
+
created_by_email text,
|
|
80
|
+
accepted_at timestamptz
|
|
81
|
+
)
|
|
82
|
+
`);
|
|
83
|
+
await pool.query(`
|
|
84
|
+
CREATE INDEX IF NOT EXISTS org_invitations_org_email_idx
|
|
85
|
+
ON org_invitations (org_slug, email, expires_at)
|
|
86
|
+
`);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=postgres-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-schema.js","sourceRoot":"","sources":["../src/postgres-schema.ts"],"names":[],"mappings":"AAEA,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAAU;IACvD,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;KAMd,CAAC,CAAC;IACL,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;KASd,CAAC,CAAC;IACL,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;KAcd,CAAC,CAAC;IACL,MAAM,IAAI,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAC9F,MAAM,IAAI,CAAC,KAAK,CAAC;;;;KAId,CAAC,CAAC;IACL,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;KAUd,CAAC,CAAC;IACL,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;KAQd,CAAC,CAAC;IACL,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;KAQd,CAAC,CAAC;IACL,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;KAYd,CAAC,CAAC;IACL,MAAM,IAAI,CAAC,KAAK,CAAC;;;KAGd,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { OrgRole, SignupAllowlistKind } from './contracts.js';
|
|
2
|
+
export declare const SLUG_PATTERN: RegExp;
|
|
3
|
+
export declare const DOMAIN_PATTERN: RegExp;
|
|
4
|
+
export declare const OPENAI_APPS_CHALLENGE_MAX_LENGTH = 2048;
|
|
5
|
+
/** Whether an organization namespace is owned by service bootstrap rather than a customer. */
|
|
6
|
+
export declare function isSystemOwnedOrgSlug(value: string): boolean;
|
|
7
|
+
export declare function validateSlug(kind: 'org' | 'app' | 'env', value: string): string;
|
|
8
|
+
/** User-owned organizations must not claim namespaces reserved for service bootstrap behavior. */
|
|
9
|
+
export declare function validateUserOwnedOrgSlug(value: string): string;
|
|
10
|
+
export declare function validateDomain(value: string): string;
|
|
11
|
+
/** Validate a domain that will grant data-plane membership to everyone who signs in with it. */
|
|
12
|
+
export declare function validateOrgMembershipDomain(value: string): string;
|
|
13
|
+
export declare function validateOpenAIAppsChallenge(value: string): string;
|
|
14
|
+
export declare function validateSignupAllowlistKind(value: string): SignupAllowlistKind;
|
|
15
|
+
export declare function validateOrgRole(role: string): OrgRole;
|
|
16
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEnE,eAAO,MAAM,YAAY,QAA2C,CAAC;AACrE,eAAO,MAAM,cAAc,QAAoD,CAAC;AAChF,eAAO,MAAM,gCAAgC,OAAO,CAAC;AAKrD,8FAA8F;AAC9F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAO/E;AAED,kGAAkG;AAClG,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAyBD,gGAAgG;AAChG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASjE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAcjE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAK9E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKrD"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export const SLUG_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;
|
|
2
|
+
export const DOMAIN_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,62}\.)+[a-z0-9-]{2,63}$/;
|
|
3
|
+
export const OPENAI_APPS_CHALLENGE_MAX_LENGTH = 2048;
|
|
4
|
+
const RESERVED_SLUGS = new Set(['deploy', 'healthz', 'readyz', 'v1', 'o', 'mcp']);
|
|
5
|
+
const SYSTEM_OWNED_ORG_SLUGS = new Set(['local']);
|
|
6
|
+
/** Whether an organization namespace is owned by service bootstrap rather than a customer. */
|
|
7
|
+
export function isSystemOwnedOrgSlug(value) {
|
|
8
|
+
return SYSTEM_OWNED_ORG_SLUGS.has(value);
|
|
9
|
+
}
|
|
10
|
+
export function validateSlug(kind, value) {
|
|
11
|
+
if (!SLUG_PATTERN.test(value) || RESERVED_SLUGS.has(value)) {
|
|
12
|
+
throw new Error(`invalid ${kind} slug "${value}"; use lowercase letters, numbers, and hyphens only`);
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
/** User-owned organizations must not claim namespaces reserved for service bootstrap behavior. */
|
|
17
|
+
export function validateUserOwnedOrgSlug(value) {
|
|
18
|
+
const slug = validateSlug('org', value);
|
|
19
|
+
if (isSystemOwnedOrgSlug(slug)) {
|
|
20
|
+
throw new Error(`organization slug "${value}" is reserved for system use`);
|
|
21
|
+
}
|
|
22
|
+
return slug;
|
|
23
|
+
}
|
|
24
|
+
export function validateDomain(value) {
|
|
25
|
+
const domain = value.trim().toLowerCase();
|
|
26
|
+
if (!DOMAIN_PATTERN.test(domain)) {
|
|
27
|
+
throw new Error(`invalid domain "${value}"`);
|
|
28
|
+
}
|
|
29
|
+
return domain;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Consumer mailbox providers. Registering one as an org domain would admit every signed-in user on the
|
|
33
|
+
* platform while reading like a narrow rule, so it is refused: `--access authenticated` is the one
|
|
34
|
+
* canonical way to say "anyone signed in".
|
|
35
|
+
*/
|
|
36
|
+
const PUBLIC_EMAIL_PROVIDERS = new Set([
|
|
37
|
+
'aol.com',
|
|
38
|
+
'gmail.com',
|
|
39
|
+
'googlemail.com',
|
|
40
|
+
'hotmail.com',
|
|
41
|
+
'icloud.com',
|
|
42
|
+
'live.com',
|
|
43
|
+
'mail.com',
|
|
44
|
+
'me.com',
|
|
45
|
+
'msn.com',
|
|
46
|
+
'outlook.com',
|
|
47
|
+
'proton.me',
|
|
48
|
+
'protonmail.com',
|
|
49
|
+
'yahoo.com',
|
|
50
|
+
'yandex.com',
|
|
51
|
+
'zoho.com',
|
|
52
|
+
]);
|
|
53
|
+
/** Validate a domain that will grant data-plane membership to everyone who signs in with it. */
|
|
54
|
+
export function validateOrgMembershipDomain(value) {
|
|
55
|
+
const domain = validateDomain(value);
|
|
56
|
+
if (PUBLIC_EMAIL_PROVIDERS.has(domain)) {
|
|
57
|
+
throw new Error(`"${domain}" is a public email provider, so every signed-in user would match it; ` +
|
|
58
|
+
'use --access authenticated if that is what you want');
|
|
59
|
+
}
|
|
60
|
+
return domain;
|
|
61
|
+
}
|
|
62
|
+
export function validateOpenAIAppsChallenge(value) {
|
|
63
|
+
const challenge = value.trim();
|
|
64
|
+
if (challenge.length === 0) {
|
|
65
|
+
throw new Error('OpenAI Apps challenge must be a non-empty string');
|
|
66
|
+
}
|
|
67
|
+
if (challenge.length > OPENAI_APPS_CHALLENGE_MAX_LENGTH) {
|
|
68
|
+
throw new Error(`OpenAI Apps challenge must be at most ${OPENAI_APPS_CHALLENGE_MAX_LENGTH} characters`);
|
|
69
|
+
}
|
|
70
|
+
if (/[\r\n]/.test(challenge)) {
|
|
71
|
+
throw new Error('OpenAI Apps challenge must be a single line');
|
|
72
|
+
}
|
|
73
|
+
return challenge;
|
|
74
|
+
}
|
|
75
|
+
export function validateSignupAllowlistKind(value) {
|
|
76
|
+
if (value !== 'subject' && value !== 'domain') {
|
|
77
|
+
throw new Error(`invalid signup allowlist kind "${value}"`);
|
|
78
|
+
}
|
|
79
|
+
return value;
|
|
80
|
+
}
|
|
81
|
+
export function validateOrgRole(role) {
|
|
82
|
+
if (role !== 'owner' && role !== 'developer') {
|
|
83
|
+
throw new Error(`invalid org role "${role}"`);
|
|
84
|
+
}
|
|
85
|
+
return role;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@noodle-borg/control-plane",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=24"
|
|
9
|
+
},
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc -p tsconfig.json",
|
|
23
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/node": "^24.13.1",
|
|
28
|
+
"@types/pg": "^8.20.0"
|
|
29
|
+
}
|
|
30
|
+
}
|