@neondatabase/auth 0.4.0-beta → 0.4.1-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,101 +1,74 @@
1
- import { n as NeonAuthAdapterCoreAuthOptions, t as NeonAuthAdapterCore } from "./adapter-core-BWM7cWOp.mjs";
1
+ import { n as NeonAuthAdapterCoreAuthOptions, r as SupportedBetterAuthClientPlugins, t as NeonAuthAdapterCore } from "./adapter-core-ClY-p_AI.mjs";
2
+ import { r as SupabaseAuthClientInterface } from "./auth-interface-Clz-oWq1.mjs";
2
3
  import * as better_auth_react0 from "better-auth/react";
4
+ import * as better_auth_client0 from "better-auth/client";
5
+ import { createAuthClient as createAuthClient$1 } from "better-auth/client";
6
+ import * as _supabase_auth_js0 from "@supabase/auth-js";
7
+ import { JwtHeader, JwtPayload } from "@supabase/auth-js";
3
8
  import * as jose0 from "jose";
4
9
  import * as better_auth_plugins21 from "better-auth/plugins";
5
10
  import * as better_auth155 from "better-auth";
6
11
  import * as _better_fetch_fetch91 from "@better-fetch/fetch";
7
12
 
8
- //#region src/adapters/better-auth-react/better-auth-react-adapter.d.ts
9
- type BetterAuthReactAdapterOptions = Omit<NeonAuthAdapterCoreAuthOptions, 'baseURL'>;
13
+ //#region src/adapters/better-auth-vanilla/better-auth-vanilla-adapter.d.ts
14
+ type BetterAuthVanillaAdapterOptions = Omit<NeonAuthAdapterCoreAuthOptions, 'baseURL'>;
10
15
  /**
11
- * Internal implementation class - use BetterAuthReactAdapter factory function instead
16
+ * Internal implementation class - use BetterAuthVanillaAdapter factory function instead
12
17
  */
13
- declare class BetterAuthReactAdapterImpl extends NeonAuthAdapterCore {
18
+ declare class BetterAuthVanillaAdapterImpl extends NeonAuthAdapterCore {
14
19
  private _betterAuth;
15
20
  constructor(betterAuthClientOptions: NeonAuthAdapterCoreAuthOptions);
16
21
  getBetterAuthInstance(): {
17
- useActiveOrganization: () => {
18
- data: better_auth155.Prettify<{
22
+ useActiveOrganization: better_auth_client0.AuthQueryAtom<better_auth155.Prettify<{
23
+ id: string;
24
+ name: string;
25
+ slug: string;
26
+ createdAt: Date;
27
+ logo?: string | null | undefined | undefined;
28
+ metadata?: any;
29
+ } & {
30
+ members: {
19
31
  id: string;
20
- name: string;
21
- slug: string;
32
+ organizationId: string;
33
+ role: "admin" | "member" | "owner";
22
34
  createdAt: Date;
23
- logo?: string | null | undefined | undefined;
24
- metadata?: any;
25
- } & {
26
- members: {
27
- id: string;
28
- organizationId: string;
29
- role: "admin" | "member" | "owner";
30
- createdAt: Date;
31
- userId: string;
32
- user: {
33
- id: string;
34
- email: string;
35
- name: string;
36
- image?: string | undefined;
37
- };
38
- }[];
39
- invitations: {
35
+ userId: string;
36
+ user: {
40
37
  id: string;
41
- organizationId: string;
42
38
  email: string;
43
- role: "admin" | "member" | "owner";
44
- status: better_auth_plugins21.InvitationStatus;
45
- inviterId: string;
46
- expiresAt: Date;
47
- createdAt: Date;
48
- }[];
49
- }> | null;
50
- error: null | _better_fetch_fetch91.BetterFetchError;
51
- isPending: boolean;
52
- isRefetching: boolean;
53
- refetch: (queryParams?: {
54
- query?: better_auth155.SessionQueryParams;
55
- } | undefined) => Promise<void>;
56
- };
57
- useListOrganizations: () => {
58
- data: {
59
- id: string;
60
- name: string;
61
- slug: string;
62
- createdAt: Date;
63
- logo?: string | null | undefined | undefined;
64
- metadata?: any;
65
- }[] | null;
66
- error: null | _better_fetch_fetch91.BetterFetchError;
67
- isPending: boolean;
68
- isRefetching: boolean;
69
- refetch: (queryParams?: {
70
- query?: better_auth155.SessionQueryParams;
71
- } | undefined) => Promise<void>;
72
- };
73
- useActiveMember: () => {
74
- data: {
39
+ name: string;
40
+ image?: string | undefined;
41
+ };
42
+ }[];
43
+ invitations: {
75
44
  id: string;
76
45
  organizationId: string;
77
- userId: string;
78
- role: string;
46
+ email: string;
47
+ role: "admin" | "member" | "owner";
48
+ status: better_auth_plugins21.InvitationStatus;
49
+ inviterId: string;
50
+ expiresAt: Date;
79
51
  createdAt: Date;
80
- } | null;
81
- error: null | _better_fetch_fetch91.BetterFetchError;
82
- isPending: boolean;
83
- isRefetching: boolean;
84
- refetch: (queryParams?: {
85
- query?: better_auth155.SessionQueryParams;
86
- } | undefined) => Promise<void>;
87
- };
88
- useActiveMemberRole: () => {
89
- data: {
90
- role: string;
91
- } | null;
92
- error: null | _better_fetch_fetch91.BetterFetchError;
93
- isPending: boolean;
94
- isRefetching: boolean;
95
- refetch: (queryParams?: {
96
- query?: better_auth155.SessionQueryParams;
97
- } | undefined) => Promise<void>;
98
- };
52
+ }[];
53
+ }>>;
54
+ useListOrganizations: better_auth_client0.AuthQueryAtom<{
55
+ id: string;
56
+ name: string;
57
+ slug: string;
58
+ createdAt: Date;
59
+ logo?: string | null | undefined | undefined;
60
+ metadata?: any;
61
+ }[]>;
62
+ useActiveMember: better_auth_client0.AuthQueryAtom<{
63
+ id: string;
64
+ organizationId: string;
65
+ userId: string;
66
+ role: string;
67
+ createdAt: Date;
68
+ }>;
69
+ useActiveMemberRole: better_auth_client0.AuthQueryAtom<{
70
+ role: string;
71
+ }>;
99
72
  } & {
100
73
  token: <FetchOptions extends better_auth155.ClientFetchOption<never, Partial<Record<string, any>> & Record<string, any>, Record<string, any> | undefined>>(data_0?: better_auth155.Prettify<{
101
74
  query?: Record<string, any> | undefined;
@@ -1969,7 +1942,7 @@ declare class BetterAuthReactAdapterImpl extends NeonAuthAdapterCore {
1969
1942
  }) => boolean;
1970
1943
  };
1971
1944
  } & {
1972
- useSession: () => {
1945
+ useSession: better_auth_react0.Atom<{
1973
1946
  data: {
1974
1947
  user: {
1975
1948
  id: string;
@@ -1997,42 +1970,13 @@ declare class BetterAuthReactAdapterImpl extends NeonAuthAdapterCore {
1997
1970
  activeOrganizationId?: string | null | undefined;
1998
1971
  };
1999
1972
  } | null;
1973
+ error: _better_fetch_fetch91.BetterFetchError | null;
2000
1974
  isPending: boolean;
2001
1975
  isRefetching: boolean;
2002
- error: _better_fetch_fetch91.BetterFetchError | null;
2003
1976
  refetch: (queryParams?: {
2004
1977
  query?: better_auth155.SessionQueryParams;
2005
1978
  } | undefined) => Promise<void>;
2006
- };
2007
- $Infer: {
2008
- Session: {
2009
- user: {
2010
- id: string;
2011
- createdAt: Date;
2012
- updatedAt: Date;
2013
- email: string;
2014
- emailVerified: boolean;
2015
- name: string;
2016
- image?: string | null | undefined;
2017
- banned: boolean | null | undefined;
2018
- role?: string | null | undefined;
2019
- banReason?: string | null | undefined;
2020
- banExpires?: Date | null | undefined;
2021
- };
2022
- session: {
2023
- id: string;
2024
- createdAt: Date;
2025
- updatedAt: Date;
2026
- userId: string;
2027
- expiresAt: Date;
2028
- token: string;
2029
- ipAddress?: string | null | undefined;
2030
- userAgent?: string | null | undefined;
2031
- impersonatedBy?: string | null | undefined;
2032
- activeOrganizationId?: string | null | undefined;
2033
- };
2034
- };
2035
- };
1979
+ }>;
2036
1980
  $fetch: _better_fetch_fetch91.BetterFetch<{
2037
1981
  plugins: (_better_fetch_fetch91.BetterFetchPlugin<Record<string, any>> | {
2038
1982
  id: string;
@@ -2104,6 +2048,35 @@ declare class BetterAuthReactAdapterImpl extends NeonAuthAdapterCore {
2104
2048
  listen: (signal: Omit<string, "$sessionSignal"> | "$sessionSignal", listener: (value: boolean, oldValue?: boolean | undefined) => void) => void;
2105
2049
  atoms: Record<string, better_auth_react0.WritableAtom<any>>;
2106
2050
  };
2051
+ $Infer: {
2052
+ Session: {
2053
+ user: {
2054
+ id: string;
2055
+ createdAt: Date;
2056
+ updatedAt: Date;
2057
+ email: string;
2058
+ emailVerified: boolean;
2059
+ name: string;
2060
+ image?: string | null | undefined;
2061
+ banned: boolean | null | undefined;
2062
+ role?: string | null | undefined;
2063
+ banReason?: string | null | undefined;
2064
+ banExpires?: Date | null | undefined;
2065
+ };
2066
+ session: {
2067
+ id: string;
2068
+ createdAt: Date;
2069
+ updatedAt: Date;
2070
+ userId: string;
2071
+ expiresAt: Date;
2072
+ token: string;
2073
+ ipAddress?: string | null | undefined;
2074
+ userAgent?: string | null | undefined;
2075
+ impersonatedBy?: string | null | undefined;
2076
+ activeOrganizationId?: string | null | undefined;
2077
+ };
2078
+ };
2079
+ };
2107
2080
  $ERROR_CODES: {
2108
2081
  readonly FAILED_TO_CREATE_USER: "Failed to create user";
2109
2082
  readonly USER_ALREADY_EXISTS: "User already exists.";
@@ -2228,12 +2201,96 @@ declare class BetterAuthReactAdapterImpl extends NeonAuthAdapterCore {
2228
2201
  };
2229
2202
  };
2230
2203
  }
2231
- /** Instance type for BetterAuthReactAdapter */
2232
- type BetterAuthReactAdapterInstance = BetterAuthReactAdapterImpl;
2204
+ /** Instance type for BetterAuthVanillaAdapter */
2205
+ type BetterAuthVanillaAdapterInstance = BetterAuthVanillaAdapterImpl;
2206
+ /** Builder type that creates adapter instances */
2207
+ type BetterAuthVanillaAdapterBuilder = (url: string, fetchOptions?: {
2208
+ headers?: Record<string, string>;
2209
+ }) => BetterAuthVanillaAdapterInstance;
2210
+ /**
2211
+ * Factory function that returns an adapter builder.
2212
+ * The builder is called by createClient/createAuthClient with the URL.
2213
+ *
2214
+ * @param options - Optional adapter configuration (baseURL is injected separately)
2215
+ * @returns A builder function that creates the adapter instance
2216
+ *
2217
+ * @example
2218
+ * ```typescript
2219
+ * const client = createClient({
2220
+ * auth: {
2221
+ * url: 'https://auth.example.com',
2222
+ * adapter: BetterAuthVanillaAdapter(),
2223
+ * },
2224
+ * dataApi: { url: 'https://data-api.example.com' },
2225
+ * });
2226
+ * ```
2227
+ */
2228
+ declare function BetterAuthVanillaAdapter(options?: BetterAuthVanillaAdapterOptions): BetterAuthVanillaAdapterBuilder;
2229
+ //#endregion
2230
+ //#region src/adapters/supabase/supabase-adapter.d.ts
2231
+ type SupabaseAuthAdapterOptions = Omit<NeonAuthAdapterCoreAuthOptions, 'baseURL'>;
2232
+ /**
2233
+ * Internal implementation class - use SupabaseAuthAdapter factory function instead
2234
+ */
2235
+ declare class SupabaseAuthAdapterImpl extends NeonAuthAdapterCore implements SupabaseAuthClientInterface {
2236
+ admin: SupabaseAuthClientInterface['admin'];
2237
+ mfa: SupabaseAuthClientInterface['mfa'];
2238
+ oauth: SupabaseAuthClientInterface['oauth'];
2239
+ private _betterAuth;
2240
+ private _stateChangeEmitters;
2241
+ constructor(betterAuthClientOptions: NeonAuthAdapterCoreAuthOptions);
2242
+ getBetterAuthInstance(): ReturnType<typeof createAuthClient$1<{
2243
+ plugins: SupportedBetterAuthClientPlugins;
2244
+ }>>;
2245
+ initialize: SupabaseAuthClientInterface['initialize'];
2246
+ getSession(options?: {
2247
+ forceFetch?: boolean;
2248
+ }): ReturnType<SupabaseAuthClientInterface['getSession']>;
2249
+ refreshSession: SupabaseAuthClientInterface['refreshSession'];
2250
+ setSession: SupabaseAuthClientInterface['setSession'];
2251
+ signUp: SupabaseAuthClientInterface['signUp'];
2252
+ signInAnonymously: SupabaseAuthClientInterface['signInAnonymously'];
2253
+ signInWithPassword: SupabaseAuthClientInterface['signInWithPassword'];
2254
+ signInWithOAuth: SupabaseAuthClientInterface['signInWithOAuth'];
2255
+ signInWithOtp: SupabaseAuthClientInterface['signInWithOtp'];
2256
+ signInWithIdToken: SupabaseAuthClientInterface['signInWithIdToken'];
2257
+ signInWithSSO: SupabaseAuthClientInterface['signInWithSSO'];
2258
+ signInWithWeb3: SupabaseAuthClientInterface['signInWithWeb3'];
2259
+ signOut: SupabaseAuthClientInterface['signOut'];
2260
+ getUser: SupabaseAuthClientInterface['getUser'];
2261
+ getClaims: (jwtArg?: string) => Promise<{
2262
+ data: {
2263
+ header: JwtHeader;
2264
+ claims: JwtPayload;
2265
+ signature: Uint8Array<ArrayBufferLike>;
2266
+ };
2267
+ error: null;
2268
+ } | {
2269
+ data: null;
2270
+ error: _supabase_auth_js0.AuthError;
2271
+ }>;
2272
+ updateUser: SupabaseAuthClientInterface['updateUser'];
2273
+ getUserIdentities: SupabaseAuthClientInterface['getUserIdentities'];
2274
+ linkIdentity: SupabaseAuthClientInterface['linkIdentity'];
2275
+ unlinkIdentity: SupabaseAuthClientInterface['unlinkIdentity'];
2276
+ verifyOtp: SupabaseAuthClientInterface['verifyOtp'];
2277
+ resetPasswordForEmail: SupabaseAuthClientInterface['resetPasswordForEmail'];
2278
+ reauthenticate: SupabaseAuthClientInterface['reauthenticate'];
2279
+ resend: SupabaseAuthClientInterface['resend'];
2280
+ exchangeCodeForSession: SupabaseAuthClientInterface['exchangeCodeForSession'];
2281
+ onAuthStateChange: SupabaseAuthClientInterface['onAuthStateChange'];
2282
+ isThrowOnErrorEnabled: SupabaseAuthClientInterface['isThrowOnErrorEnabled'];
2283
+ startAutoRefresh: SupabaseAuthClientInterface['startAutoRefresh'];
2284
+ stopAutoRefresh: SupabaseAuthClientInterface['stopAutoRefresh'];
2285
+ private verifyEmailOtp;
2286
+ private emitInitialSession;
2287
+ }
2288
+ /** Instance type for SupabaseAuthAdapter */
2289
+ type SupabaseAuthAdapterInstance = SupabaseAuthAdapterImpl;
2233
2290
  /** Builder type that creates adapter instances */
2234
- type BetterAuthReactAdapterBuilder = (url: string, fetchOptions?: {
2291
+ type SupabaseAuthAdapterBuilder = (url: string, fetchOptions?: {
2235
2292
  headers?: Record<string, string>;
2236
- }) => BetterAuthReactAdapterInstance;
2293
+ }) => SupabaseAuthAdapterInstance;
2237
2294
  /**
2238
2295
  * Factory function that returns an adapter builder.
2239
2296
  * The builder is called by createClient/createAuthClient with the URL.
@@ -2246,12 +2303,12 @@ type BetterAuthReactAdapterBuilder = (url: string, fetchOptions?: {
2246
2303
  * const client = createClient({
2247
2304
  * auth: {
2248
2305
  * url: 'https://auth.example.com',
2249
- * adapter: BetterAuthReactAdapter(),
2306
+ * adapter: SupabaseAuthAdapter(),
2250
2307
  * },
2251
2308
  * dataApi: { url: 'https://data-api.example.com' },
2252
2309
  * });
2253
2310
  * ```
2254
2311
  */
2255
- declare function BetterAuthReactAdapter(options?: BetterAuthReactAdapterOptions): BetterAuthReactAdapterBuilder;
2312
+ declare function SupabaseAuthAdapter(options?: SupabaseAuthAdapterOptions): SupabaseAuthAdapterBuilder;
2256
2313
  //#endregion
2257
- export { BetterAuthReactAdapterInstance as n, BetterAuthReactAdapterOptions as r, BetterAuthReactAdapter as t };
2314
+ export { BetterAuthVanillaAdapter as a, BetterAuthVanillaAdapterOptions as c, SupabaseAuthAdapterOptions as i, SupabaseAuthAdapterBuilder as n, BetterAuthVanillaAdapterBuilder as o, SupabaseAuthAdapterInstance as r, BetterAuthVanillaAdapterInstance as s, SupabaseAuthAdapter as t };
@@ -1,3 +1,3 @@
1
- import { A as BetterAuthErrorResponse, C as SessionWithImpersonatedBy, D as TeamMemberInput, E as TeamMember, M as BetterAuthUser, O as UserWithRole, S as ReactBetterAuthClient, T as TeamInput, _ as Member, a as BetterAuthInstance, b as OrganizationInput, c as InferAdminRolesFromOption, d as InvitationStatus, f as JWKOptions, g as MagicLinkOptions, h as JwtOptions, i as AdminOptions, j as BetterAuthSession, k as VanillaBetterAuthClient, l as Invitation, m as Jwk, o as BetterFetchError, p as JWSAlgorithms, s as EmailOTPOptions, u as InvitationInput, v as MemberInput, w as Team, x as OrganizationRole, y as Organization } from "../adapter-core-BWM7cWOp.mjs";
1
+ import { A as BetterAuthErrorResponse, C as SessionWithImpersonatedBy, D as TeamMemberInput, E as TeamMember, M as BetterAuthUser, O as UserWithRole, S as ReactBetterAuthClient, T as TeamInput, _ as Member, a as BetterAuthInstance, b as OrganizationInput, c as InferAdminRolesFromOption, d as InvitationStatus, f as JWKOptions, g as MagicLinkOptions, h as JwtOptions, i as AdminOptions, j as BetterAuthSession, k as VanillaBetterAuthClient, l as Invitation, m as Jwk, o as BetterFetchError, p as JWSAlgorithms, s as EmailOTPOptions, u as InvitationInput, v as MemberInput, w as Team, x as OrganizationRole, y as Organization } from "../adapter-core-ClY-p_AI.mjs";
2
2
  export * from "better-auth/types";
3
3
  export { AdminOptions, BetterAuthErrorResponse, BetterAuthInstance, BetterAuthSession, BetterAuthUser, BetterFetchError, EmailOTPOptions, InferAdminRolesFromOption, Invitation, InvitationInput, InvitationStatus, JWKOptions, JWSAlgorithms, Jwk, JwtOptions, MagicLinkOptions, Member, MemberInput, Organization, OrganizationInput, OrganizationRole, ReactBetterAuthClient, SessionWithImpersonatedBy, Team, TeamInput, TeamMember, TeamMemberInput, UserWithRole, VanillaBetterAuthClient };
@@ -1,5 +1,5 @@
1
- import "../../adapter-core-BWM7cWOp.mjs";
2
- import { a as BetterAuthVanillaAdapter, c as BetterAuthVanillaAdapterOptions, i as SupabaseAuthAdapterOptions, n as SupabaseAuthAdapterBuilder, o as BetterAuthVanillaAdapterBuilder, r as SupabaseAuthAdapterInstance, s as BetterAuthVanillaAdapterInstance, t as SupabaseAuthAdapter } from "../../supabase-adapter-BGwV0Vu2.mjs";
1
+ import "../../adapter-core-ClY-p_AI.mjs";
2
+ import { a as BetterAuthVanillaAdapter, c as BetterAuthVanillaAdapterOptions, i as SupabaseAuthAdapterOptions, n as SupabaseAuthAdapterBuilder, o as BetterAuthVanillaAdapterBuilder, r as SupabaseAuthAdapterInstance, s as BetterAuthVanillaAdapterInstance, t as SupabaseAuthAdapter } from "../../supabase-adapter-cuLnmLDs.mjs";
3
3
  import "../../auth-interface-Clz-oWq1.mjs";
4
4
  import "../../index-CzpoWrv9.mjs";
5
5
  export { BetterAuthVanillaAdapter, BetterAuthVanillaAdapterBuilder, BetterAuthVanillaAdapterInstance, BetterAuthVanillaAdapterOptions, SupabaseAuthAdapter, SupabaseAuthAdapterBuilder, SupabaseAuthAdapterInstance, SupabaseAuthAdapterOptions };
@@ -1,4 +1,4 @@
1
- import "../../adapter-core-Bt4M5I2g.mjs";
2
- import { n as BetterAuthVanillaAdapter, t as SupabaseAuthAdapter } from "../../supabase-adapter-DBt4LJJd.mjs";
1
+ import "../../adapter-core-BFMM3lwe.mjs";
2
+ import { n as BetterAuthVanillaAdapter, t as SupabaseAuthAdapter } from "../../supabase-adapter-CAyBFrNn.mjs";
3
3
 
4
4
  export { BetterAuthVanillaAdapter, SupabaseAuthAdapter };
@@ -1,5 +1,5 @@
1
- import "../adapter-core-BWM7cWOp.mjs";
2
- import { a as BetterAuthVanillaAdapter, c as BetterAuthVanillaAdapterOptions, i as SupabaseAuthAdapterOptions, n as SupabaseAuthAdapterBuilder, o as BetterAuthVanillaAdapterBuilder, r as SupabaseAuthAdapterInstance, s as BetterAuthVanillaAdapterInstance, t as SupabaseAuthAdapter } from "../supabase-adapter-BGwV0Vu2.mjs";
1
+ import "../adapter-core-ClY-p_AI.mjs";
2
+ import { a as BetterAuthVanillaAdapter, c as BetterAuthVanillaAdapterOptions, i as SupabaseAuthAdapterOptions, n as SupabaseAuthAdapterBuilder, o as BetterAuthVanillaAdapterBuilder, r as SupabaseAuthAdapterInstance, s as BetterAuthVanillaAdapterInstance, t as SupabaseAuthAdapter } from "../supabase-adapter-cuLnmLDs.mjs";
3
3
  import "../auth-interface-Clz-oWq1.mjs";
4
4
  import "../index-CzpoWrv9.mjs";
5
5
  export { BetterAuthVanillaAdapter, BetterAuthVanillaAdapterBuilder, BetterAuthVanillaAdapterInstance, BetterAuthVanillaAdapterOptions, SupabaseAuthAdapter, SupabaseAuthAdapterBuilder, SupabaseAuthAdapterInstance, SupabaseAuthAdapterOptions };
@@ -1,4 +1,4 @@
1
- import "../adapter-core-Bt4M5I2g.mjs";
2
- import { n as BetterAuthVanillaAdapter, t as SupabaseAuthAdapter } from "../supabase-adapter-DBt4LJJd.mjs";
1
+ import "../adapter-core-BFMM3lwe.mjs";
2
+ import { n as BetterAuthVanillaAdapter, t as SupabaseAuthAdapter } from "../supabase-adapter-CAyBFrNn.mjs";
3
3
 
4
4
  export { BetterAuthVanillaAdapter, SupabaseAuthAdapter };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neondatabase/auth",
3
- "version": "0.4.0-beta",
3
+ "version": "0.4.1-beta",
4
4
  "description": "TypeScript SDK for Neon Auth - authentication for PostgreSQL with multiple adapter support",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",