@instantdb/admin 0.22.167-branch-cli-query-docs.23362831232.1 → 0.22.167-branch-extra-fields.23364908069.1

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.
@@ -102,7 +102,7 @@ declare class Rooms<Schema extends InstantSchemaDef<any, any, any>> {
102
102
  constructor(config: FilledConfig);
103
103
  getPresence<RoomType extends string & keyof RoomsOf<Schema>>(roomType: RoomType, roomId: string): Promise<PresenceResult<PresenceOf<Schema, RoomType>>>;
104
104
  }
105
- declare class Auth {
105
+ declare class Auth<Schema extends InstantSchemaDef<any, any, any>> {
106
106
  config: FilledConfig;
107
107
  constructor(config: FilledConfig);
108
108
  /**
@@ -135,15 +135,32 @@ declare class Auth {
135
135
  code: string;
136
136
  }>;
137
137
  /**
138
- * Verifies a magic code for the user with the given email.
138
+ * @deprecated Use {@link checkMagicCode} instead to get the `created` field
139
+ * and support `extraFields`.
140
+ *
141
+ * @see https://instantdb.com/docs/backend#custom-magic-codes
142
+ */
143
+ verifyMagicCode: (email: string, code: string) => Promise<User>;
144
+ /**
145
+ * Verifies a magic code and returns the user along with whether
146
+ * the user was newly created. Supports `extraFields` to set custom
147
+ * `$users` properties at signup.
139
148
  *
140
149
  * @example
141
- * const user = await db.auth.verifyMagicCode({ email, code })
142
- * console.log("Verified user:", user)
150
+ * const { user, created } = await db.auth.checkMagicCode(
151
+ * email,
152
+ * code,
153
+ * { extraFields: { nickname: 'ari' } },
154
+ * );
143
155
  *
144
156
  * @see https://instantdb.com/docs/backend#custom-magic-codes
145
157
  */
146
- verifyMagicCode: (email: string, code: string) => Promise<User>;
158
+ checkMagicCode: (email: string, code: string, options?: {
159
+ extraFields?: UpdateParams<Schema, "$users">;
160
+ }) => Promise<{
161
+ user: User;
162
+ created: boolean;
163
+ }>;
147
164
  /**
148
165
  * Creates a login token for the user with the given email.
149
166
  * If that user does not exist, we create one.
@@ -428,7 +445,7 @@ type AdminQueryOpts = {
428
445
  declare class InstantAdminDatabase<Schema extends InstantSchemaDef<any, any, any>, UseDates extends boolean = false, Config extends InstantConfig<Schema, UseDates> = InstantConfig<Schema, UseDates>> {
429
446
  #private;
430
447
  config: InstantConfigFilled<Schema, UseDates>;
431
- auth: Auth;
448
+ auth: Auth<Schema>;
432
449
  storage: Storage;
433
450
  streams: Streams;
434
451
  rooms: Rooms<Schema>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -294,11 +294,8 @@ class Auth {
294
294
  });
295
295
  };
296
296
  /**
297
- * Verifies a magic code for the user with the given email.
298
- *
299
- * @example
300
- * const user = await db.auth.verifyMagicCode({ email, code })
301
- * console.log("Verified user:", user)
297
+ * @deprecated Use {@link checkMagicCode} instead to get the `created` field
298
+ * and support `extraFields`.
302
299
  *
303
300
  * @see https://instantdb.com/docs/backend#custom-magic-codes
304
301
  */
@@ -310,6 +307,34 @@ class Auth {
310
307
  });
311
308
  return user;
312
309
  };
310
+ /**
311
+ * Verifies a magic code and returns the user along with whether
312
+ * the user was newly created. Supports `extraFields` to set custom
313
+ * `$users` properties at signup.
314
+ *
315
+ * @example
316
+ * const { user, created } = await db.auth.checkMagicCode(
317
+ * email,
318
+ * code,
319
+ * { extraFields: { nickname: 'ari' } },
320
+ * );
321
+ *
322
+ * @see https://instantdb.com/docs/backend#custom-magic-codes
323
+ */
324
+ checkMagicCode = async (email, code, options) => {
325
+ const res = await jsonFetch(`${this.config.apiURI}/admin/verify_magic_code?app_id=${this.config.appId}`, {
326
+ method: 'POST',
327
+ headers: authorizedHeaders(this.config),
328
+ body: JSON.stringify({
329
+ email,
330
+ code,
331
+ ...(options?.extraFields
332
+ ? { 'extra-fields': options.extraFields }
333
+ : {}),
334
+ }),
335
+ });
336
+ return { user: res.user, created: res.created };
337
+ };
313
338
  async createToken(input) {
314
339
  const body = typeof input === 'string' ? { email: input } : input;
315
340
  const ret = await jsonFetch(`${this.config.apiURI}/admin/refresh_tokens?app_id=${this.config.appId}`, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Readable } from 'node:stream';\nimport { validate as uuidValidate } from 'uuid';\n\nimport {\n tx,\n lookup,\n getOps,\n i,\n id,\n txInit,\n version as coreVersion,\n InstantAPIError,\n setInstantWarningsEnabled,\n type InstantIssue,\n type TransactionChunk,\n type AuthToken,\n\n // core types\n type User,\n type Query,\n\n // query types\n type QueryResponse,\n type InstaQLResponse,\n type InstaQLParams,\n type ValidQuery,\n type InstaQLFields,\n type InstantQuery,\n type InstantQueryResult,\n type InstantSchema,\n type InstantSchemaDatabase,\n type InstantObject,\n type InstantEntity,\n type BackwardsCompatibleSchema,\n type IInstantDatabase,\n\n // schema types\n type AttrsDefs,\n type CardinalityKind,\n type DataAttrDef,\n type EntitiesDef,\n type EntitiesWithLinks,\n type EntityDef,\n type InstantGraph,\n type LinkAttrDef,\n type LinkDef,\n type InstantUnknownSchemaDef,\n type LinksDef,\n type RoomsOf,\n type RoomsDef,\n type PresenceOf,\n type RoomHandle,\n type ResolveAttrs,\n type ValueTypes,\n type InstantSchemaDef,\n type InstantUnknownSchema,\n type InstaQLEntity,\n type InstaQLResult,\n type InstaQLEntitySubquery,\n type InstantRules,\n type UpdateParams,\n type CreateParams,\n type LinkParams,\n type RuleParams,\n type TopicsOf,\n type TopicOf,\n\n // storage types\n type FileOpts,\n type UploadFileResponse,\n type DeleteFileResponse,\n validateQuery,\n validateTransactions,\n createInstantRouteHandler,\n SSEConnection,\n InstantStream,\n EventSourceConstructor,\n EventSourceType,\n type WritableStreamCtor,\n type ReadableStreamCtor,\n InstantWritableStream,\n} from '@instantdb/core';\n\nimport version from './version.ts';\n\nimport {\n subscribe,\n SubscribeQueryCallback,\n SubscribeQueryResponse,\n SubscribeQueryPayload,\n SubscriptionReadyState,\n} from './subscribe.ts';\nimport { parseCookie } from 'cookie';\nimport { EventSource } from 'eventsource';\n\ntype DebugCheckResult = {\n /** The ID of the record. */\n id: string;\n /** The namespace/table of the record. */\n entity: string;\n /** The value of the record. */\n record: Record<string, any>;\n /** The result of evaluating the corresponding permissions rule for a record. */\n check: any;\n};\n\ntype Config = {\n appId: string;\n adminToken?: string;\n apiURI?: string;\n useDateObjects?: boolean;\n disableValidation?: boolean;\n};\n\nexport type InstantConfig<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean = false,\n> = {\n appId: string;\n adminToken?: string;\n apiURI?: string;\n schema?: Schema;\n useDateObjects: UseDates;\n disableValidation?: boolean;\n verbose?: boolean;\n WritableStream?: WritableStreamCtor;\n ReadableStream?: ReadableStreamCtor;\n};\n\ntype InstantConfigFilled<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean,\n> = InstantConfig<Schema, UseDates> & { apiURI: string };\n\ntype FilledConfig = Config & { apiURI: string };\n\ntype ImpersonationOpts =\n | { email: string }\n | { token: AuthToken }\n | { guest: boolean };\n\ntype DebugTransactResult = {\n 'tx-id': number;\n 'all-checks-ok?': boolean;\n};\n\nfunction configWithDefaults(config: Config): FilledConfig {\n const defaultConfig = {\n apiURI: 'https://api.instantdb.com',\n };\n const r = { ...defaultConfig, ...config };\n return r;\n}\n\nfunction instantConfigWithDefaults<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean,\n>(\n config: InstantConfig<Schema, UseDates>,\n): InstantConfigFilled<Schema, UseDates> {\n const defaultConfig = {\n apiURI: 'https://api.instantdb.com',\n };\n const r = { ...defaultConfig, ...config };\n return r;\n}\n\nfunction withImpersonation(\n headers: { [key: string]: string },\n opts: ImpersonationOpts,\n) {\n if ('email' in opts) {\n headers['as-email'] = opts.email;\n } else if ('token' in opts) {\n headers['as-token'] = opts.token;\n } else if ('guest' in opts) {\n headers['as-guest'] = 'true';\n }\n return headers;\n}\n\nfunction validateConfigAndImpersonation(\n config: FilledConfig,\n impersonationOpts: ImpersonationOpts | undefined,\n) {\n if (\n impersonationOpts &&\n ('token' in impersonationOpts || 'guest' in impersonationOpts)\n ) {\n // adminToken is not required for `token` or `guest` impersonation\n return;\n }\n if (config.adminToken) {\n // An adminToken is provided.\n return;\n }\n if (impersonationOpts && 'email' in impersonationOpts) {\n throw new Error(\n 'Admin token required. To impersonate users with an email you must pass `adminToken` to `init`.',\n );\n }\n throw new Error(\n 'Admin token required. To run this operation pass `adminToken` to `init`, or use `db.asUser`.',\n );\n}\n\nfunction authorizedHeaders(\n config: FilledConfig,\n impersonationOpts?: ImpersonationOpts,\n): Record<string, string> {\n validateConfigAndImpersonation(config, impersonationOpts);\n\n const { adminToken, appId } = config;\n const headers: Record<string, string> = {\n 'content-type': 'application/json',\n 'app-id': appId,\n };\n\n if (adminToken) {\n headers.authorization = `Bearer ${adminToken}`;\n }\n\n return impersonationOpts\n ? withImpersonation(headers, impersonationOpts)\n : headers;\n}\n\n// NextJS 13 and 14 cache fetch requests by default.\n//\n// Since adminDB.query uses fetch, this means that it would also cache by default.\n//\n// We don't want this behavior. `adminDB.query` should return the latest result by default.\n//\n// To get around this, we set an explicit `cache` header for NextJS 13 and 14.\n// This is no longer needed in NextJS 15 onwards, as the default is `no-store` again.\n// Once NextJS 13 and 14 are no longer common, we can remove this code.\nfunction isNextJSVersionThatCachesFetchByDefault() {\n return (\n // NextJS 13 onwards added a `__nextPatched` property to the fetch function\n fetch['__nextPatched'] &&\n // NextJS 15 onwards _also_ added a global `next-patch` symbol.\n !globalThis[Symbol.for('next-patch')]\n );\n}\n\nfunction getDefaultFetchOpts(): RequestInit {\n return isNextJSVersionThatCachesFetchByDefault() ? { cache: 'no-store' } : {};\n}\n\nasync function jsonReject(rejectFn, res) {\n const body = await res.text();\n try {\n const json = JSON.parse(body);\n return rejectFn(new InstantAPIError({ status: res.status, body: json }));\n } catch (_e) {\n return rejectFn(\n new InstantAPIError({\n status: res.status,\n body: { type: undefined, message: body },\n }),\n );\n }\n}\n\nasync function jsonFetch(\n input: RequestInfo,\n init: RequestInit | undefined,\n): Promise<any> {\n const defaultFetchOpts = getDefaultFetchOpts();\n const headers = {\n ...(init?.headers || {}),\n 'Instant-Admin-Version': version,\n 'Instant-Core-Version': coreVersion,\n };\n const res = await fetch(input, { ...defaultFetchOpts, ...init, headers });\n if (res.status === 200) {\n const json = await res.json();\n return Promise.resolve(json);\n }\n\n return jsonReject((x) => Promise.reject(x), res);\n}\n\nfunction makeEventSourceWrapper(opts: {\n headers: HeadersInit;\n inference: boolean;\n}): EventSourceConstructor {\n return class EventSourceWrapper {\n source: EventSource;\n static OPEN = EventSource.OPEN;\n static CONNECTING = EventSource.CONNECTING;\n static CLOSED = EventSource.CLOSED;\n readonly url: string;\n\n constructor(url: string) {\n this.url = url;\n this.source = this.#createEventSource(url);\n }\n\n get onopen(): EventSourceType['onopen'] {\n return this.source.onopen;\n }\n set onopen(fn: EventSourceType['onopen']) {\n this.source.onopen = fn;\n }\n\n get onmessage(): EventSourceType['onmessage'] {\n return this.source.onmessage;\n }\n set onmessage(fn: EventSourceType['onmessage']) {\n this.source.onmessage = fn;\n }\n\n get onerror(): EventSourceType['onerror'] {\n return this.source.onerror;\n }\n set onerror(fn: EventSourceType['onerror']) {\n this.source.onerror = fn;\n }\n\n public get readyState() {\n return this.source.readyState;\n }\n\n public close() {\n this.source.close();\n }\n\n #createEventSource(url: string): EventSource {\n const es = new EventSource(url, {\n fetch(input, init) {\n return fetch(input, {\n ...init,\n method: 'POST',\n headers: opts.headers,\n body: JSON.stringify({\n 'inference?': opts.inference,\n versions: {\n '@instantdb/admin': version,\n '@instantdb/core': coreVersion,\n },\n }),\n });\n },\n });\n return es;\n }\n };\n}\n\n/**\n *\n * The first step: init your application!\n *\n * Visit https://instantdb.com/dash to get your `appId` :)\n *\n * @example\n * import { init } from \"@instantdb/admin\"\n *\n * const db = init({\n * appId: process.env.INSTANT_APP_ID!,\n * adminToken: process.env.INSTANT_APP_ADMIN_TOKEN\n * })\n *\n * // You can also provide a schema for type safety and editor autocomplete!\n *\n * import { init } from \"@instantdb/admin\"\n * import schema from \"\"../instant.schema.ts\";\n *\n * const db = init({\n * appId: process.env.INSTANT_APP_ID!,\n * adminToken: process.env.INSTANT_APP_ADMIN_TOKEN,\n * schema,\n * })\n * // To learn more: https://instantdb.com/docs/modeling-data\n */\nfunction init<\n Schema extends InstantSchemaDef<any, any, any> = InstantUnknownSchema,\n UseDates extends boolean = false,\n>(\n // Allows config with missing `useDateObjects`, but keeps `UseDates`\n // as a non-nullable in the InstantConfig type.\n config: Omit<InstantConfig<Schema, UseDates>, 'useDateObjects'> & {\n useDateObjects?: UseDates;\n },\n): InstantAdminDatabase<Schema, UseDates, InstantConfig<Schema, UseDates>> {\n if (!config.appId || !uuidValidate(config.appId)) {\n console.warn(\n 'warning: Instant Admin DB must be initialized with a valid appId. Received: ' +\n JSON.stringify(config.appId),\n );\n }\n\n const configStrict = {\n ...config,\n appId: config.appId?.trim(),\n adminToken: config.adminToken?.trim(),\n useDateObjects: (config.useDateObjects ?? false) as UseDates,\n };\n\n return new InstantAdminDatabase<\n Schema,\n UseDates,\n InstantConfig<Schema, UseDates>\n >(configStrict);\n}\n\n/**\n * @deprecated\n * `init_experimental` is deprecated. You can replace it with `init`.\n *\n * @example\n *\n * // Before\n * import { init_experimental } from \"@instantdb/admin\"\n * const db = init_experimental({ ... });\n *\n * // After\n * import { init } from \"@instantdb/admin\"\n * const db = init({ ... });\n */\nconst init_experimental = init;\n\nfunction steps(inputChunks) {\n const chunks = Array.isArray(inputChunks) ? inputChunks : [inputChunks];\n return chunks.flatMap(getOps);\n}\n\ntype PresenceResult<Data> = {\n [peerId: string]: { data: Data; 'peer-id': string; user: User | null };\n};\n\nclass Rooms<Schema extends InstantSchemaDef<any, any, any>> {\n config: FilledConfig;\n\n constructor(config: FilledConfig) {\n this.config = config;\n }\n\n async getPresence<RoomType extends string & keyof RoomsOf<Schema>>(\n roomType: RoomType,\n roomId: string,\n ): Promise<PresenceResult<PresenceOf<Schema, RoomType>>> {\n const res = await jsonFetch(\n `${this.config.apiURI}/admin/rooms/presence?app_id=${this.config.appId}&room-type=${String(roomType)}&room-id=${roomId}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return res.sessions || {};\n }\n}\n\nclass Auth {\n config: FilledConfig;\n\n constructor(config: FilledConfig) {\n this.config = config;\n this.createToken = this.createToken.bind(this);\n }\n\n /**\n * Generates a magic code for the user with the given email.\n * This is useful if you want to use your own email provider\n * to send magic codes.\n *\n * @example\n * // Generate a magic code\n * const { code } = await db.auth.generateMagicCode({ email })\n * // Send the magic code to the user with your own email provider\n * await customEmailProvider.sendMagicCode(email, code)\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n generateMagicCode = async (email: string): Promise<{ code: string }> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({ email }),\n },\n );\n };\n\n /**\n * Sends a magic code to the user with the given email.\n * This uses Instant's built-in email provider.\n *\n * @example\n * // Send an email to user with magic code\n * await db.auth.sendMagicCode({ email })\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n sendMagicCode = async (email: string): Promise<{ code: string }> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/send_magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({ email }),\n },\n );\n };\n\n /**\n * Verifies a magic code for the user with the given email.\n *\n * @example\n * const user = await db.auth.verifyMagicCode({ email, code })\n * console.log(\"Verified user:\", user)\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n verifyMagicCode = async (email: string, code: string): Promise<User> => {\n const { user } = await jsonFetch(\n `${this.config.apiURI}/admin/verify_magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({ email, code }),\n },\n );\n return user;\n };\n\n /**\n * Creates a login token for the user with the given email.\n * If that user does not exist, we create one.\n *\n * This is often useful for writing custom auth flows.\n *\n * @example\n * app.post('/custom_sign_in', async (req, res) => {\n * // ... your custom flow for users\n * const token = await db.auth.createToken({ email })\n * return res.status(200).send({ token })\n * })\n *\n * @see https://instantdb.com/docs/backend#custom-auth\n */\n createToken(email: { email: string } | { id: string }): Promise<AuthToken>;\n\n /**\n *\n * @deprecated Passing an email string directly is deprecated.\n *\n * Use an object with the `email` key instead.\n *\n * @example\n * // Before\n * const token = await auth.createToken(email)\n * // After\n * const token = await auth.createToken({ email })\n */\n createToken(email: string): Promise<AuthToken>;\n\n async createToken(\n input: string | { email: string } | { id: string },\n ): Promise<AuthToken> {\n const body = typeof input === 'string' ? { email: input } : input;\n const ret: { user: { refresh_token: string } } = await jsonFetch(\n `${this.config.apiURI}/admin/refresh_tokens?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify(body),\n },\n );\n return ret.user.refresh_token;\n }\n\n /**\n * Verifies a given token and returns the associated user.\n *\n * This is often useful for writing custom endpoints, where you need\n * to authenticate users.\n *\n * @example\n * app.post('/custom_endpoint', async (req, res) => {\n * const user = await db.auth.verifyToken(req.headers['token'])\n * if (!user) {\n * return res.status(401).send('Uh oh, you are not authenticated')\n * }\n * // ...\n * })\n * @see https://instantdb.com/docs/backend#custom-endpoints\n */\n verifyToken = async (token: AuthToken): Promise<User> => {\n const res = await jsonFetch(\n `${this.config.apiURI}/runtime/auth/verify_refresh_token?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n 'app-id': this.config.appId,\n 'refresh-token': token,\n }),\n },\n );\n return res.user;\n };\n\n /**\n * Retrieves an app user by id, email, or refresh token.\n *\n * @example\n * try {\n * const user = await db.auth.getUser({ email })\n * console.log(\"Found user:\", user)\n * } catch (err) {\n * console.error(\"Failed to retrieve user:\", err.message);\n * }\n *\n * @see https://instantdb.com/docs/backend#retrieve-a-user\n */\n getUser = async (\n params: { email: string } | { id: string } | { refresh_token: string },\n ): Promise<Omit<User, 'refresh_token'>> => {\n const qs = Object.entries(params)\n .map(([k, v]) => `${k}=${encodeURIComponent(v)}`)\n .join('&');\n\n const response: { user: User } = await jsonFetch(\n `${this.config.apiURI}/admin/users?app_id=${this.config.appId}&${qs}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return response.user;\n };\n\n /**\n * Deletes an app user by id, email, or refresh token.\n *\n * NB: This _only_ deletes the user; it does not delete all user data.\n * You will need to handle this manually.\n *\n * @example\n * try {\n * const deletedUser = await db.auth.deleteUser({ email })\n * console.log(\"Deleted user:\", deletedUser)\n * } catch (err) {\n * console.error(\"Failed to delete user:\", err.message);\n * }\n *\n * @see https://instantdb.com/docs/backend#delete-a-user\n */\n deleteUser = async (\n params: { email: string } | { id: string } | { refresh_token: string },\n ): Promise<User> => {\n const qs = Object.entries(params).map(([k, v]) => `${k}=${v}`);\n const response: { deleted: User } = await jsonFetch(\n `${this.config.apiURI}/admin/users?app_id=${this.config.appId}&${qs}`,\n {\n method: 'DELETE',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return response.deleted;\n };\n\n /**\n * Signs out the user with the given email.\n * This invalidates any tokens associated with the user.\n * If the user is not found, an error will be thrown.\n *\n * @example\n * try {\n * await auth.signOut({ email: \"alyssa_p_hacker@instantdb.com\" });\n * console.log(\"Successfully signed out\");\n * } catch (err) {\n * console.error(\"Sign out failed:\", err.message);\n * }\n *\n * @see https://instantdb.com/docs/backend#sign-out\n */\n async signOut(\n params: { email: string } | { id: string } | { refresh_token: string },\n ): Promise<void>;\n\n /**\n * @deprecated Passing an email string directly is deprecated.\n * Use an object with the `email` key instead.\n *\n * @example\n * // Before\n * auth.signOut(email)\n *\n * // After\n * auth.signOut({ email })\n */\n async signOut(email: string): Promise<void>;\n\n async signOut(\n input:\n | string\n | { email: string }\n | { id: string }\n | { refresh_token: string },\n ): Promise<void> {\n // If input is a string, we assume it's an email.\n // This is because of backwards compatibility: we used to only\n // accept email strings. Eventually we can remove this\n const params = typeof input === 'string' ? { email: input } : input;\n const config = this.config;\n await jsonFetch(\n `${config.apiURI}/admin/sign_out?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(config),\n body: JSON.stringify(params),\n },\n );\n }\n\n /**\n * Get instant user from Request\n *\n * Reads cookies and gets a validated user\n * @param req The request containing a cookie synced with createInstantRouteHandler\n * @param opts Allow disabling validation of refresh token\n */\n getUserFromRequest = async (\n req: Request,\n opts?: { disableValidation?: boolean },\n ): Promise<User | null> => {\n const cookieHeader = req.headers.get('cookie') || '';\n\n const parsedCookie = parseCookie(cookieHeader);\n\n const cookieName = 'instant_user_' + this.config.appId;\n if (!parsedCookie[cookieName]) {\n return null;\n }\n const value = parsedCookie[cookieName];\n const user = JSON.parse(value);\n if (!user?.refresh_token) {\n return null;\n }\n if (opts?.disableValidation) {\n return user;\n }\n const verified = await this.verifyToken(user.refresh_token);\n return verified;\n };\n}\n\ntype StorageFile = {\n key: string;\n name: string;\n size: number;\n etag: string;\n last_modified: number;\n};\n\ntype DeleteManyFileResponse = {\n data: {\n ids: string[] | null;\n };\n};\n\nconst isNodeReadable = (v: any): v is Readable =>\n v &&\n typeof v === 'object' &&\n typeof v.pipe === 'function' &&\n typeof v.read === 'function';\n\nconst isWebReadable = (v: any): v is ReadableStream =>\n v && typeof v.getReader === 'function';\n\n/**\n * Functions to manage file storage.\n */\nclass Storage {\n config: FilledConfig;\n impersonationOpts?: ImpersonationOpts;\n\n constructor(config: FilledConfig, impersonationOpts?: ImpersonationOpts) {\n this.config = config;\n this.impersonationOpts = impersonationOpts;\n }\n\n /**\n * Uploads file at the provided path. Accepts a Buffer or a Readable stream.\n *\n * @see https://instantdb.com/docs/storage\n * @example\n * const buffer = fs.readFileSync('demo.png');\n * const isSuccess = await db.storage.uploadFile('photos/demo.png', buffer);\n */\n uploadFile = async (\n path: string,\n file: Buffer | Readable | ReadableStream | Uint8Array,\n metadata: FileOpts = {},\n ): Promise<UploadFileResponse> => {\n const headers = {\n ...authorizedHeaders(this.config, this.impersonationOpts),\n path,\n };\n if (metadata.contentDisposition) {\n headers['content-disposition'] = metadata.contentDisposition;\n }\n\n // headers.content-type will become \"undefined\" (string)\n // if not removed from the object\n delete headers['content-type'];\n\n if (metadata.contentType) {\n headers['content-type'] = metadata.contentType;\n }\n\n let duplex: 'half' | undefined;\n if (isNodeReadable(file)) {\n duplex = 'half'; // one-way stream\n }\n if (isNodeReadable(file) || isWebReadable(file)) {\n if (!metadata.fileSize) {\n throw new Error(\n 'fileSize is required in metadata when uploading streams',\n );\n }\n headers['content-length'] = metadata.fileSize.toString();\n }\n\n let options = {\n method: 'PUT',\n headers,\n body: file as unknown as BodyInit,\n ...(duplex && { duplex }),\n };\n\n return jsonFetch(\n `${this.config.apiURI}/admin/storage/upload?app_id=${this.config.appId}`,\n options,\n );\n };\n\n /**\n * Deletes a file by its path name (e.g. \"photos/demo.png\").\n *\n * @deprecated Use `db.transact` to delete files instead:\n * @example\n * // Delete by id\n * await db.transact(db.tx.$files[fileId].delete());\n *\n * // Delete by path\n * await db.transact(db.tx.$files[lookup('path', 'photos/demo.png')].delete());\n *\n * @see https://instantdb.com/docs/storage\n */\n delete = async (pathname: string): Promise<DeleteFileResponse> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/storage/files?app_id=${this.config.appId}&filename=${encodeURIComponent(\n pathname,\n )}`,\n {\n method: 'DELETE',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n },\n );\n };\n\n /**\n * Deletes multiple files by their path names.\n *\n * @deprecated Use `db.transact` to delete files instead:\n * @example\n * // Delete multiple files by path\n * const paths = ['images/1.png', 'images/2.png', 'images/3.png'];\n * await db.transact(paths.map(p => db.tx.$files[lookup('path', p)].delete()));\n *\n * @see https://instantdb.com/docs/storage\n */\n deleteMany = async (pathnames: string[]): Promise<DeleteManyFileResponse> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/storage/files/delete?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify({ filenames: pathnames }),\n },\n );\n };\n\n /**\n * @deprecated. This method will be removed in the future. Use `uploadFile`\n * instead\n */\n upload = async (\n pathname: string,\n file: Buffer,\n metadata: FileOpts = {},\n ): Promise<boolean> => {\n const { data: presignedUrl } = await jsonFetch(\n `${this.config.apiURI}/admin/storage/signed-upload-url?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({\n app_id: this.config.appId,\n filename: pathname,\n }),\n },\n );\n const headers = {};\n const contentType = metadata.contentType;\n if (contentType) {\n headers['Content-Type'] = contentType;\n }\n const { ok } = await fetch(presignedUrl, {\n method: 'PUT',\n body: file as unknown as BodyInit,\n headers,\n });\n\n return ok;\n };\n\n /**\n * @deprecated. This method will be removed in the future. Use `query` instead\n * @example\n * const files = await db.query({ $files: {}})\n */\n list = async (): Promise<StorageFile[]> => {\n const { data } = await jsonFetch(\n `${this.config.apiURI}/admin/storage/files?app_id=${this.config.appId}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return data;\n };\n\n /**\n * @deprecated. getDownloadUrl will be removed in the future.\n * Use `query` instead to query and fetch for valid urls\n *\n * db.useQuery({\n * $files: {\n * $: {\n * where: {\n * path: \"moop.png\"\n * }\n * }\n * }\n * })\n */\n getDownloadUrl = async (pathname: string): Promise<string> => {\n const { data } = await jsonFetch(\n `${this.config.apiURI}/admin/storage/signed-download-url?app_id=${this.config.appId}&filename=${encodeURIComponent(pathname)}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return data;\n };\n}\n\ntype CreateReadStreamOpts = {\n clientId?: string | null | undefined;\n streamId?: string | null | undefined;\n byteOffset?: number | null | undefined;\n ruleParams?: RuleParams | null | undefined;\n};\n\ntype CreateWriteStreamOpts = {\n clientId: string;\n /**\n * A function that takes a promise and ensures that the current program stays alive\n * until the promise is resolved.\n *\n * Useful in serverless environments to ensure the writer fully flushes before the\n * environment is shut down.\n *\n * @example\n * import { after } from 'next/server'\n * db.streams.createWriteStream({clientId, waitUntil: after})\n */\n waitUntil?: (promise: Promise<any>) => void | null | undefined;\n ruleParams?: RuleParams | null | undefined;\n};\n\n/**\n * Functions to manage streams.\n */\nclass Streams {\n #ensureInstantStream: () => InstantStream;\n\n constructor(ensureInstantStream: () => InstantStream) {\n this.#ensureInstantStream = ensureInstantStream;\n }\n\n /**\n * Creates a new ReadableStream for the given clientId.\n *\n * @example\n * const stream = db.streams.createReadStream({clientId: clientId})\n * for await (const chunk of stream) {\n * console.log(chunk);\n * }\n */\n createReadStream = (opts: CreateReadStreamOpts): ReadableStream<string> => {\n return this.#ensureInstantStream().createReadStream(opts);\n };\n\n /**\n * Creates a new WritableStream for the given clientId.\n *\n * @example\n * const writeStream = db.streams.createWriteStream({clientId: clientId})\n * const writer = writeStream.getWriter();\n * writer.write('Hello world');\n * writer.close();\n */\n createWriteStream = (\n opts: CreateWriteStreamOpts,\n ): InstantWritableStream<string> => {\n return this.#ensureInstantStream().createWriteStream(opts);\n };\n}\n\ntype AdminQueryOpts = {\n ruleParams?: RuleParams;\n fetchOpts?: RequestInit;\n};\n\ninterface Logger {\n info: (...args: any[]) => void;\n debug: (...args: any[]) => void;\n error: (...args: any[]) => void;\n}\n\nfunction createLogger(isEnabled: boolean): Logger {\n return {\n info: isEnabled ? (...args: any[]) => console.info(...args) : () => {},\n debug: isEnabled ? (...args: any[]) => console.debug(...args) : () => {},\n error: isEnabled ? (...args: any[]) => console.error(...args) : () => {},\n };\n}\n\n/**\n *\n * The first step: init your application!\n *\n * Visit https://instantdb.com/dash to get your `appId` and `adminToken` :)\n *\n * @example\n * const db = init({ appId: \"my-app-id\", adminToken: \"my-admin-token\" })\n */\nclass InstantAdminDatabase<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean = false,\n Config extends InstantConfig<Schema, UseDates> = InstantConfig<\n Schema,\n UseDates\n >,\n> {\n config: InstantConfigFilled<Schema, UseDates>;\n auth: Auth;\n storage: Storage;\n streams: Streams;\n rooms: Rooms<Schema>;\n impersonationOpts?: ImpersonationOpts;\n\n #sseConnection: SSEConnection | null = null;\n #sseBackoff = 0;\n #instantStream: InstantStream | null = null;\n #log: Logger;\n\n public tx = txInit<NonNullable<Schema>>();\n\n constructor(_config: Config) {\n this.config = instantConfigWithDefaults(_config);\n this.auth = new Auth(this.config);\n this.storage = new Storage(this.config, this.impersonationOpts);\n this.streams = new Streams(this.#ensureInstantStream.bind(this));\n this.rooms = new Rooms<Schema>(this.config);\n this.#log = createLogger(!!this.config.verbose);\n }\n\n /**\n * Sometimes you want to scope queries to a specific user.\n *\n * You can provide a user's auth token, email, or impersonate a guest.\n *\n * @see https://instantdb.com/docs/backend#impersonating-users\n * @example\n * await db.asUser({email: \"stopa@instantdb.com\"}).query({ goals: {} })\n */\n asUser = (\n opts: ImpersonationOpts,\n ): InstantAdminDatabase<Schema, UseDates, Config> => {\n const newClient = new InstantAdminDatabase<Schema, UseDates, Config>({\n ...(this.config as Config),\n });\n newClient.impersonationOpts = opts;\n newClient.storage = new Storage(this.config, opts);\n return newClient;\n };\n\n /**\n * Use this to query your data!\n *\n * @see https://instantdb.com/docs/instaql\n *\n * @example\n * // fetch all goals\n * await db.query({ goals: {} })\n *\n * // goals where the title is \"Get Fit\"\n * await db.query({ goals: { $: { where: { title: \"Get Fit\" } } } })\n *\n * // all goals, _alongside_ their todos\n * await db.query({ goals: { todos: {} } })\n */\n query = <Q extends ValidQuery<Q, Schema>>(\n query: Q,\n opts: AdminQueryOpts = {},\n ): Promise<InstaQLResponse<Schema, Q, UseDates>> => {\n if (query && opts && 'ruleParams' in opts) {\n query = { $$ruleParams: opts['ruleParams'], ...query };\n }\n\n if (!this.config.disableValidation) {\n validateQuery(query, this.config.schema);\n }\n\n const fetchOpts = opts.fetchOpts || {};\n const fetchOptsHeaders = fetchOpts['headers'] || {};\n return jsonFetch(\n `${this.config.apiURI}/admin/query?app_id=${this.config.appId}`,\n {\n ...fetchOpts,\n method: 'POST',\n headers: {\n ...fetchOptsHeaders,\n ...authorizedHeaders(this.config, this.impersonationOpts),\n },\n body: JSON.stringify({\n query: query,\n 'inference?': !!this.config.schema,\n }),\n },\n );\n };\n\n /**\n * Use this to to get a live view of your data!\n *\n * @see https://www.instantdb.com/docs/backend\n *\n * @example\n * // create a subscription to a query\n * const query = { goals: { $: { where: { title: \"Get Fit\" } } } }\n * const sub = db.subscribeQuery(query);\n *\n * // iterate through the results with an async iterator\n * for await (const payload of sub) {\n * if (payload.error) {\n * console.log(payload.error);\n * // Stop the subscription\n * sub.close();\n * } else {\n * console.log(payload.data);\n * }\n * }\n *\n * // Stop the subscription\n * sub.close();\n *\n * // Create a subscription with a callback\n * const sub = db.subscribeQuery(query, (payload) => {\n * if (payload.error) {\n * console.log(payload.error);\n * // Stop the subscription\n * sub.close();\n * } else {\n * console.log(payload.data);\n * }\n * });\n */\n subscribeQuery<Q extends ValidQuery<Q, Schema>>(\n query: Q,\n cb?: SubscribeQueryCallback<Schema, Q, UseDates>,\n opts: AdminQueryOpts = {},\n ): SubscribeQueryResponse<Schema, Q, UseDates> {\n if (query && opts && 'ruleParams' in opts) {\n query = { $$ruleParams: opts['ruleParams'], ...query };\n }\n\n if (!this.config.disableValidation) {\n validateQuery(query, this.config.schema);\n }\n\n const fetchOpts = opts.fetchOpts || {};\n const fetchOptsHeaders = fetchOpts['headers'] || {};\n\n const headers: HeadersInit = {\n ...fetchOptsHeaders,\n ...authorizedHeaders(this.config, this.impersonationOpts),\n };\n\n const inference = !!this.config.schema;\n\n return subscribe(query, cb, {\n headers,\n inference,\n apiURI: this.config.apiURI,\n });\n }\n\n /**\n * Use this to write data! You can create, update, delete, and link objects\n *\n * @see https://instantdb.com/docs/instaml\n *\n * @example\n * // Create a new object in the `goals` namespace\n * const goalId = id();\n * db.transact(db.tx.goals[goalId].update({title: \"Get fit\"}))\n *\n * // Update the title\n * db.transact(db.tx.goals[goalId].update({title: \"Get super fit\"}))\n *\n * // Delete it\n * db.transact(db.tx.goals[goalId].delete())\n *\n * // Or create an association:\n * todoId = id();\n * db.transact([\n * db.tx.todos[todoId].update({ title: 'Go on a run' }),\n * db.tx.goals[goalId].link({todos: todoId}),\n * ])\n */\n transact = (\n inputChunks: TransactionChunk<any, any> | TransactionChunk<any, any>[],\n ) => {\n if (!this.config.disableValidation) {\n validateTransactions(inputChunks, this.config.schema);\n }\n return jsonFetch(\n `${this.config.apiURI}/admin/transact?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify({\n steps: steps(inputChunks),\n 'throw-on-missing-attrs?': !!this.config.schema,\n }),\n },\n );\n };\n\n /**\n * Like `query`, but returns debugging information\n * for permissions checks along with the result.\n * Useful for inspecting the values returned by the permissions checks.\n * Note, this will return debug information for *all* entities\n * that match the query's `where` clauses.\n *\n * Requires a user/guest context to be set with `asUser`,\n * since permissions checks are user-specific.\n *\n * Accepts an optional configuration object with a `rules` key.\n * The provided rules will override the rules in the database for the query.\n *\n * @see https://instantdb.com/docs/instaql\n *\n * @example\n * await db.asUser({ guest: true }).debugQuery(\n * { goals: {} },\n * { rules: { goals: { allow: { read: \"auth.id != null\" } } }\n * )\n */\n debugQuery = async <Q extends ValidQuery<Q, Schema>>(\n query: Q,\n opts?: {\n rules?: any;\n ruleParams?: { [key: string]: any };\n ip?: string | null | undefined;\n origin?: string | null | undefined;\n },\n ): Promise<{\n result: InstaQLResponse<Schema, Q, UseDates>;\n checkResults: DebugCheckResult[];\n }> => {\n if (query && opts && 'ruleParams' in opts) {\n query = { $$ruleParams: opts['ruleParams'], ...query };\n }\n\n const body: any = { query, 'rules-override': opts?.rules };\n if (opts?.ip) {\n body['ip-override'] = opts.ip;\n }\n if (opts?.origin) {\n body['origin-override'] = opts.origin;\n }\n\n const response = await jsonFetch(\n `${this.config.apiURI}/admin/query_perms_check?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify(body),\n },\n );\n\n return {\n result: response.result,\n checkResults: response['check-results'],\n };\n };\n\n /**\n * Like `transact`, but does not write to the database.\n * Returns debugging information for permissions checks.\n * Useful for inspecting the values returned by the permissions checks.\n *\n * Requires a user/guest context to be set with `asUser`,\n * since permissions checks are user-specific.\n *\n * Accepts an optional configuration object with a `rules` key.\n * The provided rules will override the rules in the database for the duration of the transaction.\n *\n * @example\n * const goalId = id();\n * db.asUser({ guest: true }).debugTransact(\n * [db.tx.goals[goalId].update({title: \"Get fit\"})],\n * { rules: { goals: { allow: { update: \"auth.id != null\" } } }\n * )\n */\n debugTransact = (\n inputChunks: TransactionChunk<any, any> | TransactionChunk<any, any>[],\n opts?: {\n rules?: any;\n ip?: string | null | undefined;\n origin?: string | null | undefined;\n },\n ): Promise<DebugTransactResult> => {\n const body: any = {\n steps: steps(inputChunks),\n 'rules-override': opts?.rules,\n // @ts-expect-error because we're using a private API (for now)\n 'dangerously-commit-tx': opts?.__dangerouslyCommit,\n };\n\n if (opts?.ip) {\n body['ip-override'] = opts.ip;\n }\n if (opts?.origin) {\n body['origin-override'] = opts.origin;\n }\n\n return jsonFetch(\n `${this.config.apiURI}/admin/transact_perms_check?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify(body),\n },\n );\n };\n\n #setupSSEConnection() {\n if (this.#sseConnection) {\n this.#sseConnection.close();\n }\n const headers: HeadersInit = {\n ...authorizedHeaders(this.config, this.impersonationOpts),\n };\n\n const inference = !!this.config.schema;\n\n const ES = makeEventSourceWrapper({ headers, inference });\n const conn = new SSEConnection(\n ES,\n `${this.config.apiURI}/admin/sse?app_id=${this.config.appId}`,\n `${this.config.apiURI}/admin/sse/push?app_id=${this.config.appId}`,\n );\n conn.onopen = this.#onopen;\n conn.onmessage = this.#onmessage;\n conn.onclose = this.#onclose;\n conn.onerror = this.#onerror;\n this.#sseConnection = conn;\n return conn;\n }\n\n #ensureSSEConnection() {\n return this.#sseConnection || this.#setupSSEConnection();\n }\n\n #trySend(eventId, msg) {\n const sseConnection = this.#ensureSSEConnection();\n this.#log.info('[send]', eventId, msg, {\n isOpen: sseConnection.isOpen(),\n });\n if (sseConnection.isOpen()) {\n sseConnection.send({ 'client-event-id': eventId, ...msg });\n }\n }\n\n #setupInstantStream() {\n this.#ensureSSEConnection();\n const instantStream = new InstantStream({\n WStream: this.config.WritableStream || WritableStream,\n RStream: this.config.ReadableStream || ReadableStream,\n trySend: (eventId, msg) => {\n this.#trySend(eventId, msg);\n },\n log: this.#log,\n });\n\n this.#instantStream = instantStream;\n return instantStream;\n }\n\n #ensureInstantStream() {\n return this.#instantStream || this.#setupInstantStream();\n }\n\n #onopen = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][open]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this.#log.info('[socket][open]', e.target.id);\n this.#sseBackoff = 0;\n this.#instantStream?.onConnectionStatusChange('authenticated');\n };\n\n #onclose = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][close]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this.#log.info('[socket][close]', e.target.id);\n this.#instantStream?.onConnectionStatusChange('closed');\n if (this.#sseConnection) {\n this.#sseConnection = null;\n if (!this.#connectionIsIdle()) {\n // We didn't remove the sse connection, and we have streams we care about, so let's try again\n setTimeout(() => this.#ensureSSEConnection(), this.#sseBackoff);\n this.#sseBackoff = Math.min(15000, Math.max(this.#sseBackoff, 500) * 2);\n }\n }\n };\n\n #onerror = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][error]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this.#log.info('[socket][error]', e.target.id);\n\n this.#instantStream?.onConnectionStatusChange('closed');\n };\n\n #connectionIsIdle() {\n return !this.#instantStream || !this.#instantStream.hasActiveStreams();\n }\n\n #maybeShutdownConnection() {\n if (this.#sseConnection && this.#connectionIsIdle()) {\n const conn = this.#sseConnection;\n this.#log.info('cleaning up unused socket', conn.id);\n this.#sseConnection = null;\n conn.close();\n }\n }\n\n #onmessage = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][message]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n\n const msg = e.message;\n this.#log.info('[receive]', msg);\n switch (msg.op) {\n case 'start-stream-ok': {\n this.#instantStream?.onStartStreamOk(msg);\n break;\n }\n case 'stream-flushed': {\n this.#instantStream?.onStreamFlushed(msg);\n break;\n }\n case 'append-failed': {\n this.#instantStream?.onAppendFailed(msg);\n break;\n }\n case 'stream-append': {\n this.#instantStream?.onStreamAppend(msg);\n break;\n }\n\n case 'error': {\n switch (msg['original-event']?.op) {\n case 'start-stream':\n case 'append-stream':\n case 'subscribe-stream':\n case 'unsubscribe-stream': {\n this.#instantStream?.onRecieveError(msg);\n break;\n }\n }\n break;\n }\n }\n\n // Closes the connection if we don't have any items pending\n this.#maybeShutdownConnection();\n };\n}\n\nexport {\n init,\n init_experimental,\n id,\n tx,\n lookup,\n i,\n createInstantRouteHandler,\n\n // error\n InstantAPIError,\n\n // warnings\n setInstantWarningsEnabled,\n\n // types\n type Config,\n type ImpersonationOpts,\n type TransactionChunk,\n type DebugCheckResult,\n type InstantAdminDatabase,\n\n // core types\n type User,\n type InstaQLParams,\n type ValidQuery,\n type Query,\n\n // query types\n type QueryResponse,\n type InstaQLResponse,\n type InstantQuery,\n type InstantUnknownSchemaDef,\n type InstantQueryResult,\n type InstantSchema,\n type InstantSchemaDatabase,\n type IInstantDatabase,\n type InstantObject,\n type InstantEntity,\n type BackwardsCompatibleSchema,\n type InstaQLFields,\n type SubscribeQueryCallback,\n type SubscribeQueryResponse,\n type SubscribeQueryPayload,\n type SubscriptionReadyState,\n\n // schema types\n type AttrsDefs,\n type CardinalityKind,\n type DataAttrDef,\n type EntitiesDef,\n type EntitiesWithLinks,\n type EntityDef,\n type InstantGraph,\n type LinkAttrDef,\n type LinkDef,\n type LinksDef,\n type ResolveAttrs,\n type RoomsOf,\n type PresenceOf,\n type RoomsDef,\n type RoomHandle,\n type ValueTypes,\n type InstantSchemaDef,\n type InstantUnknownSchema,\n type InstaQLEntity,\n type InstaQLResult,\n type InstaQLEntitySubquery,\n type InstantRules,\n type CreateParams,\n type UpdateParams,\n type LinkParams,\n\n // storage types\n type FileOpts,\n type UploadFileResponse,\n type DeleteFileResponse,\n type DeleteManyFileResponse,\n\n // stream types\n type CreateReadStreamOpts,\n type CreateWriteStreamOpts,\n type InstantWritableStream,\n\n // error types\n type InstantIssue,\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Readable } from 'node:stream';\nimport { validate as uuidValidate } from 'uuid';\n\nimport {\n tx,\n lookup,\n getOps,\n i,\n id,\n txInit,\n version as coreVersion,\n InstantAPIError,\n setInstantWarningsEnabled,\n type InstantIssue,\n type TransactionChunk,\n type AuthToken,\n\n // core types\n type User,\n type Query,\n\n // query types\n type QueryResponse,\n type InstaQLResponse,\n type InstaQLParams,\n type ValidQuery,\n type InstaQLFields,\n type InstantQuery,\n type InstantQueryResult,\n type InstantSchema,\n type InstantSchemaDatabase,\n type InstantObject,\n type InstantEntity,\n type BackwardsCompatibleSchema,\n type IInstantDatabase,\n\n // schema types\n type AttrsDefs,\n type CardinalityKind,\n type DataAttrDef,\n type EntitiesDef,\n type EntitiesWithLinks,\n type EntityDef,\n type InstantGraph,\n type LinkAttrDef,\n type LinkDef,\n type InstantUnknownSchemaDef,\n type LinksDef,\n type RoomsOf,\n type RoomsDef,\n type PresenceOf,\n type RoomHandle,\n type ResolveAttrs,\n type ValueTypes,\n type InstantSchemaDef,\n type InstantUnknownSchema,\n type InstaQLEntity,\n type InstaQLResult,\n type InstaQLEntitySubquery,\n type InstantRules,\n type UpdateParams,\n type CreateParams,\n type LinkParams,\n type RuleParams,\n type TopicsOf,\n type TopicOf,\n\n // storage types\n type FileOpts,\n type UploadFileResponse,\n type DeleteFileResponse,\n validateQuery,\n validateTransactions,\n createInstantRouteHandler,\n SSEConnection,\n InstantStream,\n EventSourceConstructor,\n EventSourceType,\n type WritableStreamCtor,\n type ReadableStreamCtor,\n InstantWritableStream,\n} from '@instantdb/core';\n\nimport version from './version.ts';\n\nimport {\n subscribe,\n SubscribeQueryCallback,\n SubscribeQueryResponse,\n SubscribeQueryPayload,\n SubscriptionReadyState,\n} from './subscribe.ts';\nimport { parseCookie } from 'cookie';\nimport { EventSource } from 'eventsource';\n\ntype DebugCheckResult = {\n /** The ID of the record. */\n id: string;\n /** The namespace/table of the record. */\n entity: string;\n /** The value of the record. */\n record: Record<string, any>;\n /** The result of evaluating the corresponding permissions rule for a record. */\n check: any;\n};\n\ntype Config = {\n appId: string;\n adminToken?: string;\n apiURI?: string;\n useDateObjects?: boolean;\n disableValidation?: boolean;\n};\n\nexport type InstantConfig<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean = false,\n> = {\n appId: string;\n adminToken?: string;\n apiURI?: string;\n schema?: Schema;\n useDateObjects: UseDates;\n disableValidation?: boolean;\n verbose?: boolean;\n WritableStream?: WritableStreamCtor;\n ReadableStream?: ReadableStreamCtor;\n};\n\ntype InstantConfigFilled<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean,\n> = InstantConfig<Schema, UseDates> & { apiURI: string };\n\ntype FilledConfig = Config & { apiURI: string };\n\ntype ImpersonationOpts =\n | { email: string }\n | { token: AuthToken }\n | { guest: boolean };\n\ntype DebugTransactResult = {\n 'tx-id': number;\n 'all-checks-ok?': boolean;\n};\n\nfunction configWithDefaults(config: Config): FilledConfig {\n const defaultConfig = {\n apiURI: 'https://api.instantdb.com',\n };\n const r = { ...defaultConfig, ...config };\n return r;\n}\n\nfunction instantConfigWithDefaults<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean,\n>(\n config: InstantConfig<Schema, UseDates>,\n): InstantConfigFilled<Schema, UseDates> {\n const defaultConfig = {\n apiURI: 'https://api.instantdb.com',\n };\n const r = { ...defaultConfig, ...config };\n return r;\n}\n\nfunction withImpersonation(\n headers: { [key: string]: string },\n opts: ImpersonationOpts,\n) {\n if ('email' in opts) {\n headers['as-email'] = opts.email;\n } else if ('token' in opts) {\n headers['as-token'] = opts.token;\n } else if ('guest' in opts) {\n headers['as-guest'] = 'true';\n }\n return headers;\n}\n\nfunction validateConfigAndImpersonation(\n config: FilledConfig,\n impersonationOpts: ImpersonationOpts | undefined,\n) {\n if (\n impersonationOpts &&\n ('token' in impersonationOpts || 'guest' in impersonationOpts)\n ) {\n // adminToken is not required for `token` or `guest` impersonation\n return;\n }\n if (config.adminToken) {\n // An adminToken is provided.\n return;\n }\n if (impersonationOpts && 'email' in impersonationOpts) {\n throw new Error(\n 'Admin token required. To impersonate users with an email you must pass `adminToken` to `init`.',\n );\n }\n throw new Error(\n 'Admin token required. To run this operation pass `adminToken` to `init`, or use `db.asUser`.',\n );\n}\n\nfunction authorizedHeaders(\n config: FilledConfig,\n impersonationOpts?: ImpersonationOpts,\n): Record<string, string> {\n validateConfigAndImpersonation(config, impersonationOpts);\n\n const { adminToken, appId } = config;\n const headers: Record<string, string> = {\n 'content-type': 'application/json',\n 'app-id': appId,\n };\n\n if (adminToken) {\n headers.authorization = `Bearer ${adminToken}`;\n }\n\n return impersonationOpts\n ? withImpersonation(headers, impersonationOpts)\n : headers;\n}\n\n// NextJS 13 and 14 cache fetch requests by default.\n//\n// Since adminDB.query uses fetch, this means that it would also cache by default.\n//\n// We don't want this behavior. `adminDB.query` should return the latest result by default.\n//\n// To get around this, we set an explicit `cache` header for NextJS 13 and 14.\n// This is no longer needed in NextJS 15 onwards, as the default is `no-store` again.\n// Once NextJS 13 and 14 are no longer common, we can remove this code.\nfunction isNextJSVersionThatCachesFetchByDefault() {\n return (\n // NextJS 13 onwards added a `__nextPatched` property to the fetch function\n fetch['__nextPatched'] &&\n // NextJS 15 onwards _also_ added a global `next-patch` symbol.\n !globalThis[Symbol.for('next-patch')]\n );\n}\n\nfunction getDefaultFetchOpts(): RequestInit {\n return isNextJSVersionThatCachesFetchByDefault() ? { cache: 'no-store' } : {};\n}\n\nasync function jsonReject(rejectFn, res) {\n const body = await res.text();\n try {\n const json = JSON.parse(body);\n return rejectFn(new InstantAPIError({ status: res.status, body: json }));\n } catch (_e) {\n return rejectFn(\n new InstantAPIError({\n status: res.status,\n body: { type: undefined, message: body },\n }),\n );\n }\n}\n\nasync function jsonFetch(\n input: RequestInfo,\n init: RequestInit | undefined,\n): Promise<any> {\n const defaultFetchOpts = getDefaultFetchOpts();\n const headers = {\n ...(init?.headers || {}),\n 'Instant-Admin-Version': version,\n 'Instant-Core-Version': coreVersion,\n };\n const res = await fetch(input, { ...defaultFetchOpts, ...init, headers });\n if (res.status === 200) {\n const json = await res.json();\n return Promise.resolve(json);\n }\n\n return jsonReject((x) => Promise.reject(x), res);\n}\n\nfunction makeEventSourceWrapper(opts: {\n headers: HeadersInit;\n inference: boolean;\n}): EventSourceConstructor {\n return class EventSourceWrapper {\n source: EventSource;\n static OPEN = EventSource.OPEN;\n static CONNECTING = EventSource.CONNECTING;\n static CLOSED = EventSource.CLOSED;\n readonly url: string;\n\n constructor(url: string) {\n this.url = url;\n this.source = this.#createEventSource(url);\n }\n\n get onopen(): EventSourceType['onopen'] {\n return this.source.onopen;\n }\n set onopen(fn: EventSourceType['onopen']) {\n this.source.onopen = fn;\n }\n\n get onmessage(): EventSourceType['onmessage'] {\n return this.source.onmessage;\n }\n set onmessage(fn: EventSourceType['onmessage']) {\n this.source.onmessage = fn;\n }\n\n get onerror(): EventSourceType['onerror'] {\n return this.source.onerror;\n }\n set onerror(fn: EventSourceType['onerror']) {\n this.source.onerror = fn;\n }\n\n public get readyState() {\n return this.source.readyState;\n }\n\n public close() {\n this.source.close();\n }\n\n #createEventSource(url: string): EventSource {\n const es = new EventSource(url, {\n fetch(input, init) {\n return fetch(input, {\n ...init,\n method: 'POST',\n headers: opts.headers,\n body: JSON.stringify({\n 'inference?': opts.inference,\n versions: {\n '@instantdb/admin': version,\n '@instantdb/core': coreVersion,\n },\n }),\n });\n },\n });\n return es;\n }\n };\n}\n\n/**\n *\n * The first step: init your application!\n *\n * Visit https://instantdb.com/dash to get your `appId` :)\n *\n * @example\n * import { init } from \"@instantdb/admin\"\n *\n * const db = init({\n * appId: process.env.INSTANT_APP_ID!,\n * adminToken: process.env.INSTANT_APP_ADMIN_TOKEN\n * })\n *\n * // You can also provide a schema for type safety and editor autocomplete!\n *\n * import { init } from \"@instantdb/admin\"\n * import schema from \"\"../instant.schema.ts\";\n *\n * const db = init({\n * appId: process.env.INSTANT_APP_ID!,\n * adminToken: process.env.INSTANT_APP_ADMIN_TOKEN,\n * schema,\n * })\n * // To learn more: https://instantdb.com/docs/modeling-data\n */\nfunction init<\n Schema extends InstantSchemaDef<any, any, any> = InstantUnknownSchema,\n UseDates extends boolean = false,\n>(\n // Allows config with missing `useDateObjects`, but keeps `UseDates`\n // as a non-nullable in the InstantConfig type.\n config: Omit<InstantConfig<Schema, UseDates>, 'useDateObjects'> & {\n useDateObjects?: UseDates;\n },\n): InstantAdminDatabase<Schema, UseDates, InstantConfig<Schema, UseDates>> {\n if (!config.appId || !uuidValidate(config.appId)) {\n console.warn(\n 'warning: Instant Admin DB must be initialized with a valid appId. Received: ' +\n JSON.stringify(config.appId),\n );\n }\n\n const configStrict = {\n ...config,\n appId: config.appId?.trim(),\n adminToken: config.adminToken?.trim(),\n useDateObjects: (config.useDateObjects ?? false) as UseDates,\n };\n\n return new InstantAdminDatabase<\n Schema,\n UseDates,\n InstantConfig<Schema, UseDates>\n >(configStrict);\n}\n\n/**\n * @deprecated\n * `init_experimental` is deprecated. You can replace it with `init`.\n *\n * @example\n *\n * // Before\n * import { init_experimental } from \"@instantdb/admin\"\n * const db = init_experimental({ ... });\n *\n * // After\n * import { init } from \"@instantdb/admin\"\n * const db = init({ ... });\n */\nconst init_experimental = init;\n\nfunction steps(inputChunks) {\n const chunks = Array.isArray(inputChunks) ? inputChunks : [inputChunks];\n return chunks.flatMap(getOps);\n}\n\ntype PresenceResult<Data> = {\n [peerId: string]: { data: Data; 'peer-id': string; user: User | null };\n};\n\nclass Rooms<Schema extends InstantSchemaDef<any, any, any>> {\n config: FilledConfig;\n\n constructor(config: FilledConfig) {\n this.config = config;\n }\n\n async getPresence<RoomType extends string & keyof RoomsOf<Schema>>(\n roomType: RoomType,\n roomId: string,\n ): Promise<PresenceResult<PresenceOf<Schema, RoomType>>> {\n const res = await jsonFetch(\n `${this.config.apiURI}/admin/rooms/presence?app_id=${this.config.appId}&room-type=${String(roomType)}&room-id=${roomId}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return res.sessions || {};\n }\n}\n\nclass Auth<Schema extends InstantSchemaDef<any, any, any>> {\n config: FilledConfig;\n\n constructor(config: FilledConfig) {\n this.config = config;\n this.createToken = this.createToken.bind(this);\n }\n\n /**\n * Generates a magic code for the user with the given email.\n * This is useful if you want to use your own email provider\n * to send magic codes.\n *\n * @example\n * // Generate a magic code\n * const { code } = await db.auth.generateMagicCode({ email })\n * // Send the magic code to the user with your own email provider\n * await customEmailProvider.sendMagicCode(email, code)\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n generateMagicCode = async (email: string): Promise<{ code: string }> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({ email }),\n },\n );\n };\n\n /**\n * Sends a magic code to the user with the given email.\n * This uses Instant's built-in email provider.\n *\n * @example\n * // Send an email to user with magic code\n * await db.auth.sendMagicCode({ email })\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n sendMagicCode = async (email: string): Promise<{ code: string }> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/send_magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({ email }),\n },\n );\n };\n\n /**\n * @deprecated Use {@link checkMagicCode} instead to get the `created` field\n * and support `extraFields`.\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n verifyMagicCode = async (email: string, code: string): Promise<User> => {\n const { user } = await jsonFetch(\n `${this.config.apiURI}/admin/verify_magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({ email, code }),\n },\n );\n return user;\n };\n\n /**\n * Verifies a magic code and returns the user along with whether\n * the user was newly created. Supports `extraFields` to set custom\n * `$users` properties at signup.\n *\n * @example\n * const { user, created } = await db.auth.checkMagicCode(\n * email,\n * code,\n * { extraFields: { nickname: 'ari' } },\n * );\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n checkMagicCode = async (\n email: string,\n code: string,\n options?: { extraFields?: UpdateParams<Schema, '$users'> },\n ): Promise<{ user: User; created: boolean }> => {\n const res = await jsonFetch(\n `${this.config.apiURI}/admin/verify_magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({\n email,\n code,\n ...(options?.extraFields\n ? { 'extra-fields': options.extraFields }\n : {}),\n }),\n },\n );\n return { user: res.user, created: res.created };\n };\n\n /**\n * Creates a login token for the user with the given email.\n * If that user does not exist, we create one.\n *\n * This is often useful for writing custom auth flows.\n *\n * @example\n * app.post('/custom_sign_in', async (req, res) => {\n * // ... your custom flow for users\n * const token = await db.auth.createToken({ email })\n * return res.status(200).send({ token })\n * })\n *\n * @see https://instantdb.com/docs/backend#custom-auth\n */\n createToken(email: { email: string } | { id: string }): Promise<AuthToken>;\n\n /**\n *\n * @deprecated Passing an email string directly is deprecated.\n *\n * Use an object with the `email` key instead.\n *\n * @example\n * // Before\n * const token = await auth.createToken(email)\n * // After\n * const token = await auth.createToken({ email })\n */\n createToken(email: string): Promise<AuthToken>;\n\n async createToken(\n input: string | { email: string } | { id: string },\n ): Promise<AuthToken> {\n const body = typeof input === 'string' ? { email: input } : input;\n const ret: { user: { refresh_token: string } } = await jsonFetch(\n `${this.config.apiURI}/admin/refresh_tokens?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify(body),\n },\n );\n return ret.user.refresh_token;\n }\n\n /**\n * Verifies a given token and returns the associated user.\n *\n * This is often useful for writing custom endpoints, where you need\n * to authenticate users.\n *\n * @example\n * app.post('/custom_endpoint', async (req, res) => {\n * const user = await db.auth.verifyToken(req.headers['token'])\n * if (!user) {\n * return res.status(401).send('Uh oh, you are not authenticated')\n * }\n * // ...\n * })\n * @see https://instantdb.com/docs/backend#custom-endpoints\n */\n verifyToken = async (token: AuthToken): Promise<User> => {\n const res = await jsonFetch(\n `${this.config.apiURI}/runtime/auth/verify_refresh_token?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n 'app-id': this.config.appId,\n 'refresh-token': token,\n }),\n },\n );\n return res.user;\n };\n\n /**\n * Retrieves an app user by id, email, or refresh token.\n *\n * @example\n * try {\n * const user = await db.auth.getUser({ email })\n * console.log(\"Found user:\", user)\n * } catch (err) {\n * console.error(\"Failed to retrieve user:\", err.message);\n * }\n *\n * @see https://instantdb.com/docs/backend#retrieve-a-user\n */\n getUser = async (\n params: { email: string } | { id: string } | { refresh_token: string },\n ): Promise<Omit<User, 'refresh_token'>> => {\n const qs = Object.entries(params)\n .map(([k, v]) => `${k}=${encodeURIComponent(v)}`)\n .join('&');\n\n const response: { user: User } = await jsonFetch(\n `${this.config.apiURI}/admin/users?app_id=${this.config.appId}&${qs}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return response.user;\n };\n\n /**\n * Deletes an app user by id, email, or refresh token.\n *\n * NB: This _only_ deletes the user; it does not delete all user data.\n * You will need to handle this manually.\n *\n * @example\n * try {\n * const deletedUser = await db.auth.deleteUser({ email })\n * console.log(\"Deleted user:\", deletedUser)\n * } catch (err) {\n * console.error(\"Failed to delete user:\", err.message);\n * }\n *\n * @see https://instantdb.com/docs/backend#delete-a-user\n */\n deleteUser = async (\n params: { email: string } | { id: string } | { refresh_token: string },\n ): Promise<User> => {\n const qs = Object.entries(params).map(([k, v]) => `${k}=${v}`);\n const response: { deleted: User } = await jsonFetch(\n `${this.config.apiURI}/admin/users?app_id=${this.config.appId}&${qs}`,\n {\n method: 'DELETE',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return response.deleted;\n };\n\n /**\n * Signs out the user with the given email.\n * This invalidates any tokens associated with the user.\n * If the user is not found, an error will be thrown.\n *\n * @example\n * try {\n * await auth.signOut({ email: \"alyssa_p_hacker@instantdb.com\" });\n * console.log(\"Successfully signed out\");\n * } catch (err) {\n * console.error(\"Sign out failed:\", err.message);\n * }\n *\n * @see https://instantdb.com/docs/backend#sign-out\n */\n async signOut(\n params: { email: string } | { id: string } | { refresh_token: string },\n ): Promise<void>;\n\n /**\n * @deprecated Passing an email string directly is deprecated.\n * Use an object with the `email` key instead.\n *\n * @example\n * // Before\n * auth.signOut(email)\n *\n * // After\n * auth.signOut({ email })\n */\n async signOut(email: string): Promise<void>;\n\n async signOut(\n input:\n | string\n | { email: string }\n | { id: string }\n | { refresh_token: string },\n ): Promise<void> {\n // If input is a string, we assume it's an email.\n // This is because of backwards compatibility: we used to only\n // accept email strings. Eventually we can remove this\n const params = typeof input === 'string' ? { email: input } : input;\n const config = this.config;\n await jsonFetch(\n `${config.apiURI}/admin/sign_out?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(config),\n body: JSON.stringify(params),\n },\n );\n }\n\n /**\n * Get instant user from Request\n *\n * Reads cookies and gets a validated user\n * @param req The request containing a cookie synced with createInstantRouteHandler\n * @param opts Allow disabling validation of refresh token\n */\n getUserFromRequest = async (\n req: Request,\n opts?: { disableValidation?: boolean },\n ): Promise<User | null> => {\n const cookieHeader = req.headers.get('cookie') || '';\n\n const parsedCookie = parseCookie(cookieHeader);\n\n const cookieName = 'instant_user_' + this.config.appId;\n if (!parsedCookie[cookieName]) {\n return null;\n }\n const value = parsedCookie[cookieName];\n const user = JSON.parse(value);\n if (!user?.refresh_token) {\n return null;\n }\n if (opts?.disableValidation) {\n return user;\n }\n const verified = await this.verifyToken(user.refresh_token);\n return verified;\n };\n}\n\ntype StorageFile = {\n key: string;\n name: string;\n size: number;\n etag: string;\n last_modified: number;\n};\n\ntype DeleteManyFileResponse = {\n data: {\n ids: string[] | null;\n };\n};\n\nconst isNodeReadable = (v: any): v is Readable =>\n v &&\n typeof v === 'object' &&\n typeof v.pipe === 'function' &&\n typeof v.read === 'function';\n\nconst isWebReadable = (v: any): v is ReadableStream =>\n v && typeof v.getReader === 'function';\n\n/**\n * Functions to manage file storage.\n */\nclass Storage {\n config: FilledConfig;\n impersonationOpts?: ImpersonationOpts;\n\n constructor(config: FilledConfig, impersonationOpts?: ImpersonationOpts) {\n this.config = config;\n this.impersonationOpts = impersonationOpts;\n }\n\n /**\n * Uploads file at the provided path. Accepts a Buffer or a Readable stream.\n *\n * @see https://instantdb.com/docs/storage\n * @example\n * const buffer = fs.readFileSync('demo.png');\n * const isSuccess = await db.storage.uploadFile('photos/demo.png', buffer);\n */\n uploadFile = async (\n path: string,\n file: Buffer | Readable | ReadableStream | Uint8Array,\n metadata: FileOpts = {},\n ): Promise<UploadFileResponse> => {\n const headers = {\n ...authorizedHeaders(this.config, this.impersonationOpts),\n path,\n };\n if (metadata.contentDisposition) {\n headers['content-disposition'] = metadata.contentDisposition;\n }\n\n // headers.content-type will become \"undefined\" (string)\n // if not removed from the object\n delete headers['content-type'];\n\n if (metadata.contentType) {\n headers['content-type'] = metadata.contentType;\n }\n\n let duplex: 'half' | undefined;\n if (isNodeReadable(file)) {\n duplex = 'half'; // one-way stream\n }\n if (isNodeReadable(file) || isWebReadable(file)) {\n if (!metadata.fileSize) {\n throw new Error(\n 'fileSize is required in metadata when uploading streams',\n );\n }\n headers['content-length'] = metadata.fileSize.toString();\n }\n\n let options = {\n method: 'PUT',\n headers,\n body: file as unknown as BodyInit,\n ...(duplex && { duplex }),\n };\n\n return jsonFetch(\n `${this.config.apiURI}/admin/storage/upload?app_id=${this.config.appId}`,\n options,\n );\n };\n\n /**\n * Deletes a file by its path name (e.g. \"photos/demo.png\").\n *\n * @deprecated Use `db.transact` to delete files instead:\n * @example\n * // Delete by id\n * await db.transact(db.tx.$files[fileId].delete());\n *\n * // Delete by path\n * await db.transact(db.tx.$files[lookup('path', 'photos/demo.png')].delete());\n *\n * @see https://instantdb.com/docs/storage\n */\n delete = async (pathname: string): Promise<DeleteFileResponse> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/storage/files?app_id=${this.config.appId}&filename=${encodeURIComponent(\n pathname,\n )}`,\n {\n method: 'DELETE',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n },\n );\n };\n\n /**\n * Deletes multiple files by their path names.\n *\n * @deprecated Use `db.transact` to delete files instead:\n * @example\n * // Delete multiple files by path\n * const paths = ['images/1.png', 'images/2.png', 'images/3.png'];\n * await db.transact(paths.map(p => db.tx.$files[lookup('path', p)].delete()));\n *\n * @see https://instantdb.com/docs/storage\n */\n deleteMany = async (pathnames: string[]): Promise<DeleteManyFileResponse> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/storage/files/delete?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify({ filenames: pathnames }),\n },\n );\n };\n\n /**\n * @deprecated. This method will be removed in the future. Use `uploadFile`\n * instead\n */\n upload = async (\n pathname: string,\n file: Buffer,\n metadata: FileOpts = {},\n ): Promise<boolean> => {\n const { data: presignedUrl } = await jsonFetch(\n `${this.config.apiURI}/admin/storage/signed-upload-url?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({\n app_id: this.config.appId,\n filename: pathname,\n }),\n },\n );\n const headers = {};\n const contentType = metadata.contentType;\n if (contentType) {\n headers['Content-Type'] = contentType;\n }\n const { ok } = await fetch(presignedUrl, {\n method: 'PUT',\n body: file as unknown as BodyInit,\n headers,\n });\n\n return ok;\n };\n\n /**\n * @deprecated. This method will be removed in the future. Use `query` instead\n * @example\n * const files = await db.query({ $files: {}})\n */\n list = async (): Promise<StorageFile[]> => {\n const { data } = await jsonFetch(\n `${this.config.apiURI}/admin/storage/files?app_id=${this.config.appId}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return data;\n };\n\n /**\n * @deprecated. getDownloadUrl will be removed in the future.\n * Use `query` instead to query and fetch for valid urls\n *\n * db.useQuery({\n * $files: {\n * $: {\n * where: {\n * path: \"moop.png\"\n * }\n * }\n * }\n * })\n */\n getDownloadUrl = async (pathname: string): Promise<string> => {\n const { data } = await jsonFetch(\n `${this.config.apiURI}/admin/storage/signed-download-url?app_id=${this.config.appId}&filename=${encodeURIComponent(pathname)}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return data;\n };\n}\n\ntype CreateReadStreamOpts = {\n clientId?: string | null | undefined;\n streamId?: string | null | undefined;\n byteOffset?: number | null | undefined;\n ruleParams?: RuleParams | null | undefined;\n};\n\ntype CreateWriteStreamOpts = {\n clientId: string;\n /**\n * A function that takes a promise and ensures that the current program stays alive\n * until the promise is resolved.\n *\n * Useful in serverless environments to ensure the writer fully flushes before the\n * environment is shut down.\n *\n * @example\n * import { after } from 'next/server'\n * db.streams.createWriteStream({clientId, waitUntil: after})\n */\n waitUntil?: (promise: Promise<any>) => void | null | undefined;\n ruleParams?: RuleParams | null | undefined;\n};\n\n/**\n * Functions to manage streams.\n */\nclass Streams {\n #ensureInstantStream: () => InstantStream;\n\n constructor(ensureInstantStream: () => InstantStream) {\n this.#ensureInstantStream = ensureInstantStream;\n }\n\n /**\n * Creates a new ReadableStream for the given clientId.\n *\n * @example\n * const stream = db.streams.createReadStream({clientId: clientId})\n * for await (const chunk of stream) {\n * console.log(chunk);\n * }\n */\n createReadStream = (opts: CreateReadStreamOpts): ReadableStream<string> => {\n return this.#ensureInstantStream().createReadStream(opts);\n };\n\n /**\n * Creates a new WritableStream for the given clientId.\n *\n * @example\n * const writeStream = db.streams.createWriteStream({clientId: clientId})\n * const writer = writeStream.getWriter();\n * writer.write('Hello world');\n * writer.close();\n */\n createWriteStream = (\n opts: CreateWriteStreamOpts,\n ): InstantWritableStream<string> => {\n return this.#ensureInstantStream().createWriteStream(opts);\n };\n}\n\ntype AdminQueryOpts = {\n ruleParams?: RuleParams;\n fetchOpts?: RequestInit;\n};\n\ninterface Logger {\n info: (...args: any[]) => void;\n debug: (...args: any[]) => void;\n error: (...args: any[]) => void;\n}\n\nfunction createLogger(isEnabled: boolean): Logger {\n return {\n info: isEnabled ? (...args: any[]) => console.info(...args) : () => {},\n debug: isEnabled ? (...args: any[]) => console.debug(...args) : () => {},\n error: isEnabled ? (...args: any[]) => console.error(...args) : () => {},\n };\n}\n\n/**\n *\n * The first step: init your application!\n *\n * Visit https://instantdb.com/dash to get your `appId` and `adminToken` :)\n *\n * @example\n * const db = init({ appId: \"my-app-id\", adminToken: \"my-admin-token\" })\n */\nclass InstantAdminDatabase<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean = false,\n Config extends InstantConfig<Schema, UseDates> = InstantConfig<\n Schema,\n UseDates\n >,\n> {\n config: InstantConfigFilled<Schema, UseDates>;\n auth: Auth<Schema>;\n storage: Storage;\n streams: Streams;\n rooms: Rooms<Schema>;\n impersonationOpts?: ImpersonationOpts;\n\n #sseConnection: SSEConnection | null = null;\n #sseBackoff = 0;\n #instantStream: InstantStream | null = null;\n #log: Logger;\n\n public tx = txInit<NonNullable<Schema>>();\n\n constructor(_config: Config) {\n this.config = instantConfigWithDefaults(_config);\n this.auth = new Auth<Schema>(this.config);\n this.storage = new Storage(this.config, this.impersonationOpts);\n this.streams = new Streams(this.#ensureInstantStream.bind(this));\n this.rooms = new Rooms<Schema>(this.config);\n this.#log = createLogger(!!this.config.verbose);\n }\n\n /**\n * Sometimes you want to scope queries to a specific user.\n *\n * You can provide a user's auth token, email, or impersonate a guest.\n *\n * @see https://instantdb.com/docs/backend#impersonating-users\n * @example\n * await db.asUser({email: \"stopa@instantdb.com\"}).query({ goals: {} })\n */\n asUser = (\n opts: ImpersonationOpts,\n ): InstantAdminDatabase<Schema, UseDates, Config> => {\n const newClient = new InstantAdminDatabase<Schema, UseDates, Config>({\n ...(this.config as Config),\n });\n newClient.impersonationOpts = opts;\n newClient.storage = new Storage(this.config, opts);\n return newClient;\n };\n\n /**\n * Use this to query your data!\n *\n * @see https://instantdb.com/docs/instaql\n *\n * @example\n * // fetch all goals\n * await db.query({ goals: {} })\n *\n * // goals where the title is \"Get Fit\"\n * await db.query({ goals: { $: { where: { title: \"Get Fit\" } } } })\n *\n * // all goals, _alongside_ their todos\n * await db.query({ goals: { todos: {} } })\n */\n query = <Q extends ValidQuery<Q, Schema>>(\n query: Q,\n opts: AdminQueryOpts = {},\n ): Promise<InstaQLResponse<Schema, Q, UseDates>> => {\n if (query && opts && 'ruleParams' in opts) {\n query = { $$ruleParams: opts['ruleParams'], ...query };\n }\n\n if (!this.config.disableValidation) {\n validateQuery(query, this.config.schema);\n }\n\n const fetchOpts = opts.fetchOpts || {};\n const fetchOptsHeaders = fetchOpts['headers'] || {};\n return jsonFetch(\n `${this.config.apiURI}/admin/query?app_id=${this.config.appId}`,\n {\n ...fetchOpts,\n method: 'POST',\n headers: {\n ...fetchOptsHeaders,\n ...authorizedHeaders(this.config, this.impersonationOpts),\n },\n body: JSON.stringify({\n query: query,\n 'inference?': !!this.config.schema,\n }),\n },\n );\n };\n\n /**\n * Use this to to get a live view of your data!\n *\n * @see https://www.instantdb.com/docs/backend\n *\n * @example\n * // create a subscription to a query\n * const query = { goals: { $: { where: { title: \"Get Fit\" } } } }\n * const sub = db.subscribeQuery(query);\n *\n * // iterate through the results with an async iterator\n * for await (const payload of sub) {\n * if (payload.error) {\n * console.log(payload.error);\n * // Stop the subscription\n * sub.close();\n * } else {\n * console.log(payload.data);\n * }\n * }\n *\n * // Stop the subscription\n * sub.close();\n *\n * // Create a subscription with a callback\n * const sub = db.subscribeQuery(query, (payload) => {\n * if (payload.error) {\n * console.log(payload.error);\n * // Stop the subscription\n * sub.close();\n * } else {\n * console.log(payload.data);\n * }\n * });\n */\n subscribeQuery<Q extends ValidQuery<Q, Schema>>(\n query: Q,\n cb?: SubscribeQueryCallback<Schema, Q, UseDates>,\n opts: AdminQueryOpts = {},\n ): SubscribeQueryResponse<Schema, Q, UseDates> {\n if (query && opts && 'ruleParams' in opts) {\n query = { $$ruleParams: opts['ruleParams'], ...query };\n }\n\n if (!this.config.disableValidation) {\n validateQuery(query, this.config.schema);\n }\n\n const fetchOpts = opts.fetchOpts || {};\n const fetchOptsHeaders = fetchOpts['headers'] || {};\n\n const headers: HeadersInit = {\n ...fetchOptsHeaders,\n ...authorizedHeaders(this.config, this.impersonationOpts),\n };\n\n const inference = !!this.config.schema;\n\n return subscribe(query, cb, {\n headers,\n inference,\n apiURI: this.config.apiURI,\n });\n }\n\n /**\n * Use this to write data! You can create, update, delete, and link objects\n *\n * @see https://instantdb.com/docs/instaml\n *\n * @example\n * // Create a new object in the `goals` namespace\n * const goalId = id();\n * db.transact(db.tx.goals[goalId].update({title: \"Get fit\"}))\n *\n * // Update the title\n * db.transact(db.tx.goals[goalId].update({title: \"Get super fit\"}))\n *\n * // Delete it\n * db.transact(db.tx.goals[goalId].delete())\n *\n * // Or create an association:\n * todoId = id();\n * db.transact([\n * db.tx.todos[todoId].update({ title: 'Go on a run' }),\n * db.tx.goals[goalId].link({todos: todoId}),\n * ])\n */\n transact = (\n inputChunks: TransactionChunk<any, any> | TransactionChunk<any, any>[],\n ) => {\n if (!this.config.disableValidation) {\n validateTransactions(inputChunks, this.config.schema);\n }\n return jsonFetch(\n `${this.config.apiURI}/admin/transact?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify({\n steps: steps(inputChunks),\n 'throw-on-missing-attrs?': !!this.config.schema,\n }),\n },\n );\n };\n\n /**\n * Like `query`, but returns debugging information\n * for permissions checks along with the result.\n * Useful for inspecting the values returned by the permissions checks.\n * Note, this will return debug information for *all* entities\n * that match the query's `where` clauses.\n *\n * Requires a user/guest context to be set with `asUser`,\n * since permissions checks are user-specific.\n *\n * Accepts an optional configuration object with a `rules` key.\n * The provided rules will override the rules in the database for the query.\n *\n * @see https://instantdb.com/docs/instaql\n *\n * @example\n * await db.asUser({ guest: true }).debugQuery(\n * { goals: {} },\n * { rules: { goals: { allow: { read: \"auth.id != null\" } } }\n * )\n */\n debugQuery = async <Q extends ValidQuery<Q, Schema>>(\n query: Q,\n opts?: {\n rules?: any;\n ruleParams?: { [key: string]: any };\n ip?: string | null | undefined;\n origin?: string | null | undefined;\n },\n ): Promise<{\n result: InstaQLResponse<Schema, Q, UseDates>;\n checkResults: DebugCheckResult[];\n }> => {\n if (query && opts && 'ruleParams' in opts) {\n query = { $$ruleParams: opts['ruleParams'], ...query };\n }\n\n const body: any = { query, 'rules-override': opts?.rules };\n if (opts?.ip) {\n body['ip-override'] = opts.ip;\n }\n if (opts?.origin) {\n body['origin-override'] = opts.origin;\n }\n\n const response = await jsonFetch(\n `${this.config.apiURI}/admin/query_perms_check?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify(body),\n },\n );\n\n return {\n result: response.result,\n checkResults: response['check-results'],\n };\n };\n\n /**\n * Like `transact`, but does not write to the database.\n * Returns debugging information for permissions checks.\n * Useful for inspecting the values returned by the permissions checks.\n *\n * Requires a user/guest context to be set with `asUser`,\n * since permissions checks are user-specific.\n *\n * Accepts an optional configuration object with a `rules` key.\n * The provided rules will override the rules in the database for the duration of the transaction.\n *\n * @example\n * const goalId = id();\n * db.asUser({ guest: true }).debugTransact(\n * [db.tx.goals[goalId].update({title: \"Get fit\"})],\n * { rules: { goals: { allow: { update: \"auth.id != null\" } } }\n * )\n */\n debugTransact = (\n inputChunks: TransactionChunk<any, any> | TransactionChunk<any, any>[],\n opts?: {\n rules?: any;\n ip?: string | null | undefined;\n origin?: string | null | undefined;\n },\n ): Promise<DebugTransactResult> => {\n const body: any = {\n steps: steps(inputChunks),\n 'rules-override': opts?.rules,\n // @ts-expect-error because we're using a private API (for now)\n 'dangerously-commit-tx': opts?.__dangerouslyCommit,\n };\n\n if (opts?.ip) {\n body['ip-override'] = opts.ip;\n }\n if (opts?.origin) {\n body['origin-override'] = opts.origin;\n }\n\n return jsonFetch(\n `${this.config.apiURI}/admin/transact_perms_check?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify(body),\n },\n );\n };\n\n #setupSSEConnection() {\n if (this.#sseConnection) {\n this.#sseConnection.close();\n }\n const headers: HeadersInit = {\n ...authorizedHeaders(this.config, this.impersonationOpts),\n };\n\n const inference = !!this.config.schema;\n\n const ES = makeEventSourceWrapper({ headers, inference });\n const conn = new SSEConnection(\n ES,\n `${this.config.apiURI}/admin/sse?app_id=${this.config.appId}`,\n `${this.config.apiURI}/admin/sse/push?app_id=${this.config.appId}`,\n );\n conn.onopen = this.#onopen;\n conn.onmessage = this.#onmessage;\n conn.onclose = this.#onclose;\n conn.onerror = this.#onerror;\n this.#sseConnection = conn;\n return conn;\n }\n\n #ensureSSEConnection() {\n return this.#sseConnection || this.#setupSSEConnection();\n }\n\n #trySend(eventId, msg) {\n const sseConnection = this.#ensureSSEConnection();\n this.#log.info('[send]', eventId, msg, {\n isOpen: sseConnection.isOpen(),\n });\n if (sseConnection.isOpen()) {\n sseConnection.send({ 'client-event-id': eventId, ...msg });\n }\n }\n\n #setupInstantStream() {\n this.#ensureSSEConnection();\n const instantStream = new InstantStream({\n WStream: this.config.WritableStream || WritableStream,\n RStream: this.config.ReadableStream || ReadableStream,\n trySend: (eventId, msg) => {\n this.#trySend(eventId, msg);\n },\n log: this.#log,\n });\n\n this.#instantStream = instantStream;\n return instantStream;\n }\n\n #ensureInstantStream() {\n return this.#instantStream || this.#setupInstantStream();\n }\n\n #onopen = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][open]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this.#log.info('[socket][open]', e.target.id);\n this.#sseBackoff = 0;\n this.#instantStream?.onConnectionStatusChange('authenticated');\n };\n\n #onclose = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][close]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this.#log.info('[socket][close]', e.target.id);\n this.#instantStream?.onConnectionStatusChange('closed');\n if (this.#sseConnection) {\n this.#sseConnection = null;\n if (!this.#connectionIsIdle()) {\n // We didn't remove the sse connection, and we have streams we care about, so let's try again\n setTimeout(() => this.#ensureSSEConnection(), this.#sseBackoff);\n this.#sseBackoff = Math.min(15000, Math.max(this.#sseBackoff, 500) * 2);\n }\n }\n };\n\n #onerror = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][error]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this.#log.info('[socket][error]', e.target.id);\n\n this.#instantStream?.onConnectionStatusChange('closed');\n };\n\n #connectionIsIdle() {\n return !this.#instantStream || !this.#instantStream.hasActiveStreams();\n }\n\n #maybeShutdownConnection() {\n if (this.#sseConnection && this.#connectionIsIdle()) {\n const conn = this.#sseConnection;\n this.#log.info('cleaning up unused socket', conn.id);\n this.#sseConnection = null;\n conn.close();\n }\n }\n\n #onmessage = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][message]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n\n const msg = e.message;\n this.#log.info('[receive]', msg);\n switch (msg.op) {\n case 'start-stream-ok': {\n this.#instantStream?.onStartStreamOk(msg);\n break;\n }\n case 'stream-flushed': {\n this.#instantStream?.onStreamFlushed(msg);\n break;\n }\n case 'append-failed': {\n this.#instantStream?.onAppendFailed(msg);\n break;\n }\n case 'stream-append': {\n this.#instantStream?.onStreamAppend(msg);\n break;\n }\n\n case 'error': {\n switch (msg['original-event']?.op) {\n case 'start-stream':\n case 'append-stream':\n case 'subscribe-stream':\n case 'unsubscribe-stream': {\n this.#instantStream?.onRecieveError(msg);\n break;\n }\n }\n break;\n }\n }\n\n // Closes the connection if we don't have any items pending\n this.#maybeShutdownConnection();\n };\n}\n\nexport {\n init,\n init_experimental,\n id,\n tx,\n lookup,\n i,\n createInstantRouteHandler,\n\n // error\n InstantAPIError,\n\n // warnings\n setInstantWarningsEnabled,\n\n // types\n type Config,\n type ImpersonationOpts,\n type TransactionChunk,\n type DebugCheckResult,\n type InstantAdminDatabase,\n\n // core types\n type User,\n type InstaQLParams,\n type ValidQuery,\n type Query,\n\n // query types\n type QueryResponse,\n type InstaQLResponse,\n type InstantQuery,\n type InstantUnknownSchemaDef,\n type InstantQueryResult,\n type InstantSchema,\n type InstantSchemaDatabase,\n type IInstantDatabase,\n type InstantObject,\n type InstantEntity,\n type BackwardsCompatibleSchema,\n type InstaQLFields,\n type SubscribeQueryCallback,\n type SubscribeQueryResponse,\n type SubscribeQueryPayload,\n type SubscriptionReadyState,\n\n // schema types\n type AttrsDefs,\n type CardinalityKind,\n type DataAttrDef,\n type EntitiesDef,\n type EntitiesWithLinks,\n type EntityDef,\n type InstantGraph,\n type LinkAttrDef,\n type LinkDef,\n type LinksDef,\n type ResolveAttrs,\n type RoomsOf,\n type PresenceOf,\n type RoomsDef,\n type RoomHandle,\n type ValueTypes,\n type InstantSchemaDef,\n type InstantUnknownSchema,\n type InstaQLEntity,\n type InstaQLResult,\n type InstaQLEntitySubquery,\n type InstantRules,\n type CreateParams,\n type UpdateParams,\n type LinkParams,\n\n // storage types\n type FileOpts,\n type UploadFileResponse,\n type DeleteFileResponse,\n type DeleteManyFileResponse,\n\n // stream types\n type CreateReadStreamOpts,\n type CreateWriteStreamOpts,\n type InstantWritableStream,\n\n // error types\n type InstantIssue,\n};\n"]}
@@ -102,7 +102,7 @@ declare class Rooms<Schema extends InstantSchemaDef<any, any, any>> {
102
102
  constructor(config: FilledConfig);
103
103
  getPresence<RoomType extends string & keyof RoomsOf<Schema>>(roomType: RoomType, roomId: string): Promise<PresenceResult<PresenceOf<Schema, RoomType>>>;
104
104
  }
105
- declare class Auth {
105
+ declare class Auth<Schema extends InstantSchemaDef<any, any, any>> {
106
106
  config: FilledConfig;
107
107
  constructor(config: FilledConfig);
108
108
  /**
@@ -135,15 +135,32 @@ declare class Auth {
135
135
  code: string;
136
136
  }>;
137
137
  /**
138
- * Verifies a magic code for the user with the given email.
138
+ * @deprecated Use {@link checkMagicCode} instead to get the `created` field
139
+ * and support `extraFields`.
140
+ *
141
+ * @see https://instantdb.com/docs/backend#custom-magic-codes
142
+ */
143
+ verifyMagicCode: (email: string, code: string) => Promise<User>;
144
+ /**
145
+ * Verifies a magic code and returns the user along with whether
146
+ * the user was newly created. Supports `extraFields` to set custom
147
+ * `$users` properties at signup.
139
148
  *
140
149
  * @example
141
- * const user = await db.auth.verifyMagicCode({ email, code })
142
- * console.log("Verified user:", user)
150
+ * const { user, created } = await db.auth.checkMagicCode(
151
+ * email,
152
+ * code,
153
+ * { extraFields: { nickname: 'ari' } },
154
+ * );
143
155
  *
144
156
  * @see https://instantdb.com/docs/backend#custom-magic-codes
145
157
  */
146
- verifyMagicCode: (email: string, code: string) => Promise<User>;
158
+ checkMagicCode: (email: string, code: string, options?: {
159
+ extraFields?: UpdateParams<Schema, "$users">;
160
+ }) => Promise<{
161
+ user: User;
162
+ created: boolean;
163
+ }>;
147
164
  /**
148
165
  * Creates a login token for the user with the given email.
149
166
  * If that user does not exist, we create one.
@@ -428,7 +445,7 @@ type AdminQueryOpts = {
428
445
  declare class InstantAdminDatabase<Schema extends InstantSchemaDef<any, any, any>, UseDates extends boolean = false, Config extends InstantConfig<Schema, UseDates> = InstantConfig<Schema, UseDates>> {
429
446
  #private;
430
447
  config: InstantConfigFilled<Schema, UseDates>;
431
- auth: Auth;
448
+ auth: Auth<Schema>;
432
449
  storage: Storage;
433
450
  streams: Streams;
434
451
  rooms: Rooms<Schema>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EACL,EAAE,EACF,MAAM,EAEN,CAAC,EACD,EAAE,EAGF,eAAe,EACf,yBAAyB,EACzB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAGd,KAAK,IAAI,EACT,KAAK,KAAK,EAGV,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EAGrB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,uBAAuB,EAC5B,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,UAAU,EAKf,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EAGvB,yBAAyB,EAEzB,aAAa,EAGb,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,qBAAqB,EACtB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EAEL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AAIxB,KAAK,gBAAgB,GAAG;IACtB,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,gFAAgF;IAChF,KAAK,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,KAAK,MAAM,GAAG;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,CACvB,MAAM,SAAS,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC9C,QAAQ,SAAS,OAAO,GAAG,KAAK,IAC9B;IACF,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,QAAQ,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACrC,CAAC;AAEF,KAAK,mBAAmB,CACtB,MAAM,SAAS,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC9C,QAAQ,SAAS,OAAO,IACtB,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,KAAK,YAAY,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhD,KAAK,iBAAiB,GAClB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GACpB;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEvB,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AA8MF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,iBAAS,IAAI,CACX,MAAM,SAAS,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,oBAAoB,EACrE,QAAQ,SAAS,OAAO,GAAG,KAAK,EAIhC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,CAAC,GAAG;IAChE,cAAc,CAAC,EAAE,QAAQ,CAAC;CAC3B,GACA,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAoBzE;AAED;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,iBAAiB,aAAO,CAAC;AAO/B,KAAK,cAAc,CAAC,IAAI,IAAI;IAC1B,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC;CACxE,CAAC;AAEF,cAAM,KAAK,CAAC,MAAM,SAAS,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACxD,MAAM,EAAE,YAAY,CAAC;gBAET,MAAM,EAAE,YAAY;IAI1B,WAAW,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAC/D,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CAWzD;AAED,cAAM,IAAI,CAAC,MAAM,SAAS,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACvD,MAAM,EAAE,YAAY,CAAC;gBAET,MAAM,EAAE,YAAY;IAKhC;;;;;;;;;;;;OAYG;IACH,iBAAiB,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CASlE;IAEF;;;;;;;;;OASG;IACH,aAAa,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAS9D;IAEF;;;;;OAKG;IACH,eAAe,GAAU,OAAO,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAUlE;IAEF;;;;;;;;;;;;;OAaG;IACH,cAAc,GACZ,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,UAAU;QAAE,WAAW,CAAC,EAAE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;KAAE,KACzD,OAAO,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAgB1C;IAEF;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IAE1E;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAiB9C;;;;;;;;;;;;;;;OAeG;IACH,WAAW,GAAU,OAAO,SAAS,KAAG,OAAO,CAAC,IAAI,CAAC,CAanD;IAEF;;;;;;;;;;;;OAYG;IACH,OAAO,GACL,QAAQ;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,KACrE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAcrC;IAEF;;;;;;;;;;;;;;;OAeG;IACH,UAAU,GACR,QAAQ;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,KACrE,OAAO,CAAC,IAAI,CAAC,CAWd;IAEF;;;;;;;;;;;;;;OAcG;IACG,OAAO,CACX,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,GACrE,OAAO,CAAC,IAAI,CAAC;IAEhB;;;;;;;;;;OAUG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB3C;;;;;;OAMG;IACH,kBAAkB,GAChB,KAAK,OAAO,EACZ,OAAO;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,KACrC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAmBrB;CACH;AAED,KAAK,WAAW,GAAG;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;KACtB,CAAC;CACH,CAAC;AAWF;;GAEG;AACH,cAAM,OAAO;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;gBAE1B,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAE,iBAAiB;IAKvE;;;;;;;OAOG;IACH,UAAU,GACR,MAAM,MAAM,EACZ,MAAM,MAAM,GAAG,QAAQ,GAAG,cAAc,GAAG,UAAU,EACrD,WAAU,QAAa,KACtB,OAAO,CAAC,kBAAkB,CAAC,CAyC5B;IAEF;;;;;;;;;;;;OAYG;IACH,MAAM,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,kBAAkB,CAAC,CAU5D;IAEF;;;;;;;;;;OAUG;IACH,UAAU,GAAU,WAAW,MAAM,EAAE,KAAG,OAAO,CAAC,sBAAsB,CAAC,CASvE;IAEF;;;OAGG;IACH,MAAM,GACJ,UAAU,MAAM,EAChB,MAAM,MAAM,EACZ,WAAU,QAAa,KACtB,OAAO,CAAC,OAAO,CAAC,CAwBjB;IAEF;;;;OAIG;IACH,IAAI,QAAa,OAAO,CAAC,WAAW,EAAE,CAAC,CAUrC;IAEF;;;;;;;;;;;;;OAaG;IACH,cAAc,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAUxD;CACH;AAED,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACvC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC;CAC5C,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/D,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,CAAC;CAC5C,CAAC;AAEF;;GAEG;AACH,cAAM,OAAO;;gBAGC,mBAAmB,EAAE,MAAM,aAAa;IAIpD;;;;;;;;OAQG;IACH,gBAAgB,GAAI,MAAM,oBAAoB,KAAG,cAAc,CAAC,MAAM,CAAC,CAErE;IAEF;;;;;;;;OAQG;IACH,iBAAiB,GACf,MAAM,qBAAqB,KAC1B,qBAAqB,CAAC,MAAM,CAAC,CAE9B;CACH;AAED,KAAK,cAAc,GAAG;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB,CAAC;AAgBF;;;;;;;;GAQG;AACH,cAAM,oBAAoB,CACxB,MAAM,SAAS,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC9C,QAAQ,SAAS,OAAO,GAAG,KAAK,EAChC,MAAM,SAAS,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,aAAa,CAC5D,MAAM,EACN,QAAQ,CACT;;IAED,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAO/B,EAAE,yDAAiC;gBAE9B,OAAO,EAAE,MAAM;IAS3B;;;;;;;;OAQG;IACH,MAAM,GACJ,MAAM,iBAAiB,KACtB,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAO/C;IAEF;;;;;;;;;;;;;;OAcG;IACH,KAAK,GAAI,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EACtC,OAAO,CAAC,EACR,OAAM,cAAmB,KACxB,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CA0B9C;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,cAAc,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAC5C,KAAK,EAAE,CAAC,EACR,EAAE,CAAC,EAAE,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,EAChD,IAAI,GAAE,cAAmB,GACxB,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC;IA0B9C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,QAAQ,GACN,aAAa,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,kBAgBtE;IAEF;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,UAAU,GAAU,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EACjD,OAAO,CAAC,EACR,OAAO;QACL,KAAK,CAAC,EAAE,GAAG,CAAC;QACZ,UAAU,CAAC,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;SAAE,CAAC;QACpC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;QAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;KACpC,KACA,OAAO,CAAC;QACT,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC7C,YAAY,EAAE,gBAAgB,EAAE,CAAC;KAClC,CAAC,CA0BA;IAEF;;;;;;;;;;;;;;;;;OAiBG;IACH,aAAa,GACX,aAAa,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EACtE,OAAO;QACL,KAAK,CAAC,EAAE,GAAG,CAAC;QACZ,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;QAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;KACpC,KACA,OAAO,CAAC,mBAAmB,CAAC,CAuB7B;CAwKH;AAED,OAAO,EACL,IAAI,EACJ,iBAAiB,EACjB,EAAE,EACF,EAAE,EACF,MAAM,EACN,CAAC,EACD,yBAAyB,EAGzB,eAAe,EAGf,yBAAyB,EAGzB,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAGzB,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,KAAK,EAGV,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAG3B,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,EAGf,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAG3B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAG1B,KAAK,YAAY,GAClB,CAAC"}
package/dist/esm/index.js CHANGED
@@ -279,11 +279,8 @@ class Auth {
279
279
  });
280
280
  };
281
281
  /**
282
- * Verifies a magic code for the user with the given email.
283
- *
284
- * @example
285
- * const user = await db.auth.verifyMagicCode({ email, code })
286
- * console.log("Verified user:", user)
282
+ * @deprecated Use {@link checkMagicCode} instead to get the `created` field
283
+ * and support `extraFields`.
287
284
  *
288
285
  * @see https://instantdb.com/docs/backend#custom-magic-codes
289
286
  */
@@ -295,6 +292,34 @@ class Auth {
295
292
  });
296
293
  return user;
297
294
  };
295
+ /**
296
+ * Verifies a magic code and returns the user along with whether
297
+ * the user was newly created. Supports `extraFields` to set custom
298
+ * `$users` properties at signup.
299
+ *
300
+ * @example
301
+ * const { user, created } = await db.auth.checkMagicCode(
302
+ * email,
303
+ * code,
304
+ * { extraFields: { nickname: 'ari' } },
305
+ * );
306
+ *
307
+ * @see https://instantdb.com/docs/backend#custom-magic-codes
308
+ */
309
+ checkMagicCode = async (email, code, options) => {
310
+ const res = await jsonFetch(`${this.config.apiURI}/admin/verify_magic_code?app_id=${this.config.appId}`, {
311
+ method: 'POST',
312
+ headers: authorizedHeaders(this.config),
313
+ body: JSON.stringify({
314
+ email,
315
+ code,
316
+ ...(options?.extraFields
317
+ ? { 'extra-fields': options.extraFields }
318
+ : {}),
319
+ }),
320
+ });
321
+ return { user: res.user, created: res.created };
322
+ };
298
323
  async createToken(input) {
299
324
  const body = typeof input === 'string' ? { email: input } : input;
300
325
  const ret = await jsonFetch(`${this.config.apiURI}/admin/refresh_tokens?app_id=${this.config.appId}`, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Readable } from 'node:stream';\nimport { validate as uuidValidate } from 'uuid';\n\nimport {\n tx,\n lookup,\n getOps,\n i,\n id,\n txInit,\n version as coreVersion,\n InstantAPIError,\n setInstantWarningsEnabled,\n type InstantIssue,\n type TransactionChunk,\n type AuthToken,\n\n // core types\n type User,\n type Query,\n\n // query types\n type QueryResponse,\n type InstaQLResponse,\n type InstaQLParams,\n type ValidQuery,\n type InstaQLFields,\n type InstantQuery,\n type InstantQueryResult,\n type InstantSchema,\n type InstantSchemaDatabase,\n type InstantObject,\n type InstantEntity,\n type BackwardsCompatibleSchema,\n type IInstantDatabase,\n\n // schema types\n type AttrsDefs,\n type CardinalityKind,\n type DataAttrDef,\n type EntitiesDef,\n type EntitiesWithLinks,\n type EntityDef,\n type InstantGraph,\n type LinkAttrDef,\n type LinkDef,\n type InstantUnknownSchemaDef,\n type LinksDef,\n type RoomsOf,\n type RoomsDef,\n type PresenceOf,\n type RoomHandle,\n type ResolveAttrs,\n type ValueTypes,\n type InstantSchemaDef,\n type InstantUnknownSchema,\n type InstaQLEntity,\n type InstaQLResult,\n type InstaQLEntitySubquery,\n type InstantRules,\n type UpdateParams,\n type CreateParams,\n type LinkParams,\n type RuleParams,\n type TopicsOf,\n type TopicOf,\n\n // storage types\n type FileOpts,\n type UploadFileResponse,\n type DeleteFileResponse,\n validateQuery,\n validateTransactions,\n createInstantRouteHandler,\n SSEConnection,\n InstantStream,\n EventSourceConstructor,\n EventSourceType,\n type WritableStreamCtor,\n type ReadableStreamCtor,\n InstantWritableStream,\n} from '@instantdb/core';\n\nimport version from './version.ts';\n\nimport {\n subscribe,\n SubscribeQueryCallback,\n SubscribeQueryResponse,\n SubscribeQueryPayload,\n SubscriptionReadyState,\n} from './subscribe.ts';\nimport { parseCookie } from 'cookie';\nimport { EventSource } from 'eventsource';\n\ntype DebugCheckResult = {\n /** The ID of the record. */\n id: string;\n /** The namespace/table of the record. */\n entity: string;\n /** The value of the record. */\n record: Record<string, any>;\n /** The result of evaluating the corresponding permissions rule for a record. */\n check: any;\n};\n\ntype Config = {\n appId: string;\n adminToken?: string;\n apiURI?: string;\n useDateObjects?: boolean;\n disableValidation?: boolean;\n};\n\nexport type InstantConfig<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean = false,\n> = {\n appId: string;\n adminToken?: string;\n apiURI?: string;\n schema?: Schema;\n useDateObjects: UseDates;\n disableValidation?: boolean;\n verbose?: boolean;\n WritableStream?: WritableStreamCtor;\n ReadableStream?: ReadableStreamCtor;\n};\n\ntype InstantConfigFilled<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean,\n> = InstantConfig<Schema, UseDates> & { apiURI: string };\n\ntype FilledConfig = Config & { apiURI: string };\n\ntype ImpersonationOpts =\n | { email: string }\n | { token: AuthToken }\n | { guest: boolean };\n\ntype DebugTransactResult = {\n 'tx-id': number;\n 'all-checks-ok?': boolean;\n};\n\nfunction configWithDefaults(config: Config): FilledConfig {\n const defaultConfig = {\n apiURI: 'https://api.instantdb.com',\n };\n const r = { ...defaultConfig, ...config };\n return r;\n}\n\nfunction instantConfigWithDefaults<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean,\n>(\n config: InstantConfig<Schema, UseDates>,\n): InstantConfigFilled<Schema, UseDates> {\n const defaultConfig = {\n apiURI: 'https://api.instantdb.com',\n };\n const r = { ...defaultConfig, ...config };\n return r;\n}\n\nfunction withImpersonation(\n headers: { [key: string]: string },\n opts: ImpersonationOpts,\n) {\n if ('email' in opts) {\n headers['as-email'] = opts.email;\n } else if ('token' in opts) {\n headers['as-token'] = opts.token;\n } else if ('guest' in opts) {\n headers['as-guest'] = 'true';\n }\n return headers;\n}\n\nfunction validateConfigAndImpersonation(\n config: FilledConfig,\n impersonationOpts: ImpersonationOpts | undefined,\n) {\n if (\n impersonationOpts &&\n ('token' in impersonationOpts || 'guest' in impersonationOpts)\n ) {\n // adminToken is not required for `token` or `guest` impersonation\n return;\n }\n if (config.adminToken) {\n // An adminToken is provided.\n return;\n }\n if (impersonationOpts && 'email' in impersonationOpts) {\n throw new Error(\n 'Admin token required. To impersonate users with an email you must pass `adminToken` to `init`.',\n );\n }\n throw new Error(\n 'Admin token required. To run this operation pass `adminToken` to `init`, or use `db.asUser`.',\n );\n}\n\nfunction authorizedHeaders(\n config: FilledConfig,\n impersonationOpts?: ImpersonationOpts,\n): Record<string, string> {\n validateConfigAndImpersonation(config, impersonationOpts);\n\n const { adminToken, appId } = config;\n const headers: Record<string, string> = {\n 'content-type': 'application/json',\n 'app-id': appId,\n };\n\n if (adminToken) {\n headers.authorization = `Bearer ${adminToken}`;\n }\n\n return impersonationOpts\n ? withImpersonation(headers, impersonationOpts)\n : headers;\n}\n\n// NextJS 13 and 14 cache fetch requests by default.\n//\n// Since adminDB.query uses fetch, this means that it would also cache by default.\n//\n// We don't want this behavior. `adminDB.query` should return the latest result by default.\n//\n// To get around this, we set an explicit `cache` header for NextJS 13 and 14.\n// This is no longer needed in NextJS 15 onwards, as the default is `no-store` again.\n// Once NextJS 13 and 14 are no longer common, we can remove this code.\nfunction isNextJSVersionThatCachesFetchByDefault() {\n return (\n // NextJS 13 onwards added a `__nextPatched` property to the fetch function\n fetch['__nextPatched'] &&\n // NextJS 15 onwards _also_ added a global `next-patch` symbol.\n !globalThis[Symbol.for('next-patch')]\n );\n}\n\nfunction getDefaultFetchOpts(): RequestInit {\n return isNextJSVersionThatCachesFetchByDefault() ? { cache: 'no-store' } : {};\n}\n\nasync function jsonReject(rejectFn, res) {\n const body = await res.text();\n try {\n const json = JSON.parse(body);\n return rejectFn(new InstantAPIError({ status: res.status, body: json }));\n } catch (_e) {\n return rejectFn(\n new InstantAPIError({\n status: res.status,\n body: { type: undefined, message: body },\n }),\n );\n }\n}\n\nasync function jsonFetch(\n input: RequestInfo,\n init: RequestInit | undefined,\n): Promise<any> {\n const defaultFetchOpts = getDefaultFetchOpts();\n const headers = {\n ...(init?.headers || {}),\n 'Instant-Admin-Version': version,\n 'Instant-Core-Version': coreVersion,\n };\n const res = await fetch(input, { ...defaultFetchOpts, ...init, headers });\n if (res.status === 200) {\n const json = await res.json();\n return Promise.resolve(json);\n }\n\n return jsonReject((x) => Promise.reject(x), res);\n}\n\nfunction makeEventSourceWrapper(opts: {\n headers: HeadersInit;\n inference: boolean;\n}): EventSourceConstructor {\n return class EventSourceWrapper {\n source: EventSource;\n static OPEN = EventSource.OPEN;\n static CONNECTING = EventSource.CONNECTING;\n static CLOSED = EventSource.CLOSED;\n readonly url: string;\n\n constructor(url: string) {\n this.url = url;\n this.source = this.#createEventSource(url);\n }\n\n get onopen(): EventSourceType['onopen'] {\n return this.source.onopen;\n }\n set onopen(fn: EventSourceType['onopen']) {\n this.source.onopen = fn;\n }\n\n get onmessage(): EventSourceType['onmessage'] {\n return this.source.onmessage;\n }\n set onmessage(fn: EventSourceType['onmessage']) {\n this.source.onmessage = fn;\n }\n\n get onerror(): EventSourceType['onerror'] {\n return this.source.onerror;\n }\n set onerror(fn: EventSourceType['onerror']) {\n this.source.onerror = fn;\n }\n\n public get readyState() {\n return this.source.readyState;\n }\n\n public close() {\n this.source.close();\n }\n\n #createEventSource(url: string): EventSource {\n const es = new EventSource(url, {\n fetch(input, init) {\n return fetch(input, {\n ...init,\n method: 'POST',\n headers: opts.headers,\n body: JSON.stringify({\n 'inference?': opts.inference,\n versions: {\n '@instantdb/admin': version,\n '@instantdb/core': coreVersion,\n },\n }),\n });\n },\n });\n return es;\n }\n };\n}\n\n/**\n *\n * The first step: init your application!\n *\n * Visit https://instantdb.com/dash to get your `appId` :)\n *\n * @example\n * import { init } from \"@instantdb/admin\"\n *\n * const db = init({\n * appId: process.env.INSTANT_APP_ID!,\n * adminToken: process.env.INSTANT_APP_ADMIN_TOKEN\n * })\n *\n * // You can also provide a schema for type safety and editor autocomplete!\n *\n * import { init } from \"@instantdb/admin\"\n * import schema from \"\"../instant.schema.ts\";\n *\n * const db = init({\n * appId: process.env.INSTANT_APP_ID!,\n * adminToken: process.env.INSTANT_APP_ADMIN_TOKEN,\n * schema,\n * })\n * // To learn more: https://instantdb.com/docs/modeling-data\n */\nfunction init<\n Schema extends InstantSchemaDef<any, any, any> = InstantUnknownSchema,\n UseDates extends boolean = false,\n>(\n // Allows config with missing `useDateObjects`, but keeps `UseDates`\n // as a non-nullable in the InstantConfig type.\n config: Omit<InstantConfig<Schema, UseDates>, 'useDateObjects'> & {\n useDateObjects?: UseDates;\n },\n): InstantAdminDatabase<Schema, UseDates, InstantConfig<Schema, UseDates>> {\n if (!config.appId || !uuidValidate(config.appId)) {\n console.warn(\n 'warning: Instant Admin DB must be initialized with a valid appId. Received: ' +\n JSON.stringify(config.appId),\n );\n }\n\n const configStrict = {\n ...config,\n appId: config.appId?.trim(),\n adminToken: config.adminToken?.trim(),\n useDateObjects: (config.useDateObjects ?? false) as UseDates,\n };\n\n return new InstantAdminDatabase<\n Schema,\n UseDates,\n InstantConfig<Schema, UseDates>\n >(configStrict);\n}\n\n/**\n * @deprecated\n * `init_experimental` is deprecated. You can replace it with `init`.\n *\n * @example\n *\n * // Before\n * import { init_experimental } from \"@instantdb/admin\"\n * const db = init_experimental({ ... });\n *\n * // After\n * import { init } from \"@instantdb/admin\"\n * const db = init({ ... });\n */\nconst init_experimental = init;\n\nfunction steps(inputChunks) {\n const chunks = Array.isArray(inputChunks) ? inputChunks : [inputChunks];\n return chunks.flatMap(getOps);\n}\n\ntype PresenceResult<Data> = {\n [peerId: string]: { data: Data; 'peer-id': string; user: User | null };\n};\n\nclass Rooms<Schema extends InstantSchemaDef<any, any, any>> {\n config: FilledConfig;\n\n constructor(config: FilledConfig) {\n this.config = config;\n }\n\n async getPresence<RoomType extends string & keyof RoomsOf<Schema>>(\n roomType: RoomType,\n roomId: string,\n ): Promise<PresenceResult<PresenceOf<Schema, RoomType>>> {\n const res = await jsonFetch(\n `${this.config.apiURI}/admin/rooms/presence?app_id=${this.config.appId}&room-type=${String(roomType)}&room-id=${roomId}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return res.sessions || {};\n }\n}\n\nclass Auth {\n config: FilledConfig;\n\n constructor(config: FilledConfig) {\n this.config = config;\n this.createToken = this.createToken.bind(this);\n }\n\n /**\n * Generates a magic code for the user with the given email.\n * This is useful if you want to use your own email provider\n * to send magic codes.\n *\n * @example\n * // Generate a magic code\n * const { code } = await db.auth.generateMagicCode({ email })\n * // Send the magic code to the user with your own email provider\n * await customEmailProvider.sendMagicCode(email, code)\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n generateMagicCode = async (email: string): Promise<{ code: string }> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({ email }),\n },\n );\n };\n\n /**\n * Sends a magic code to the user with the given email.\n * This uses Instant's built-in email provider.\n *\n * @example\n * // Send an email to user with magic code\n * await db.auth.sendMagicCode({ email })\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n sendMagicCode = async (email: string): Promise<{ code: string }> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/send_magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({ email }),\n },\n );\n };\n\n /**\n * Verifies a magic code for the user with the given email.\n *\n * @example\n * const user = await db.auth.verifyMagicCode({ email, code })\n * console.log(\"Verified user:\", user)\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n verifyMagicCode = async (email: string, code: string): Promise<User> => {\n const { user } = await jsonFetch(\n `${this.config.apiURI}/admin/verify_magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({ email, code }),\n },\n );\n return user;\n };\n\n /**\n * Creates a login token for the user with the given email.\n * If that user does not exist, we create one.\n *\n * This is often useful for writing custom auth flows.\n *\n * @example\n * app.post('/custom_sign_in', async (req, res) => {\n * // ... your custom flow for users\n * const token = await db.auth.createToken({ email })\n * return res.status(200).send({ token })\n * })\n *\n * @see https://instantdb.com/docs/backend#custom-auth\n */\n createToken(email: { email: string } | { id: string }): Promise<AuthToken>;\n\n /**\n *\n * @deprecated Passing an email string directly is deprecated.\n *\n * Use an object with the `email` key instead.\n *\n * @example\n * // Before\n * const token = await auth.createToken(email)\n * // After\n * const token = await auth.createToken({ email })\n */\n createToken(email: string): Promise<AuthToken>;\n\n async createToken(\n input: string | { email: string } | { id: string },\n ): Promise<AuthToken> {\n const body = typeof input === 'string' ? { email: input } : input;\n const ret: { user: { refresh_token: string } } = await jsonFetch(\n `${this.config.apiURI}/admin/refresh_tokens?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify(body),\n },\n );\n return ret.user.refresh_token;\n }\n\n /**\n * Verifies a given token and returns the associated user.\n *\n * This is often useful for writing custom endpoints, where you need\n * to authenticate users.\n *\n * @example\n * app.post('/custom_endpoint', async (req, res) => {\n * const user = await db.auth.verifyToken(req.headers['token'])\n * if (!user) {\n * return res.status(401).send('Uh oh, you are not authenticated')\n * }\n * // ...\n * })\n * @see https://instantdb.com/docs/backend#custom-endpoints\n */\n verifyToken = async (token: AuthToken): Promise<User> => {\n const res = await jsonFetch(\n `${this.config.apiURI}/runtime/auth/verify_refresh_token?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n 'app-id': this.config.appId,\n 'refresh-token': token,\n }),\n },\n );\n return res.user;\n };\n\n /**\n * Retrieves an app user by id, email, or refresh token.\n *\n * @example\n * try {\n * const user = await db.auth.getUser({ email })\n * console.log(\"Found user:\", user)\n * } catch (err) {\n * console.error(\"Failed to retrieve user:\", err.message);\n * }\n *\n * @see https://instantdb.com/docs/backend#retrieve-a-user\n */\n getUser = async (\n params: { email: string } | { id: string } | { refresh_token: string },\n ): Promise<Omit<User, 'refresh_token'>> => {\n const qs = Object.entries(params)\n .map(([k, v]) => `${k}=${encodeURIComponent(v)}`)\n .join('&');\n\n const response: { user: User } = await jsonFetch(\n `${this.config.apiURI}/admin/users?app_id=${this.config.appId}&${qs}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return response.user;\n };\n\n /**\n * Deletes an app user by id, email, or refresh token.\n *\n * NB: This _only_ deletes the user; it does not delete all user data.\n * You will need to handle this manually.\n *\n * @example\n * try {\n * const deletedUser = await db.auth.deleteUser({ email })\n * console.log(\"Deleted user:\", deletedUser)\n * } catch (err) {\n * console.error(\"Failed to delete user:\", err.message);\n * }\n *\n * @see https://instantdb.com/docs/backend#delete-a-user\n */\n deleteUser = async (\n params: { email: string } | { id: string } | { refresh_token: string },\n ): Promise<User> => {\n const qs = Object.entries(params).map(([k, v]) => `${k}=${v}`);\n const response: { deleted: User } = await jsonFetch(\n `${this.config.apiURI}/admin/users?app_id=${this.config.appId}&${qs}`,\n {\n method: 'DELETE',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return response.deleted;\n };\n\n /**\n * Signs out the user with the given email.\n * This invalidates any tokens associated with the user.\n * If the user is not found, an error will be thrown.\n *\n * @example\n * try {\n * await auth.signOut({ email: \"alyssa_p_hacker@instantdb.com\" });\n * console.log(\"Successfully signed out\");\n * } catch (err) {\n * console.error(\"Sign out failed:\", err.message);\n * }\n *\n * @see https://instantdb.com/docs/backend#sign-out\n */\n async signOut(\n params: { email: string } | { id: string } | { refresh_token: string },\n ): Promise<void>;\n\n /**\n * @deprecated Passing an email string directly is deprecated.\n * Use an object with the `email` key instead.\n *\n * @example\n * // Before\n * auth.signOut(email)\n *\n * // After\n * auth.signOut({ email })\n */\n async signOut(email: string): Promise<void>;\n\n async signOut(\n input:\n | string\n | { email: string }\n | { id: string }\n | { refresh_token: string },\n ): Promise<void> {\n // If input is a string, we assume it's an email.\n // This is because of backwards compatibility: we used to only\n // accept email strings. Eventually we can remove this\n const params = typeof input === 'string' ? { email: input } : input;\n const config = this.config;\n await jsonFetch(\n `${config.apiURI}/admin/sign_out?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(config),\n body: JSON.stringify(params),\n },\n );\n }\n\n /**\n * Get instant user from Request\n *\n * Reads cookies and gets a validated user\n * @param req The request containing a cookie synced with createInstantRouteHandler\n * @param opts Allow disabling validation of refresh token\n */\n getUserFromRequest = async (\n req: Request,\n opts?: { disableValidation?: boolean },\n ): Promise<User | null> => {\n const cookieHeader = req.headers.get('cookie') || '';\n\n const parsedCookie = parseCookie(cookieHeader);\n\n const cookieName = 'instant_user_' + this.config.appId;\n if (!parsedCookie[cookieName]) {\n return null;\n }\n const value = parsedCookie[cookieName];\n const user = JSON.parse(value);\n if (!user?.refresh_token) {\n return null;\n }\n if (opts?.disableValidation) {\n return user;\n }\n const verified = await this.verifyToken(user.refresh_token);\n return verified;\n };\n}\n\ntype StorageFile = {\n key: string;\n name: string;\n size: number;\n etag: string;\n last_modified: number;\n};\n\ntype DeleteManyFileResponse = {\n data: {\n ids: string[] | null;\n };\n};\n\nconst isNodeReadable = (v: any): v is Readable =>\n v &&\n typeof v === 'object' &&\n typeof v.pipe === 'function' &&\n typeof v.read === 'function';\n\nconst isWebReadable = (v: any): v is ReadableStream =>\n v && typeof v.getReader === 'function';\n\n/**\n * Functions to manage file storage.\n */\nclass Storage {\n config: FilledConfig;\n impersonationOpts?: ImpersonationOpts;\n\n constructor(config: FilledConfig, impersonationOpts?: ImpersonationOpts) {\n this.config = config;\n this.impersonationOpts = impersonationOpts;\n }\n\n /**\n * Uploads file at the provided path. Accepts a Buffer or a Readable stream.\n *\n * @see https://instantdb.com/docs/storage\n * @example\n * const buffer = fs.readFileSync('demo.png');\n * const isSuccess = await db.storage.uploadFile('photos/demo.png', buffer);\n */\n uploadFile = async (\n path: string,\n file: Buffer | Readable | ReadableStream | Uint8Array,\n metadata: FileOpts = {},\n ): Promise<UploadFileResponse> => {\n const headers = {\n ...authorizedHeaders(this.config, this.impersonationOpts),\n path,\n };\n if (metadata.contentDisposition) {\n headers['content-disposition'] = metadata.contentDisposition;\n }\n\n // headers.content-type will become \"undefined\" (string)\n // if not removed from the object\n delete headers['content-type'];\n\n if (metadata.contentType) {\n headers['content-type'] = metadata.contentType;\n }\n\n let duplex: 'half' | undefined;\n if (isNodeReadable(file)) {\n duplex = 'half'; // one-way stream\n }\n if (isNodeReadable(file) || isWebReadable(file)) {\n if (!metadata.fileSize) {\n throw new Error(\n 'fileSize is required in metadata when uploading streams',\n );\n }\n headers['content-length'] = metadata.fileSize.toString();\n }\n\n let options = {\n method: 'PUT',\n headers,\n body: file as unknown as BodyInit,\n ...(duplex && { duplex }),\n };\n\n return jsonFetch(\n `${this.config.apiURI}/admin/storage/upload?app_id=${this.config.appId}`,\n options,\n );\n };\n\n /**\n * Deletes a file by its path name (e.g. \"photos/demo.png\").\n *\n * @deprecated Use `db.transact` to delete files instead:\n * @example\n * // Delete by id\n * await db.transact(db.tx.$files[fileId].delete());\n *\n * // Delete by path\n * await db.transact(db.tx.$files[lookup('path', 'photos/demo.png')].delete());\n *\n * @see https://instantdb.com/docs/storage\n */\n delete = async (pathname: string): Promise<DeleteFileResponse> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/storage/files?app_id=${this.config.appId}&filename=${encodeURIComponent(\n pathname,\n )}`,\n {\n method: 'DELETE',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n },\n );\n };\n\n /**\n * Deletes multiple files by their path names.\n *\n * @deprecated Use `db.transact` to delete files instead:\n * @example\n * // Delete multiple files by path\n * const paths = ['images/1.png', 'images/2.png', 'images/3.png'];\n * await db.transact(paths.map(p => db.tx.$files[lookup('path', p)].delete()));\n *\n * @see https://instantdb.com/docs/storage\n */\n deleteMany = async (pathnames: string[]): Promise<DeleteManyFileResponse> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/storage/files/delete?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify({ filenames: pathnames }),\n },\n );\n };\n\n /**\n * @deprecated. This method will be removed in the future. Use `uploadFile`\n * instead\n */\n upload = async (\n pathname: string,\n file: Buffer,\n metadata: FileOpts = {},\n ): Promise<boolean> => {\n const { data: presignedUrl } = await jsonFetch(\n `${this.config.apiURI}/admin/storage/signed-upload-url?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({\n app_id: this.config.appId,\n filename: pathname,\n }),\n },\n );\n const headers = {};\n const contentType = metadata.contentType;\n if (contentType) {\n headers['Content-Type'] = contentType;\n }\n const { ok } = await fetch(presignedUrl, {\n method: 'PUT',\n body: file as unknown as BodyInit,\n headers,\n });\n\n return ok;\n };\n\n /**\n * @deprecated. This method will be removed in the future. Use `query` instead\n * @example\n * const files = await db.query({ $files: {}})\n */\n list = async (): Promise<StorageFile[]> => {\n const { data } = await jsonFetch(\n `${this.config.apiURI}/admin/storage/files?app_id=${this.config.appId}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return data;\n };\n\n /**\n * @deprecated. getDownloadUrl will be removed in the future.\n * Use `query` instead to query and fetch for valid urls\n *\n * db.useQuery({\n * $files: {\n * $: {\n * where: {\n * path: \"moop.png\"\n * }\n * }\n * }\n * })\n */\n getDownloadUrl = async (pathname: string): Promise<string> => {\n const { data } = await jsonFetch(\n `${this.config.apiURI}/admin/storage/signed-download-url?app_id=${this.config.appId}&filename=${encodeURIComponent(pathname)}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return data;\n };\n}\n\ntype CreateReadStreamOpts = {\n clientId?: string | null | undefined;\n streamId?: string | null | undefined;\n byteOffset?: number | null | undefined;\n ruleParams?: RuleParams | null | undefined;\n};\n\ntype CreateWriteStreamOpts = {\n clientId: string;\n /**\n * A function that takes a promise and ensures that the current program stays alive\n * until the promise is resolved.\n *\n * Useful in serverless environments to ensure the writer fully flushes before the\n * environment is shut down.\n *\n * @example\n * import { after } from 'next/server'\n * db.streams.createWriteStream({clientId, waitUntil: after})\n */\n waitUntil?: (promise: Promise<any>) => void | null | undefined;\n ruleParams?: RuleParams | null | undefined;\n};\n\n/**\n * Functions to manage streams.\n */\nclass Streams {\n #ensureInstantStream: () => InstantStream;\n\n constructor(ensureInstantStream: () => InstantStream) {\n this.#ensureInstantStream = ensureInstantStream;\n }\n\n /**\n * Creates a new ReadableStream for the given clientId.\n *\n * @example\n * const stream = db.streams.createReadStream({clientId: clientId})\n * for await (const chunk of stream) {\n * console.log(chunk);\n * }\n */\n createReadStream = (opts: CreateReadStreamOpts): ReadableStream<string> => {\n return this.#ensureInstantStream().createReadStream(opts);\n };\n\n /**\n * Creates a new WritableStream for the given clientId.\n *\n * @example\n * const writeStream = db.streams.createWriteStream({clientId: clientId})\n * const writer = writeStream.getWriter();\n * writer.write('Hello world');\n * writer.close();\n */\n createWriteStream = (\n opts: CreateWriteStreamOpts,\n ): InstantWritableStream<string> => {\n return this.#ensureInstantStream().createWriteStream(opts);\n };\n}\n\ntype AdminQueryOpts = {\n ruleParams?: RuleParams;\n fetchOpts?: RequestInit;\n};\n\ninterface Logger {\n info: (...args: any[]) => void;\n debug: (...args: any[]) => void;\n error: (...args: any[]) => void;\n}\n\nfunction createLogger(isEnabled: boolean): Logger {\n return {\n info: isEnabled ? (...args: any[]) => console.info(...args) : () => {},\n debug: isEnabled ? (...args: any[]) => console.debug(...args) : () => {},\n error: isEnabled ? (...args: any[]) => console.error(...args) : () => {},\n };\n}\n\n/**\n *\n * The first step: init your application!\n *\n * Visit https://instantdb.com/dash to get your `appId` and `adminToken` :)\n *\n * @example\n * const db = init({ appId: \"my-app-id\", adminToken: \"my-admin-token\" })\n */\nclass InstantAdminDatabase<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean = false,\n Config extends InstantConfig<Schema, UseDates> = InstantConfig<\n Schema,\n UseDates\n >,\n> {\n config: InstantConfigFilled<Schema, UseDates>;\n auth: Auth;\n storage: Storage;\n streams: Streams;\n rooms: Rooms<Schema>;\n impersonationOpts?: ImpersonationOpts;\n\n #sseConnection: SSEConnection | null = null;\n #sseBackoff = 0;\n #instantStream: InstantStream | null = null;\n #log: Logger;\n\n public tx = txInit<NonNullable<Schema>>();\n\n constructor(_config: Config) {\n this.config = instantConfigWithDefaults(_config);\n this.auth = new Auth(this.config);\n this.storage = new Storage(this.config, this.impersonationOpts);\n this.streams = new Streams(this.#ensureInstantStream.bind(this));\n this.rooms = new Rooms<Schema>(this.config);\n this.#log = createLogger(!!this.config.verbose);\n }\n\n /**\n * Sometimes you want to scope queries to a specific user.\n *\n * You can provide a user's auth token, email, or impersonate a guest.\n *\n * @see https://instantdb.com/docs/backend#impersonating-users\n * @example\n * await db.asUser({email: \"stopa@instantdb.com\"}).query({ goals: {} })\n */\n asUser = (\n opts: ImpersonationOpts,\n ): InstantAdminDatabase<Schema, UseDates, Config> => {\n const newClient = new InstantAdminDatabase<Schema, UseDates, Config>({\n ...(this.config as Config),\n });\n newClient.impersonationOpts = opts;\n newClient.storage = new Storage(this.config, opts);\n return newClient;\n };\n\n /**\n * Use this to query your data!\n *\n * @see https://instantdb.com/docs/instaql\n *\n * @example\n * // fetch all goals\n * await db.query({ goals: {} })\n *\n * // goals where the title is \"Get Fit\"\n * await db.query({ goals: { $: { where: { title: \"Get Fit\" } } } })\n *\n * // all goals, _alongside_ their todos\n * await db.query({ goals: { todos: {} } })\n */\n query = <Q extends ValidQuery<Q, Schema>>(\n query: Q,\n opts: AdminQueryOpts = {},\n ): Promise<InstaQLResponse<Schema, Q, UseDates>> => {\n if (query && opts && 'ruleParams' in opts) {\n query = { $$ruleParams: opts['ruleParams'], ...query };\n }\n\n if (!this.config.disableValidation) {\n validateQuery(query, this.config.schema);\n }\n\n const fetchOpts = opts.fetchOpts || {};\n const fetchOptsHeaders = fetchOpts['headers'] || {};\n return jsonFetch(\n `${this.config.apiURI}/admin/query?app_id=${this.config.appId}`,\n {\n ...fetchOpts,\n method: 'POST',\n headers: {\n ...fetchOptsHeaders,\n ...authorizedHeaders(this.config, this.impersonationOpts),\n },\n body: JSON.stringify({\n query: query,\n 'inference?': !!this.config.schema,\n }),\n },\n );\n };\n\n /**\n * Use this to to get a live view of your data!\n *\n * @see https://www.instantdb.com/docs/backend\n *\n * @example\n * // create a subscription to a query\n * const query = { goals: { $: { where: { title: \"Get Fit\" } } } }\n * const sub = db.subscribeQuery(query);\n *\n * // iterate through the results with an async iterator\n * for await (const payload of sub) {\n * if (payload.error) {\n * console.log(payload.error);\n * // Stop the subscription\n * sub.close();\n * } else {\n * console.log(payload.data);\n * }\n * }\n *\n * // Stop the subscription\n * sub.close();\n *\n * // Create a subscription with a callback\n * const sub = db.subscribeQuery(query, (payload) => {\n * if (payload.error) {\n * console.log(payload.error);\n * // Stop the subscription\n * sub.close();\n * } else {\n * console.log(payload.data);\n * }\n * });\n */\n subscribeQuery<Q extends ValidQuery<Q, Schema>>(\n query: Q,\n cb?: SubscribeQueryCallback<Schema, Q, UseDates>,\n opts: AdminQueryOpts = {},\n ): SubscribeQueryResponse<Schema, Q, UseDates> {\n if (query && opts && 'ruleParams' in opts) {\n query = { $$ruleParams: opts['ruleParams'], ...query };\n }\n\n if (!this.config.disableValidation) {\n validateQuery(query, this.config.schema);\n }\n\n const fetchOpts = opts.fetchOpts || {};\n const fetchOptsHeaders = fetchOpts['headers'] || {};\n\n const headers: HeadersInit = {\n ...fetchOptsHeaders,\n ...authorizedHeaders(this.config, this.impersonationOpts),\n };\n\n const inference = !!this.config.schema;\n\n return subscribe(query, cb, {\n headers,\n inference,\n apiURI: this.config.apiURI,\n });\n }\n\n /**\n * Use this to write data! You can create, update, delete, and link objects\n *\n * @see https://instantdb.com/docs/instaml\n *\n * @example\n * // Create a new object in the `goals` namespace\n * const goalId = id();\n * db.transact(db.tx.goals[goalId].update({title: \"Get fit\"}))\n *\n * // Update the title\n * db.transact(db.tx.goals[goalId].update({title: \"Get super fit\"}))\n *\n * // Delete it\n * db.transact(db.tx.goals[goalId].delete())\n *\n * // Or create an association:\n * todoId = id();\n * db.transact([\n * db.tx.todos[todoId].update({ title: 'Go on a run' }),\n * db.tx.goals[goalId].link({todos: todoId}),\n * ])\n */\n transact = (\n inputChunks: TransactionChunk<any, any> | TransactionChunk<any, any>[],\n ) => {\n if (!this.config.disableValidation) {\n validateTransactions(inputChunks, this.config.schema);\n }\n return jsonFetch(\n `${this.config.apiURI}/admin/transact?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify({\n steps: steps(inputChunks),\n 'throw-on-missing-attrs?': !!this.config.schema,\n }),\n },\n );\n };\n\n /**\n * Like `query`, but returns debugging information\n * for permissions checks along with the result.\n * Useful for inspecting the values returned by the permissions checks.\n * Note, this will return debug information for *all* entities\n * that match the query's `where` clauses.\n *\n * Requires a user/guest context to be set with `asUser`,\n * since permissions checks are user-specific.\n *\n * Accepts an optional configuration object with a `rules` key.\n * The provided rules will override the rules in the database for the query.\n *\n * @see https://instantdb.com/docs/instaql\n *\n * @example\n * await db.asUser({ guest: true }).debugQuery(\n * { goals: {} },\n * { rules: { goals: { allow: { read: \"auth.id != null\" } } }\n * )\n */\n debugQuery = async <Q extends ValidQuery<Q, Schema>>(\n query: Q,\n opts?: {\n rules?: any;\n ruleParams?: { [key: string]: any };\n ip?: string | null | undefined;\n origin?: string | null | undefined;\n },\n ): Promise<{\n result: InstaQLResponse<Schema, Q, UseDates>;\n checkResults: DebugCheckResult[];\n }> => {\n if (query && opts && 'ruleParams' in opts) {\n query = { $$ruleParams: opts['ruleParams'], ...query };\n }\n\n const body: any = { query, 'rules-override': opts?.rules };\n if (opts?.ip) {\n body['ip-override'] = opts.ip;\n }\n if (opts?.origin) {\n body['origin-override'] = opts.origin;\n }\n\n const response = await jsonFetch(\n `${this.config.apiURI}/admin/query_perms_check?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify(body),\n },\n );\n\n return {\n result: response.result,\n checkResults: response['check-results'],\n };\n };\n\n /**\n * Like `transact`, but does not write to the database.\n * Returns debugging information for permissions checks.\n * Useful for inspecting the values returned by the permissions checks.\n *\n * Requires a user/guest context to be set with `asUser`,\n * since permissions checks are user-specific.\n *\n * Accepts an optional configuration object with a `rules` key.\n * The provided rules will override the rules in the database for the duration of the transaction.\n *\n * @example\n * const goalId = id();\n * db.asUser({ guest: true }).debugTransact(\n * [db.tx.goals[goalId].update({title: \"Get fit\"})],\n * { rules: { goals: { allow: { update: \"auth.id != null\" } } }\n * )\n */\n debugTransact = (\n inputChunks: TransactionChunk<any, any> | TransactionChunk<any, any>[],\n opts?: {\n rules?: any;\n ip?: string | null | undefined;\n origin?: string | null | undefined;\n },\n ): Promise<DebugTransactResult> => {\n const body: any = {\n steps: steps(inputChunks),\n 'rules-override': opts?.rules,\n // @ts-expect-error because we're using a private API (for now)\n 'dangerously-commit-tx': opts?.__dangerouslyCommit,\n };\n\n if (opts?.ip) {\n body['ip-override'] = opts.ip;\n }\n if (opts?.origin) {\n body['origin-override'] = opts.origin;\n }\n\n return jsonFetch(\n `${this.config.apiURI}/admin/transact_perms_check?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify(body),\n },\n );\n };\n\n #setupSSEConnection() {\n if (this.#sseConnection) {\n this.#sseConnection.close();\n }\n const headers: HeadersInit = {\n ...authorizedHeaders(this.config, this.impersonationOpts),\n };\n\n const inference = !!this.config.schema;\n\n const ES = makeEventSourceWrapper({ headers, inference });\n const conn = new SSEConnection(\n ES,\n `${this.config.apiURI}/admin/sse?app_id=${this.config.appId}`,\n `${this.config.apiURI}/admin/sse/push?app_id=${this.config.appId}`,\n );\n conn.onopen = this.#onopen;\n conn.onmessage = this.#onmessage;\n conn.onclose = this.#onclose;\n conn.onerror = this.#onerror;\n this.#sseConnection = conn;\n return conn;\n }\n\n #ensureSSEConnection() {\n return this.#sseConnection || this.#setupSSEConnection();\n }\n\n #trySend(eventId, msg) {\n const sseConnection = this.#ensureSSEConnection();\n this.#log.info('[send]', eventId, msg, {\n isOpen: sseConnection.isOpen(),\n });\n if (sseConnection.isOpen()) {\n sseConnection.send({ 'client-event-id': eventId, ...msg });\n }\n }\n\n #setupInstantStream() {\n this.#ensureSSEConnection();\n const instantStream = new InstantStream({\n WStream: this.config.WritableStream || WritableStream,\n RStream: this.config.ReadableStream || ReadableStream,\n trySend: (eventId, msg) => {\n this.#trySend(eventId, msg);\n },\n log: this.#log,\n });\n\n this.#instantStream = instantStream;\n return instantStream;\n }\n\n #ensureInstantStream() {\n return this.#instantStream || this.#setupInstantStream();\n }\n\n #onopen = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][open]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this.#log.info('[socket][open]', e.target.id);\n this.#sseBackoff = 0;\n this.#instantStream?.onConnectionStatusChange('authenticated');\n };\n\n #onclose = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][close]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this.#log.info('[socket][close]', e.target.id);\n this.#instantStream?.onConnectionStatusChange('closed');\n if (this.#sseConnection) {\n this.#sseConnection = null;\n if (!this.#connectionIsIdle()) {\n // We didn't remove the sse connection, and we have streams we care about, so let's try again\n setTimeout(() => this.#ensureSSEConnection(), this.#sseBackoff);\n this.#sseBackoff = Math.min(15000, Math.max(this.#sseBackoff, 500) * 2);\n }\n }\n };\n\n #onerror = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][error]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this.#log.info('[socket][error]', e.target.id);\n\n this.#instantStream?.onConnectionStatusChange('closed');\n };\n\n #connectionIsIdle() {\n return !this.#instantStream || !this.#instantStream.hasActiveStreams();\n }\n\n #maybeShutdownConnection() {\n if (this.#sseConnection && this.#connectionIsIdle()) {\n const conn = this.#sseConnection;\n this.#log.info('cleaning up unused socket', conn.id);\n this.#sseConnection = null;\n conn.close();\n }\n }\n\n #onmessage = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][message]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n\n const msg = e.message;\n this.#log.info('[receive]', msg);\n switch (msg.op) {\n case 'start-stream-ok': {\n this.#instantStream?.onStartStreamOk(msg);\n break;\n }\n case 'stream-flushed': {\n this.#instantStream?.onStreamFlushed(msg);\n break;\n }\n case 'append-failed': {\n this.#instantStream?.onAppendFailed(msg);\n break;\n }\n case 'stream-append': {\n this.#instantStream?.onStreamAppend(msg);\n break;\n }\n\n case 'error': {\n switch (msg['original-event']?.op) {\n case 'start-stream':\n case 'append-stream':\n case 'subscribe-stream':\n case 'unsubscribe-stream': {\n this.#instantStream?.onRecieveError(msg);\n break;\n }\n }\n break;\n }\n }\n\n // Closes the connection if we don't have any items pending\n this.#maybeShutdownConnection();\n };\n}\n\nexport {\n init,\n init_experimental,\n id,\n tx,\n lookup,\n i,\n createInstantRouteHandler,\n\n // error\n InstantAPIError,\n\n // warnings\n setInstantWarningsEnabled,\n\n // types\n type Config,\n type ImpersonationOpts,\n type TransactionChunk,\n type DebugCheckResult,\n type InstantAdminDatabase,\n\n // core types\n type User,\n type InstaQLParams,\n type ValidQuery,\n type Query,\n\n // query types\n type QueryResponse,\n type InstaQLResponse,\n type InstantQuery,\n type InstantUnknownSchemaDef,\n type InstantQueryResult,\n type InstantSchema,\n type InstantSchemaDatabase,\n type IInstantDatabase,\n type InstantObject,\n type InstantEntity,\n type BackwardsCompatibleSchema,\n type InstaQLFields,\n type SubscribeQueryCallback,\n type SubscribeQueryResponse,\n type SubscribeQueryPayload,\n type SubscriptionReadyState,\n\n // schema types\n type AttrsDefs,\n type CardinalityKind,\n type DataAttrDef,\n type EntitiesDef,\n type EntitiesWithLinks,\n type EntityDef,\n type InstantGraph,\n type LinkAttrDef,\n type LinkDef,\n type LinksDef,\n type ResolveAttrs,\n type RoomsOf,\n type PresenceOf,\n type RoomsDef,\n type RoomHandle,\n type ValueTypes,\n type InstantSchemaDef,\n type InstantUnknownSchema,\n type InstaQLEntity,\n type InstaQLResult,\n type InstaQLEntitySubquery,\n type InstantRules,\n type CreateParams,\n type UpdateParams,\n type LinkParams,\n\n // storage types\n type FileOpts,\n type UploadFileResponse,\n type DeleteFileResponse,\n type DeleteManyFileResponse,\n\n // stream types\n type CreateReadStreamOpts,\n type CreateWriteStreamOpts,\n type InstantWritableStream,\n\n // error types\n type InstantIssue,\n};\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Readable } from 'node:stream';\nimport { validate as uuidValidate } from 'uuid';\n\nimport {\n tx,\n lookup,\n getOps,\n i,\n id,\n txInit,\n version as coreVersion,\n InstantAPIError,\n setInstantWarningsEnabled,\n type InstantIssue,\n type TransactionChunk,\n type AuthToken,\n\n // core types\n type User,\n type Query,\n\n // query types\n type QueryResponse,\n type InstaQLResponse,\n type InstaQLParams,\n type ValidQuery,\n type InstaQLFields,\n type InstantQuery,\n type InstantQueryResult,\n type InstantSchema,\n type InstantSchemaDatabase,\n type InstantObject,\n type InstantEntity,\n type BackwardsCompatibleSchema,\n type IInstantDatabase,\n\n // schema types\n type AttrsDefs,\n type CardinalityKind,\n type DataAttrDef,\n type EntitiesDef,\n type EntitiesWithLinks,\n type EntityDef,\n type InstantGraph,\n type LinkAttrDef,\n type LinkDef,\n type InstantUnknownSchemaDef,\n type LinksDef,\n type RoomsOf,\n type RoomsDef,\n type PresenceOf,\n type RoomHandle,\n type ResolveAttrs,\n type ValueTypes,\n type InstantSchemaDef,\n type InstantUnknownSchema,\n type InstaQLEntity,\n type InstaQLResult,\n type InstaQLEntitySubquery,\n type InstantRules,\n type UpdateParams,\n type CreateParams,\n type LinkParams,\n type RuleParams,\n type TopicsOf,\n type TopicOf,\n\n // storage types\n type FileOpts,\n type UploadFileResponse,\n type DeleteFileResponse,\n validateQuery,\n validateTransactions,\n createInstantRouteHandler,\n SSEConnection,\n InstantStream,\n EventSourceConstructor,\n EventSourceType,\n type WritableStreamCtor,\n type ReadableStreamCtor,\n InstantWritableStream,\n} from '@instantdb/core';\n\nimport version from './version.ts';\n\nimport {\n subscribe,\n SubscribeQueryCallback,\n SubscribeQueryResponse,\n SubscribeQueryPayload,\n SubscriptionReadyState,\n} from './subscribe.ts';\nimport { parseCookie } from 'cookie';\nimport { EventSource } from 'eventsource';\n\ntype DebugCheckResult = {\n /** The ID of the record. */\n id: string;\n /** The namespace/table of the record. */\n entity: string;\n /** The value of the record. */\n record: Record<string, any>;\n /** The result of evaluating the corresponding permissions rule for a record. */\n check: any;\n};\n\ntype Config = {\n appId: string;\n adminToken?: string;\n apiURI?: string;\n useDateObjects?: boolean;\n disableValidation?: boolean;\n};\n\nexport type InstantConfig<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean = false,\n> = {\n appId: string;\n adminToken?: string;\n apiURI?: string;\n schema?: Schema;\n useDateObjects: UseDates;\n disableValidation?: boolean;\n verbose?: boolean;\n WritableStream?: WritableStreamCtor;\n ReadableStream?: ReadableStreamCtor;\n};\n\ntype InstantConfigFilled<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean,\n> = InstantConfig<Schema, UseDates> & { apiURI: string };\n\ntype FilledConfig = Config & { apiURI: string };\n\ntype ImpersonationOpts =\n | { email: string }\n | { token: AuthToken }\n | { guest: boolean };\n\ntype DebugTransactResult = {\n 'tx-id': number;\n 'all-checks-ok?': boolean;\n};\n\nfunction configWithDefaults(config: Config): FilledConfig {\n const defaultConfig = {\n apiURI: 'https://api.instantdb.com',\n };\n const r = { ...defaultConfig, ...config };\n return r;\n}\n\nfunction instantConfigWithDefaults<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean,\n>(\n config: InstantConfig<Schema, UseDates>,\n): InstantConfigFilled<Schema, UseDates> {\n const defaultConfig = {\n apiURI: 'https://api.instantdb.com',\n };\n const r = { ...defaultConfig, ...config };\n return r;\n}\n\nfunction withImpersonation(\n headers: { [key: string]: string },\n opts: ImpersonationOpts,\n) {\n if ('email' in opts) {\n headers['as-email'] = opts.email;\n } else if ('token' in opts) {\n headers['as-token'] = opts.token;\n } else if ('guest' in opts) {\n headers['as-guest'] = 'true';\n }\n return headers;\n}\n\nfunction validateConfigAndImpersonation(\n config: FilledConfig,\n impersonationOpts: ImpersonationOpts | undefined,\n) {\n if (\n impersonationOpts &&\n ('token' in impersonationOpts || 'guest' in impersonationOpts)\n ) {\n // adminToken is not required for `token` or `guest` impersonation\n return;\n }\n if (config.adminToken) {\n // An adminToken is provided.\n return;\n }\n if (impersonationOpts && 'email' in impersonationOpts) {\n throw new Error(\n 'Admin token required. To impersonate users with an email you must pass `adminToken` to `init`.',\n );\n }\n throw new Error(\n 'Admin token required. To run this operation pass `adminToken` to `init`, or use `db.asUser`.',\n );\n}\n\nfunction authorizedHeaders(\n config: FilledConfig,\n impersonationOpts?: ImpersonationOpts,\n): Record<string, string> {\n validateConfigAndImpersonation(config, impersonationOpts);\n\n const { adminToken, appId } = config;\n const headers: Record<string, string> = {\n 'content-type': 'application/json',\n 'app-id': appId,\n };\n\n if (adminToken) {\n headers.authorization = `Bearer ${adminToken}`;\n }\n\n return impersonationOpts\n ? withImpersonation(headers, impersonationOpts)\n : headers;\n}\n\n// NextJS 13 and 14 cache fetch requests by default.\n//\n// Since adminDB.query uses fetch, this means that it would also cache by default.\n//\n// We don't want this behavior. `adminDB.query` should return the latest result by default.\n//\n// To get around this, we set an explicit `cache` header for NextJS 13 and 14.\n// This is no longer needed in NextJS 15 onwards, as the default is `no-store` again.\n// Once NextJS 13 and 14 are no longer common, we can remove this code.\nfunction isNextJSVersionThatCachesFetchByDefault() {\n return (\n // NextJS 13 onwards added a `__nextPatched` property to the fetch function\n fetch['__nextPatched'] &&\n // NextJS 15 onwards _also_ added a global `next-patch` symbol.\n !globalThis[Symbol.for('next-patch')]\n );\n}\n\nfunction getDefaultFetchOpts(): RequestInit {\n return isNextJSVersionThatCachesFetchByDefault() ? { cache: 'no-store' } : {};\n}\n\nasync function jsonReject(rejectFn, res) {\n const body = await res.text();\n try {\n const json = JSON.parse(body);\n return rejectFn(new InstantAPIError({ status: res.status, body: json }));\n } catch (_e) {\n return rejectFn(\n new InstantAPIError({\n status: res.status,\n body: { type: undefined, message: body },\n }),\n );\n }\n}\n\nasync function jsonFetch(\n input: RequestInfo,\n init: RequestInit | undefined,\n): Promise<any> {\n const defaultFetchOpts = getDefaultFetchOpts();\n const headers = {\n ...(init?.headers || {}),\n 'Instant-Admin-Version': version,\n 'Instant-Core-Version': coreVersion,\n };\n const res = await fetch(input, { ...defaultFetchOpts, ...init, headers });\n if (res.status === 200) {\n const json = await res.json();\n return Promise.resolve(json);\n }\n\n return jsonReject((x) => Promise.reject(x), res);\n}\n\nfunction makeEventSourceWrapper(opts: {\n headers: HeadersInit;\n inference: boolean;\n}): EventSourceConstructor {\n return class EventSourceWrapper {\n source: EventSource;\n static OPEN = EventSource.OPEN;\n static CONNECTING = EventSource.CONNECTING;\n static CLOSED = EventSource.CLOSED;\n readonly url: string;\n\n constructor(url: string) {\n this.url = url;\n this.source = this.#createEventSource(url);\n }\n\n get onopen(): EventSourceType['onopen'] {\n return this.source.onopen;\n }\n set onopen(fn: EventSourceType['onopen']) {\n this.source.onopen = fn;\n }\n\n get onmessage(): EventSourceType['onmessage'] {\n return this.source.onmessage;\n }\n set onmessage(fn: EventSourceType['onmessage']) {\n this.source.onmessage = fn;\n }\n\n get onerror(): EventSourceType['onerror'] {\n return this.source.onerror;\n }\n set onerror(fn: EventSourceType['onerror']) {\n this.source.onerror = fn;\n }\n\n public get readyState() {\n return this.source.readyState;\n }\n\n public close() {\n this.source.close();\n }\n\n #createEventSource(url: string): EventSource {\n const es = new EventSource(url, {\n fetch(input, init) {\n return fetch(input, {\n ...init,\n method: 'POST',\n headers: opts.headers,\n body: JSON.stringify({\n 'inference?': opts.inference,\n versions: {\n '@instantdb/admin': version,\n '@instantdb/core': coreVersion,\n },\n }),\n });\n },\n });\n return es;\n }\n };\n}\n\n/**\n *\n * The first step: init your application!\n *\n * Visit https://instantdb.com/dash to get your `appId` :)\n *\n * @example\n * import { init } from \"@instantdb/admin\"\n *\n * const db = init({\n * appId: process.env.INSTANT_APP_ID!,\n * adminToken: process.env.INSTANT_APP_ADMIN_TOKEN\n * })\n *\n * // You can also provide a schema for type safety and editor autocomplete!\n *\n * import { init } from \"@instantdb/admin\"\n * import schema from \"\"../instant.schema.ts\";\n *\n * const db = init({\n * appId: process.env.INSTANT_APP_ID!,\n * adminToken: process.env.INSTANT_APP_ADMIN_TOKEN,\n * schema,\n * })\n * // To learn more: https://instantdb.com/docs/modeling-data\n */\nfunction init<\n Schema extends InstantSchemaDef<any, any, any> = InstantUnknownSchema,\n UseDates extends boolean = false,\n>(\n // Allows config with missing `useDateObjects`, but keeps `UseDates`\n // as a non-nullable in the InstantConfig type.\n config: Omit<InstantConfig<Schema, UseDates>, 'useDateObjects'> & {\n useDateObjects?: UseDates;\n },\n): InstantAdminDatabase<Schema, UseDates, InstantConfig<Schema, UseDates>> {\n if (!config.appId || !uuidValidate(config.appId)) {\n console.warn(\n 'warning: Instant Admin DB must be initialized with a valid appId. Received: ' +\n JSON.stringify(config.appId),\n );\n }\n\n const configStrict = {\n ...config,\n appId: config.appId?.trim(),\n adminToken: config.adminToken?.trim(),\n useDateObjects: (config.useDateObjects ?? false) as UseDates,\n };\n\n return new InstantAdminDatabase<\n Schema,\n UseDates,\n InstantConfig<Schema, UseDates>\n >(configStrict);\n}\n\n/**\n * @deprecated\n * `init_experimental` is deprecated. You can replace it with `init`.\n *\n * @example\n *\n * // Before\n * import { init_experimental } from \"@instantdb/admin\"\n * const db = init_experimental({ ... });\n *\n * // After\n * import { init } from \"@instantdb/admin\"\n * const db = init({ ... });\n */\nconst init_experimental = init;\n\nfunction steps(inputChunks) {\n const chunks = Array.isArray(inputChunks) ? inputChunks : [inputChunks];\n return chunks.flatMap(getOps);\n}\n\ntype PresenceResult<Data> = {\n [peerId: string]: { data: Data; 'peer-id': string; user: User | null };\n};\n\nclass Rooms<Schema extends InstantSchemaDef<any, any, any>> {\n config: FilledConfig;\n\n constructor(config: FilledConfig) {\n this.config = config;\n }\n\n async getPresence<RoomType extends string & keyof RoomsOf<Schema>>(\n roomType: RoomType,\n roomId: string,\n ): Promise<PresenceResult<PresenceOf<Schema, RoomType>>> {\n const res = await jsonFetch(\n `${this.config.apiURI}/admin/rooms/presence?app_id=${this.config.appId}&room-type=${String(roomType)}&room-id=${roomId}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return res.sessions || {};\n }\n}\n\nclass Auth<Schema extends InstantSchemaDef<any, any, any>> {\n config: FilledConfig;\n\n constructor(config: FilledConfig) {\n this.config = config;\n this.createToken = this.createToken.bind(this);\n }\n\n /**\n * Generates a magic code for the user with the given email.\n * This is useful if you want to use your own email provider\n * to send magic codes.\n *\n * @example\n * // Generate a magic code\n * const { code } = await db.auth.generateMagicCode({ email })\n * // Send the magic code to the user with your own email provider\n * await customEmailProvider.sendMagicCode(email, code)\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n generateMagicCode = async (email: string): Promise<{ code: string }> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({ email }),\n },\n );\n };\n\n /**\n * Sends a magic code to the user with the given email.\n * This uses Instant's built-in email provider.\n *\n * @example\n * // Send an email to user with magic code\n * await db.auth.sendMagicCode({ email })\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n sendMagicCode = async (email: string): Promise<{ code: string }> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/send_magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({ email }),\n },\n );\n };\n\n /**\n * @deprecated Use {@link checkMagicCode} instead to get the `created` field\n * and support `extraFields`.\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n verifyMagicCode = async (email: string, code: string): Promise<User> => {\n const { user } = await jsonFetch(\n `${this.config.apiURI}/admin/verify_magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({ email, code }),\n },\n );\n return user;\n };\n\n /**\n * Verifies a magic code and returns the user along with whether\n * the user was newly created. Supports `extraFields` to set custom\n * `$users` properties at signup.\n *\n * @example\n * const { user, created } = await db.auth.checkMagicCode(\n * email,\n * code,\n * { extraFields: { nickname: 'ari' } },\n * );\n *\n * @see https://instantdb.com/docs/backend#custom-magic-codes\n */\n checkMagicCode = async (\n email: string,\n code: string,\n options?: { extraFields?: UpdateParams<Schema, '$users'> },\n ): Promise<{ user: User; created: boolean }> => {\n const res = await jsonFetch(\n `${this.config.apiURI}/admin/verify_magic_code?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({\n email,\n code,\n ...(options?.extraFields\n ? { 'extra-fields': options.extraFields }\n : {}),\n }),\n },\n );\n return { user: res.user, created: res.created };\n };\n\n /**\n * Creates a login token for the user with the given email.\n * If that user does not exist, we create one.\n *\n * This is often useful for writing custom auth flows.\n *\n * @example\n * app.post('/custom_sign_in', async (req, res) => {\n * // ... your custom flow for users\n * const token = await db.auth.createToken({ email })\n * return res.status(200).send({ token })\n * })\n *\n * @see https://instantdb.com/docs/backend#custom-auth\n */\n createToken(email: { email: string } | { id: string }): Promise<AuthToken>;\n\n /**\n *\n * @deprecated Passing an email string directly is deprecated.\n *\n * Use an object with the `email` key instead.\n *\n * @example\n * // Before\n * const token = await auth.createToken(email)\n * // After\n * const token = await auth.createToken({ email })\n */\n createToken(email: string): Promise<AuthToken>;\n\n async createToken(\n input: string | { email: string } | { id: string },\n ): Promise<AuthToken> {\n const body = typeof input === 'string' ? { email: input } : input;\n const ret: { user: { refresh_token: string } } = await jsonFetch(\n `${this.config.apiURI}/admin/refresh_tokens?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify(body),\n },\n );\n return ret.user.refresh_token;\n }\n\n /**\n * Verifies a given token and returns the associated user.\n *\n * This is often useful for writing custom endpoints, where you need\n * to authenticate users.\n *\n * @example\n * app.post('/custom_endpoint', async (req, res) => {\n * const user = await db.auth.verifyToken(req.headers['token'])\n * if (!user) {\n * return res.status(401).send('Uh oh, you are not authenticated')\n * }\n * // ...\n * })\n * @see https://instantdb.com/docs/backend#custom-endpoints\n */\n verifyToken = async (token: AuthToken): Promise<User> => {\n const res = await jsonFetch(\n `${this.config.apiURI}/runtime/auth/verify_refresh_token?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n 'app-id': this.config.appId,\n 'refresh-token': token,\n }),\n },\n );\n return res.user;\n };\n\n /**\n * Retrieves an app user by id, email, or refresh token.\n *\n * @example\n * try {\n * const user = await db.auth.getUser({ email })\n * console.log(\"Found user:\", user)\n * } catch (err) {\n * console.error(\"Failed to retrieve user:\", err.message);\n * }\n *\n * @see https://instantdb.com/docs/backend#retrieve-a-user\n */\n getUser = async (\n params: { email: string } | { id: string } | { refresh_token: string },\n ): Promise<Omit<User, 'refresh_token'>> => {\n const qs = Object.entries(params)\n .map(([k, v]) => `${k}=${encodeURIComponent(v)}`)\n .join('&');\n\n const response: { user: User } = await jsonFetch(\n `${this.config.apiURI}/admin/users?app_id=${this.config.appId}&${qs}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return response.user;\n };\n\n /**\n * Deletes an app user by id, email, or refresh token.\n *\n * NB: This _only_ deletes the user; it does not delete all user data.\n * You will need to handle this manually.\n *\n * @example\n * try {\n * const deletedUser = await db.auth.deleteUser({ email })\n * console.log(\"Deleted user:\", deletedUser)\n * } catch (err) {\n * console.error(\"Failed to delete user:\", err.message);\n * }\n *\n * @see https://instantdb.com/docs/backend#delete-a-user\n */\n deleteUser = async (\n params: { email: string } | { id: string } | { refresh_token: string },\n ): Promise<User> => {\n const qs = Object.entries(params).map(([k, v]) => `${k}=${v}`);\n const response: { deleted: User } = await jsonFetch(\n `${this.config.apiURI}/admin/users?app_id=${this.config.appId}&${qs}`,\n {\n method: 'DELETE',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return response.deleted;\n };\n\n /**\n * Signs out the user with the given email.\n * This invalidates any tokens associated with the user.\n * If the user is not found, an error will be thrown.\n *\n * @example\n * try {\n * await auth.signOut({ email: \"alyssa_p_hacker@instantdb.com\" });\n * console.log(\"Successfully signed out\");\n * } catch (err) {\n * console.error(\"Sign out failed:\", err.message);\n * }\n *\n * @see https://instantdb.com/docs/backend#sign-out\n */\n async signOut(\n params: { email: string } | { id: string } | { refresh_token: string },\n ): Promise<void>;\n\n /**\n * @deprecated Passing an email string directly is deprecated.\n * Use an object with the `email` key instead.\n *\n * @example\n * // Before\n * auth.signOut(email)\n *\n * // After\n * auth.signOut({ email })\n */\n async signOut(email: string): Promise<void>;\n\n async signOut(\n input:\n | string\n | { email: string }\n | { id: string }\n | { refresh_token: string },\n ): Promise<void> {\n // If input is a string, we assume it's an email.\n // This is because of backwards compatibility: we used to only\n // accept email strings. Eventually we can remove this\n const params = typeof input === 'string' ? { email: input } : input;\n const config = this.config;\n await jsonFetch(\n `${config.apiURI}/admin/sign_out?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(config),\n body: JSON.stringify(params),\n },\n );\n }\n\n /**\n * Get instant user from Request\n *\n * Reads cookies and gets a validated user\n * @param req The request containing a cookie synced with createInstantRouteHandler\n * @param opts Allow disabling validation of refresh token\n */\n getUserFromRequest = async (\n req: Request,\n opts?: { disableValidation?: boolean },\n ): Promise<User | null> => {\n const cookieHeader = req.headers.get('cookie') || '';\n\n const parsedCookie = parseCookie(cookieHeader);\n\n const cookieName = 'instant_user_' + this.config.appId;\n if (!parsedCookie[cookieName]) {\n return null;\n }\n const value = parsedCookie[cookieName];\n const user = JSON.parse(value);\n if (!user?.refresh_token) {\n return null;\n }\n if (opts?.disableValidation) {\n return user;\n }\n const verified = await this.verifyToken(user.refresh_token);\n return verified;\n };\n}\n\ntype StorageFile = {\n key: string;\n name: string;\n size: number;\n etag: string;\n last_modified: number;\n};\n\ntype DeleteManyFileResponse = {\n data: {\n ids: string[] | null;\n };\n};\n\nconst isNodeReadable = (v: any): v is Readable =>\n v &&\n typeof v === 'object' &&\n typeof v.pipe === 'function' &&\n typeof v.read === 'function';\n\nconst isWebReadable = (v: any): v is ReadableStream =>\n v && typeof v.getReader === 'function';\n\n/**\n * Functions to manage file storage.\n */\nclass Storage {\n config: FilledConfig;\n impersonationOpts?: ImpersonationOpts;\n\n constructor(config: FilledConfig, impersonationOpts?: ImpersonationOpts) {\n this.config = config;\n this.impersonationOpts = impersonationOpts;\n }\n\n /**\n * Uploads file at the provided path. Accepts a Buffer or a Readable stream.\n *\n * @see https://instantdb.com/docs/storage\n * @example\n * const buffer = fs.readFileSync('demo.png');\n * const isSuccess = await db.storage.uploadFile('photos/demo.png', buffer);\n */\n uploadFile = async (\n path: string,\n file: Buffer | Readable | ReadableStream | Uint8Array,\n metadata: FileOpts = {},\n ): Promise<UploadFileResponse> => {\n const headers = {\n ...authorizedHeaders(this.config, this.impersonationOpts),\n path,\n };\n if (metadata.contentDisposition) {\n headers['content-disposition'] = metadata.contentDisposition;\n }\n\n // headers.content-type will become \"undefined\" (string)\n // if not removed from the object\n delete headers['content-type'];\n\n if (metadata.contentType) {\n headers['content-type'] = metadata.contentType;\n }\n\n let duplex: 'half' | undefined;\n if (isNodeReadable(file)) {\n duplex = 'half'; // one-way stream\n }\n if (isNodeReadable(file) || isWebReadable(file)) {\n if (!metadata.fileSize) {\n throw new Error(\n 'fileSize is required in metadata when uploading streams',\n );\n }\n headers['content-length'] = metadata.fileSize.toString();\n }\n\n let options = {\n method: 'PUT',\n headers,\n body: file as unknown as BodyInit,\n ...(duplex && { duplex }),\n };\n\n return jsonFetch(\n `${this.config.apiURI}/admin/storage/upload?app_id=${this.config.appId}`,\n options,\n );\n };\n\n /**\n * Deletes a file by its path name (e.g. \"photos/demo.png\").\n *\n * @deprecated Use `db.transact` to delete files instead:\n * @example\n * // Delete by id\n * await db.transact(db.tx.$files[fileId].delete());\n *\n * // Delete by path\n * await db.transact(db.tx.$files[lookup('path', 'photos/demo.png')].delete());\n *\n * @see https://instantdb.com/docs/storage\n */\n delete = async (pathname: string): Promise<DeleteFileResponse> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/storage/files?app_id=${this.config.appId}&filename=${encodeURIComponent(\n pathname,\n )}`,\n {\n method: 'DELETE',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n },\n );\n };\n\n /**\n * Deletes multiple files by their path names.\n *\n * @deprecated Use `db.transact` to delete files instead:\n * @example\n * // Delete multiple files by path\n * const paths = ['images/1.png', 'images/2.png', 'images/3.png'];\n * await db.transact(paths.map(p => db.tx.$files[lookup('path', p)].delete()));\n *\n * @see https://instantdb.com/docs/storage\n */\n deleteMany = async (pathnames: string[]): Promise<DeleteManyFileResponse> => {\n return jsonFetch(\n `${this.config.apiURI}/admin/storage/files/delete?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify({ filenames: pathnames }),\n },\n );\n };\n\n /**\n * @deprecated. This method will be removed in the future. Use `uploadFile`\n * instead\n */\n upload = async (\n pathname: string,\n file: Buffer,\n metadata: FileOpts = {},\n ): Promise<boolean> => {\n const { data: presignedUrl } = await jsonFetch(\n `${this.config.apiURI}/admin/storage/signed-upload-url?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config),\n body: JSON.stringify({\n app_id: this.config.appId,\n filename: pathname,\n }),\n },\n );\n const headers = {};\n const contentType = metadata.contentType;\n if (contentType) {\n headers['Content-Type'] = contentType;\n }\n const { ok } = await fetch(presignedUrl, {\n method: 'PUT',\n body: file as unknown as BodyInit,\n headers,\n });\n\n return ok;\n };\n\n /**\n * @deprecated. This method will be removed in the future. Use `query` instead\n * @example\n * const files = await db.query({ $files: {}})\n */\n list = async (): Promise<StorageFile[]> => {\n const { data } = await jsonFetch(\n `${this.config.apiURI}/admin/storage/files?app_id=${this.config.appId}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return data;\n };\n\n /**\n * @deprecated. getDownloadUrl will be removed in the future.\n * Use `query` instead to query and fetch for valid urls\n *\n * db.useQuery({\n * $files: {\n * $: {\n * where: {\n * path: \"moop.png\"\n * }\n * }\n * }\n * })\n */\n getDownloadUrl = async (pathname: string): Promise<string> => {\n const { data } = await jsonFetch(\n `${this.config.apiURI}/admin/storage/signed-download-url?app_id=${this.config.appId}&filename=${encodeURIComponent(pathname)}`,\n {\n method: 'GET',\n headers: authorizedHeaders(this.config),\n },\n );\n\n return data;\n };\n}\n\ntype CreateReadStreamOpts = {\n clientId?: string | null | undefined;\n streamId?: string | null | undefined;\n byteOffset?: number | null | undefined;\n ruleParams?: RuleParams | null | undefined;\n};\n\ntype CreateWriteStreamOpts = {\n clientId: string;\n /**\n * A function that takes a promise and ensures that the current program stays alive\n * until the promise is resolved.\n *\n * Useful in serverless environments to ensure the writer fully flushes before the\n * environment is shut down.\n *\n * @example\n * import { after } from 'next/server'\n * db.streams.createWriteStream({clientId, waitUntil: after})\n */\n waitUntil?: (promise: Promise<any>) => void | null | undefined;\n ruleParams?: RuleParams | null | undefined;\n};\n\n/**\n * Functions to manage streams.\n */\nclass Streams {\n #ensureInstantStream: () => InstantStream;\n\n constructor(ensureInstantStream: () => InstantStream) {\n this.#ensureInstantStream = ensureInstantStream;\n }\n\n /**\n * Creates a new ReadableStream for the given clientId.\n *\n * @example\n * const stream = db.streams.createReadStream({clientId: clientId})\n * for await (const chunk of stream) {\n * console.log(chunk);\n * }\n */\n createReadStream = (opts: CreateReadStreamOpts): ReadableStream<string> => {\n return this.#ensureInstantStream().createReadStream(opts);\n };\n\n /**\n * Creates a new WritableStream for the given clientId.\n *\n * @example\n * const writeStream = db.streams.createWriteStream({clientId: clientId})\n * const writer = writeStream.getWriter();\n * writer.write('Hello world');\n * writer.close();\n */\n createWriteStream = (\n opts: CreateWriteStreamOpts,\n ): InstantWritableStream<string> => {\n return this.#ensureInstantStream().createWriteStream(opts);\n };\n}\n\ntype AdminQueryOpts = {\n ruleParams?: RuleParams;\n fetchOpts?: RequestInit;\n};\n\ninterface Logger {\n info: (...args: any[]) => void;\n debug: (...args: any[]) => void;\n error: (...args: any[]) => void;\n}\n\nfunction createLogger(isEnabled: boolean): Logger {\n return {\n info: isEnabled ? (...args: any[]) => console.info(...args) : () => {},\n debug: isEnabled ? (...args: any[]) => console.debug(...args) : () => {},\n error: isEnabled ? (...args: any[]) => console.error(...args) : () => {},\n };\n}\n\n/**\n *\n * The first step: init your application!\n *\n * Visit https://instantdb.com/dash to get your `appId` and `adminToken` :)\n *\n * @example\n * const db = init({ appId: \"my-app-id\", adminToken: \"my-admin-token\" })\n */\nclass InstantAdminDatabase<\n Schema extends InstantSchemaDef<any, any, any>,\n UseDates extends boolean = false,\n Config extends InstantConfig<Schema, UseDates> = InstantConfig<\n Schema,\n UseDates\n >,\n> {\n config: InstantConfigFilled<Schema, UseDates>;\n auth: Auth<Schema>;\n storage: Storage;\n streams: Streams;\n rooms: Rooms<Schema>;\n impersonationOpts?: ImpersonationOpts;\n\n #sseConnection: SSEConnection | null = null;\n #sseBackoff = 0;\n #instantStream: InstantStream | null = null;\n #log: Logger;\n\n public tx = txInit<NonNullable<Schema>>();\n\n constructor(_config: Config) {\n this.config = instantConfigWithDefaults(_config);\n this.auth = new Auth<Schema>(this.config);\n this.storage = new Storage(this.config, this.impersonationOpts);\n this.streams = new Streams(this.#ensureInstantStream.bind(this));\n this.rooms = new Rooms<Schema>(this.config);\n this.#log = createLogger(!!this.config.verbose);\n }\n\n /**\n * Sometimes you want to scope queries to a specific user.\n *\n * You can provide a user's auth token, email, or impersonate a guest.\n *\n * @see https://instantdb.com/docs/backend#impersonating-users\n * @example\n * await db.asUser({email: \"stopa@instantdb.com\"}).query({ goals: {} })\n */\n asUser = (\n opts: ImpersonationOpts,\n ): InstantAdminDatabase<Schema, UseDates, Config> => {\n const newClient = new InstantAdminDatabase<Schema, UseDates, Config>({\n ...(this.config as Config),\n });\n newClient.impersonationOpts = opts;\n newClient.storage = new Storage(this.config, opts);\n return newClient;\n };\n\n /**\n * Use this to query your data!\n *\n * @see https://instantdb.com/docs/instaql\n *\n * @example\n * // fetch all goals\n * await db.query({ goals: {} })\n *\n * // goals where the title is \"Get Fit\"\n * await db.query({ goals: { $: { where: { title: \"Get Fit\" } } } })\n *\n * // all goals, _alongside_ their todos\n * await db.query({ goals: { todos: {} } })\n */\n query = <Q extends ValidQuery<Q, Schema>>(\n query: Q,\n opts: AdminQueryOpts = {},\n ): Promise<InstaQLResponse<Schema, Q, UseDates>> => {\n if (query && opts && 'ruleParams' in opts) {\n query = { $$ruleParams: opts['ruleParams'], ...query };\n }\n\n if (!this.config.disableValidation) {\n validateQuery(query, this.config.schema);\n }\n\n const fetchOpts = opts.fetchOpts || {};\n const fetchOptsHeaders = fetchOpts['headers'] || {};\n return jsonFetch(\n `${this.config.apiURI}/admin/query?app_id=${this.config.appId}`,\n {\n ...fetchOpts,\n method: 'POST',\n headers: {\n ...fetchOptsHeaders,\n ...authorizedHeaders(this.config, this.impersonationOpts),\n },\n body: JSON.stringify({\n query: query,\n 'inference?': !!this.config.schema,\n }),\n },\n );\n };\n\n /**\n * Use this to to get a live view of your data!\n *\n * @see https://www.instantdb.com/docs/backend\n *\n * @example\n * // create a subscription to a query\n * const query = { goals: { $: { where: { title: \"Get Fit\" } } } }\n * const sub = db.subscribeQuery(query);\n *\n * // iterate through the results with an async iterator\n * for await (const payload of sub) {\n * if (payload.error) {\n * console.log(payload.error);\n * // Stop the subscription\n * sub.close();\n * } else {\n * console.log(payload.data);\n * }\n * }\n *\n * // Stop the subscription\n * sub.close();\n *\n * // Create a subscription with a callback\n * const sub = db.subscribeQuery(query, (payload) => {\n * if (payload.error) {\n * console.log(payload.error);\n * // Stop the subscription\n * sub.close();\n * } else {\n * console.log(payload.data);\n * }\n * });\n */\n subscribeQuery<Q extends ValidQuery<Q, Schema>>(\n query: Q,\n cb?: SubscribeQueryCallback<Schema, Q, UseDates>,\n opts: AdminQueryOpts = {},\n ): SubscribeQueryResponse<Schema, Q, UseDates> {\n if (query && opts && 'ruleParams' in opts) {\n query = { $$ruleParams: opts['ruleParams'], ...query };\n }\n\n if (!this.config.disableValidation) {\n validateQuery(query, this.config.schema);\n }\n\n const fetchOpts = opts.fetchOpts || {};\n const fetchOptsHeaders = fetchOpts['headers'] || {};\n\n const headers: HeadersInit = {\n ...fetchOptsHeaders,\n ...authorizedHeaders(this.config, this.impersonationOpts),\n };\n\n const inference = !!this.config.schema;\n\n return subscribe(query, cb, {\n headers,\n inference,\n apiURI: this.config.apiURI,\n });\n }\n\n /**\n * Use this to write data! You can create, update, delete, and link objects\n *\n * @see https://instantdb.com/docs/instaml\n *\n * @example\n * // Create a new object in the `goals` namespace\n * const goalId = id();\n * db.transact(db.tx.goals[goalId].update({title: \"Get fit\"}))\n *\n * // Update the title\n * db.transact(db.tx.goals[goalId].update({title: \"Get super fit\"}))\n *\n * // Delete it\n * db.transact(db.tx.goals[goalId].delete())\n *\n * // Or create an association:\n * todoId = id();\n * db.transact([\n * db.tx.todos[todoId].update({ title: 'Go on a run' }),\n * db.tx.goals[goalId].link({todos: todoId}),\n * ])\n */\n transact = (\n inputChunks: TransactionChunk<any, any> | TransactionChunk<any, any>[],\n ) => {\n if (!this.config.disableValidation) {\n validateTransactions(inputChunks, this.config.schema);\n }\n return jsonFetch(\n `${this.config.apiURI}/admin/transact?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify({\n steps: steps(inputChunks),\n 'throw-on-missing-attrs?': !!this.config.schema,\n }),\n },\n );\n };\n\n /**\n * Like `query`, but returns debugging information\n * for permissions checks along with the result.\n * Useful for inspecting the values returned by the permissions checks.\n * Note, this will return debug information for *all* entities\n * that match the query's `where` clauses.\n *\n * Requires a user/guest context to be set with `asUser`,\n * since permissions checks are user-specific.\n *\n * Accepts an optional configuration object with a `rules` key.\n * The provided rules will override the rules in the database for the query.\n *\n * @see https://instantdb.com/docs/instaql\n *\n * @example\n * await db.asUser({ guest: true }).debugQuery(\n * { goals: {} },\n * { rules: { goals: { allow: { read: \"auth.id != null\" } } }\n * )\n */\n debugQuery = async <Q extends ValidQuery<Q, Schema>>(\n query: Q,\n opts?: {\n rules?: any;\n ruleParams?: { [key: string]: any };\n ip?: string | null | undefined;\n origin?: string | null | undefined;\n },\n ): Promise<{\n result: InstaQLResponse<Schema, Q, UseDates>;\n checkResults: DebugCheckResult[];\n }> => {\n if (query && opts && 'ruleParams' in opts) {\n query = { $$ruleParams: opts['ruleParams'], ...query };\n }\n\n const body: any = { query, 'rules-override': opts?.rules };\n if (opts?.ip) {\n body['ip-override'] = opts.ip;\n }\n if (opts?.origin) {\n body['origin-override'] = opts.origin;\n }\n\n const response = await jsonFetch(\n `${this.config.apiURI}/admin/query_perms_check?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify(body),\n },\n );\n\n return {\n result: response.result,\n checkResults: response['check-results'],\n };\n };\n\n /**\n * Like `transact`, but does not write to the database.\n * Returns debugging information for permissions checks.\n * Useful for inspecting the values returned by the permissions checks.\n *\n * Requires a user/guest context to be set with `asUser`,\n * since permissions checks are user-specific.\n *\n * Accepts an optional configuration object with a `rules` key.\n * The provided rules will override the rules in the database for the duration of the transaction.\n *\n * @example\n * const goalId = id();\n * db.asUser({ guest: true }).debugTransact(\n * [db.tx.goals[goalId].update({title: \"Get fit\"})],\n * { rules: { goals: { allow: { update: \"auth.id != null\" } } }\n * )\n */\n debugTransact = (\n inputChunks: TransactionChunk<any, any> | TransactionChunk<any, any>[],\n opts?: {\n rules?: any;\n ip?: string | null | undefined;\n origin?: string | null | undefined;\n },\n ): Promise<DebugTransactResult> => {\n const body: any = {\n steps: steps(inputChunks),\n 'rules-override': opts?.rules,\n // @ts-expect-error because we're using a private API (for now)\n 'dangerously-commit-tx': opts?.__dangerouslyCommit,\n };\n\n if (opts?.ip) {\n body['ip-override'] = opts.ip;\n }\n if (opts?.origin) {\n body['origin-override'] = opts.origin;\n }\n\n return jsonFetch(\n `${this.config.apiURI}/admin/transact_perms_check?app_id=${this.config.appId}`,\n {\n method: 'POST',\n headers: authorizedHeaders(this.config, this.impersonationOpts),\n body: JSON.stringify(body),\n },\n );\n };\n\n #setupSSEConnection() {\n if (this.#sseConnection) {\n this.#sseConnection.close();\n }\n const headers: HeadersInit = {\n ...authorizedHeaders(this.config, this.impersonationOpts),\n };\n\n const inference = !!this.config.schema;\n\n const ES = makeEventSourceWrapper({ headers, inference });\n const conn = new SSEConnection(\n ES,\n `${this.config.apiURI}/admin/sse?app_id=${this.config.appId}`,\n `${this.config.apiURI}/admin/sse/push?app_id=${this.config.appId}`,\n );\n conn.onopen = this.#onopen;\n conn.onmessage = this.#onmessage;\n conn.onclose = this.#onclose;\n conn.onerror = this.#onerror;\n this.#sseConnection = conn;\n return conn;\n }\n\n #ensureSSEConnection() {\n return this.#sseConnection || this.#setupSSEConnection();\n }\n\n #trySend(eventId, msg) {\n const sseConnection = this.#ensureSSEConnection();\n this.#log.info('[send]', eventId, msg, {\n isOpen: sseConnection.isOpen(),\n });\n if (sseConnection.isOpen()) {\n sseConnection.send({ 'client-event-id': eventId, ...msg });\n }\n }\n\n #setupInstantStream() {\n this.#ensureSSEConnection();\n const instantStream = new InstantStream({\n WStream: this.config.WritableStream || WritableStream,\n RStream: this.config.ReadableStream || ReadableStream,\n trySend: (eventId, msg) => {\n this.#trySend(eventId, msg);\n },\n log: this.#log,\n });\n\n this.#instantStream = instantStream;\n return instantStream;\n }\n\n #ensureInstantStream() {\n return this.#instantStream || this.#setupInstantStream();\n }\n\n #onopen = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][open]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this.#log.info('[socket][open]', e.target.id);\n this.#sseBackoff = 0;\n this.#instantStream?.onConnectionStatusChange('authenticated');\n };\n\n #onclose = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][close]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this.#log.info('[socket][close]', e.target.id);\n this.#instantStream?.onConnectionStatusChange('closed');\n if (this.#sseConnection) {\n this.#sseConnection = null;\n if (!this.#connectionIsIdle()) {\n // We didn't remove the sse connection, and we have streams we care about, so let's try again\n setTimeout(() => this.#ensureSSEConnection(), this.#sseBackoff);\n this.#sseBackoff = Math.min(15000, Math.max(this.#sseBackoff, 500) * 2);\n }\n }\n };\n\n #onerror = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][error]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n this.#log.info('[socket][error]', e.target.id);\n\n this.#instantStream?.onConnectionStatusChange('closed');\n };\n\n #connectionIsIdle() {\n return !this.#instantStream || !this.#instantStream.hasActiveStreams();\n }\n\n #maybeShutdownConnection() {\n if (this.#sseConnection && this.#connectionIsIdle()) {\n const conn = this.#sseConnection;\n this.#log.info('cleaning up unused socket', conn.id);\n this.#sseConnection = null;\n conn.close();\n }\n }\n\n #onmessage = (e) => {\n if (e.target !== this.#sseConnection) {\n this.#log.info(\n '[socket][message]',\n e.target.id,\n 'skip; this is no longer the current transport',\n );\n return;\n }\n\n const msg = e.message;\n this.#log.info('[receive]', msg);\n switch (msg.op) {\n case 'start-stream-ok': {\n this.#instantStream?.onStartStreamOk(msg);\n break;\n }\n case 'stream-flushed': {\n this.#instantStream?.onStreamFlushed(msg);\n break;\n }\n case 'append-failed': {\n this.#instantStream?.onAppendFailed(msg);\n break;\n }\n case 'stream-append': {\n this.#instantStream?.onStreamAppend(msg);\n break;\n }\n\n case 'error': {\n switch (msg['original-event']?.op) {\n case 'start-stream':\n case 'append-stream':\n case 'subscribe-stream':\n case 'unsubscribe-stream': {\n this.#instantStream?.onRecieveError(msg);\n break;\n }\n }\n break;\n }\n }\n\n // Closes the connection if we don't have any items pending\n this.#maybeShutdownConnection();\n };\n}\n\nexport {\n init,\n init_experimental,\n id,\n tx,\n lookup,\n i,\n createInstantRouteHandler,\n\n // error\n InstantAPIError,\n\n // warnings\n setInstantWarningsEnabled,\n\n // types\n type Config,\n type ImpersonationOpts,\n type TransactionChunk,\n type DebugCheckResult,\n type InstantAdminDatabase,\n\n // core types\n type User,\n type InstaQLParams,\n type ValidQuery,\n type Query,\n\n // query types\n type QueryResponse,\n type InstaQLResponse,\n type InstantQuery,\n type InstantUnknownSchemaDef,\n type InstantQueryResult,\n type InstantSchema,\n type InstantSchemaDatabase,\n type IInstantDatabase,\n type InstantObject,\n type InstantEntity,\n type BackwardsCompatibleSchema,\n type InstaQLFields,\n type SubscribeQueryCallback,\n type SubscribeQueryResponse,\n type SubscribeQueryPayload,\n type SubscriptionReadyState,\n\n // schema types\n type AttrsDefs,\n type CardinalityKind,\n type DataAttrDef,\n type EntitiesDef,\n type EntitiesWithLinks,\n type EntityDef,\n type InstantGraph,\n type LinkAttrDef,\n type LinkDef,\n type LinksDef,\n type ResolveAttrs,\n type RoomsOf,\n type PresenceOf,\n type RoomsDef,\n type RoomHandle,\n type ValueTypes,\n type InstantSchemaDef,\n type InstantUnknownSchema,\n type InstaQLEntity,\n type InstaQLResult,\n type InstaQLEntitySubquery,\n type InstantRules,\n type CreateParams,\n type UpdateParams,\n type LinkParams,\n\n // storage types\n type FileOpts,\n type UploadFileResponse,\n type DeleteFileResponse,\n type DeleteManyFileResponse,\n\n // stream types\n type CreateReadStreamOpts,\n type CreateWriteStreamOpts,\n type InstantWritableStream,\n\n // error types\n type InstantIssue,\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instantdb/admin",
3
- "version": "0.22.167-branch-cli-query-docs.23362831232.1",
3
+ "version": "0.22.167-branch-extra-fields.23364908069.1",
4
4
  "description": "Admin SDK for Instant DB",
5
5
  "type": "module",
6
6
  "homepage": "https://github.com/instantdb/instant/tree/main/client/packages/admin",
@@ -50,8 +50,8 @@
50
50
  "cookie": "^1.1.1",
51
51
  "eventsource": "^4.0.0",
52
52
  "uuid": "^11.1.0",
53
- "@instantdb/core": "0.22.167-branch-cli-query-docs.23362831232.1",
54
- "@instantdb/version": "0.22.167-branch-cli-query-docs.23362831232.1"
53
+ "@instantdb/core": "0.22.167-branch-extra-fields.23364908069.1",
54
+ "@instantdb/version": "0.22.167-branch-extra-fields.23364908069.1"
55
55
  },
56
56
  "scripts": {
57
57
  "test": "vitest",
package/src/index.ts CHANGED
@@ -453,7 +453,7 @@ class Rooms<Schema extends InstantSchemaDef<any, any, any>> {
453
453
  }
454
454
  }
455
455
 
456
- class Auth {
456
+ class Auth<Schema extends InstantSchemaDef<any, any, any>> {
457
457
  config: FilledConfig;
458
458
 
459
459
  constructor(config: FilledConfig) {
@@ -507,11 +507,8 @@ class Auth {
507
507
  };
508
508
 
509
509
  /**
510
- * Verifies a magic code for the user with the given email.
511
- *
512
- * @example
513
- * const user = await db.auth.verifyMagicCode({ email, code })
514
- * console.log("Verified user:", user)
510
+ * @deprecated Use {@link checkMagicCode} instead to get the `created` field
511
+ * and support `extraFields`.
515
512
  *
516
513
  * @see https://instantdb.com/docs/backend#custom-magic-codes
517
514
  */
@@ -527,6 +524,42 @@ class Auth {
527
524
  return user;
528
525
  };
529
526
 
527
+ /**
528
+ * Verifies a magic code and returns the user along with whether
529
+ * the user was newly created. Supports `extraFields` to set custom
530
+ * `$users` properties at signup.
531
+ *
532
+ * @example
533
+ * const { user, created } = await db.auth.checkMagicCode(
534
+ * email,
535
+ * code,
536
+ * { extraFields: { nickname: 'ari' } },
537
+ * );
538
+ *
539
+ * @see https://instantdb.com/docs/backend#custom-magic-codes
540
+ */
541
+ checkMagicCode = async (
542
+ email: string,
543
+ code: string,
544
+ options?: { extraFields?: UpdateParams<Schema, '$users'> },
545
+ ): Promise<{ user: User; created: boolean }> => {
546
+ const res = await jsonFetch(
547
+ `${this.config.apiURI}/admin/verify_magic_code?app_id=${this.config.appId}`,
548
+ {
549
+ method: 'POST',
550
+ headers: authorizedHeaders(this.config),
551
+ body: JSON.stringify({
552
+ email,
553
+ code,
554
+ ...(options?.extraFields
555
+ ? { 'extra-fields': options.extraFields }
556
+ : {}),
557
+ }),
558
+ },
559
+ );
560
+ return { user: res.user, created: res.created };
561
+ };
562
+
530
563
  /**
531
564
  * Creates a login token for the user with the given email.
532
565
  * If that user does not exist, we create one.
@@ -1067,7 +1100,7 @@ class InstantAdminDatabase<
1067
1100
  >,
1068
1101
  > {
1069
1102
  config: InstantConfigFilled<Schema, UseDates>;
1070
- auth: Auth;
1103
+ auth: Auth<Schema>;
1071
1104
  storage: Storage;
1072
1105
  streams: Streams;
1073
1106
  rooms: Rooms<Schema>;
@@ -1082,7 +1115,7 @@ class InstantAdminDatabase<
1082
1115
 
1083
1116
  constructor(_config: Config) {
1084
1117
  this.config = instantConfigWithDefaults(_config);
1085
- this.auth = new Auth(this.config);
1118
+ this.auth = new Auth<Schema>(this.config);
1086
1119
  this.storage = new Storage(this.config, this.impersonationOpts);
1087
1120
  this.streams = new Streams(this.#ensureInstantStream.bind(this));
1088
1121
  this.rooms = new Rooms<Schema>(this.config);