instant-cli 1.0.48 → 1.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
 
2
- > instant-cli@1.0.48 build /home/runner/work/instant/instant/client/packages/cli
2
+ > instant-cli@1.0.49 build /home/runner/work/instant/instant/client/packages/cli
3
3
  > rm -rf dist; tsc -p tsconfig.build.json
4
4
 
@@ -4,5 +4,5 @@ import { InstantHttpAuthed } from '../../../lib/http.ts';
4
4
  export declare const authEmailPushCmd: (opts: {
5
5
  app?: string | undefined;
6
6
  file?: string | undefined;
7
- }) => Effect.Effect<void, import("../../../errors.ts").BadArgsError | import("../../../lib/http.ts").InstantHttpError | import("effect/Cause").TimeoutException | import("@effect/platform/HttpClientError").RequestError | import("effect/ParseResult").ParseError | import("@effect/platform/HttpClientError").ResponseError | import("@effect/platform/HttpBody").HttpBodyError | import("../../../lib/email.ts").NoEmailFileFound, InstantHttpAuthed | CurrentApp>;
7
+ }) => Effect.Effect<void, import("../../../errors.ts").BadArgsError | import("../../../lib/http.ts").InstantHttpError | import("effect/Cause").TimeoutException | import("@effect/platform/HttpClientError").RequestError | import("effect/ParseResult").ParseError | import("@effect/platform/HttpClientError").ResponseError | import("@effect/platform/HttpBody").HttpBodyError | import("../../../lib/email.ts").NoEmailFileFound, import("../../../lib/http.ts").InstantHttp | InstantHttpAuthed | CurrentApp>;
8
8
  //# sourceMappingURL=push.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/email/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAOxC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAe,MAAM,sBAAsB,CAAC;AAatE,eAAO,MAAM,gBAAgB;;;scA+D3B,CAAC"}
1
+ {"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/email/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAOxC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAe,MAAM,sBAAsB,CAAC;AActE,eAAO,MAAM,gBAAgB;;;mfAuE3B,CAAC"}
@@ -6,12 +6,18 @@ import { HttpClient, HttpClientRequest, HttpClientResponse, } from '@effect/plat
6
6
  import boxen from 'boxen';
7
7
  import { formatSenderVerificationDnsRecords, getEmailTemplateStatus, } from "./status.js";
8
8
  import chalk from 'chalk';
9
+ import { getDefaultEmailTemplate } from "./pull.js";
9
10
  export const authEmailPushCmd = Effect.fn(function* (opts) {
10
11
  const emailConfig = yield* readEmailConfig(opts.file);
11
12
  const { appId } = yield* CurrentApp;
12
13
  const http = yield* InstantHttpAuthed;
13
14
  const authEmail = emailConfig.authEmail;
14
- const senderEmail = authEmail.senderEmail;
15
+ const defTemplate = yield* getDefaultEmailTemplate;
16
+ const senderEmail =
17
+ // If the value in the code is the default instant-owned email, remove it from the request
18
+ authEmail.senderEmail === defTemplate.senderEmail
19
+ ? undefined
20
+ : emailConfig.authEmail.senderEmail;
15
21
  yield* http
16
22
  .pipe(withCommand('auth email push'), HttpClient.mapRequestInputEffect(HttpClientRequest.bodyJson({
17
23
  'email-type': 'magic-code',
@@ -41,7 +47,8 @@ export const authEmailPushCmd = Effect.fn(function* (opts) {
41
47
  padding: { right: 1, left: 1 },
42
48
  }));
43
49
  }
44
- if (emailConfig.authEmail.senderEmail) {
50
+ if (emailConfig.authEmail.senderEmail &&
51
+ emailConfig.authEmail.senderEmail !== defTemplate.senderEmail) {
45
52
  const verification = yield* getVerification;
46
53
  if (verification.verification) {
47
54
  yield* Effect.log(formatSenderVerificationDnsRecords(verification.verification));
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../../src/commands/auth/email/push.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect, Schema } from 'effect';\nimport type { authEmailPushDef, OptsFromCommand } from '../../../index.ts';\nimport {\n getVerification,\n readEmailConfig,\n sendSenderVerification,\n} from '../../../lib/email.ts';\nimport { CurrentApp } from '../../../context/currentApp.ts';\nimport { InstantHttpAuthed, withCommand } from '../../../lib/http.ts';\nimport {\n HttpClient,\n HttpClientRequest,\n HttpClientResponse,\n} from '@effect/platform';\nimport boxen from 'boxen';\nimport {\n formatSenderVerificationDnsRecords,\n getEmailTemplateStatus,\n} from './status.ts';\nimport chalk from 'chalk';\n\nexport const authEmailPushCmd = Effect.fn(function* (\n opts: OptsFromCommand<typeof authEmailPushDef>,\n) {\n const emailConfig = yield* readEmailConfig(opts.file);\n const { appId } = yield* CurrentApp;\n const http = yield* InstantHttpAuthed;\n const authEmail = emailConfig.authEmail;\n const senderEmail = authEmail.senderEmail;\n\n yield* http\n .pipe(\n withCommand('auth email push'),\n HttpClient.mapRequestInputEffect(\n HttpClientRequest.bodyJson({\n 'email-type': 'magic-code',\n subject: authEmail.subject,\n body: authEmail.body,\n 'sender-email': senderEmail,\n 'sender-name': authEmail.senderName,\n }),\n ),\n )\n .post(`/dash/apps/${appId}/email_templates`)\n .pipe(Effect.flatMap(HttpClientResponse.schemaBodyJson(Schema.Any)));\n\n const info = yield* getEmailTemplateStatus;\n\n yield* Effect.log(\n [\n chalk.green('Email template saved!'),\n '',\n chalk.bold('Pushed fields:'),\n ` Email type: ${chalk.cyan('magic-code')}`,\n ` Subject: ${chalk.cyan(authEmail.subject)}`,\n ` Sender name: ${chalk.cyan(authEmail.senderName)}`,\n ` Sender email: ${chalk.cyan(senderEmail || '(default)')}`,\n ` Body: ${chalk.cyan(`${authEmail.body.length} characters`)}`,\n ].join('\\n'),\n );\n\n // Check if verification email needs to be sent\n\n if (info?.verification_verified === false) {\n yield* sendSenderVerification;\n yield* Effect.log(\n boxen(\n \"We've sent a confirmation email containing a six digit code to verify the sender email address.\\nUse instant-cli auth email verify <code> to complete verification.\",\n {\n borderColor: 'yellow',\n padding: { right: 1, left: 1 },\n },\n ),\n );\n }\n\n if (emailConfig.authEmail.senderEmail) {\n const verification = yield* getVerification;\n if (verification.verification) {\n yield* Effect.log(\n formatSenderVerificationDnsRecords(verification.verification),\n );\n }\n }\n});\n"]}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../../src/commands/auth/email/push.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect, Schema } from 'effect';\nimport type { authEmailPushDef, OptsFromCommand } from '../../../index.ts';\nimport {\n getVerification,\n readEmailConfig,\n sendSenderVerification,\n} from '../../../lib/email.ts';\nimport { CurrentApp } from '../../../context/currentApp.ts';\nimport { InstantHttpAuthed, withCommand } from '../../../lib/http.ts';\nimport {\n HttpClient,\n HttpClientRequest,\n HttpClientResponse,\n} from '@effect/platform';\nimport boxen from 'boxen';\nimport {\n formatSenderVerificationDnsRecords,\n getEmailTemplateStatus,\n} from './status.ts';\nimport chalk from 'chalk';\nimport { getDefaultEmailTemplate } from './pull.ts';\n\nexport const authEmailPushCmd = Effect.fn(function* (\n opts: OptsFromCommand<typeof authEmailPushDef>,\n) {\n const emailConfig = yield* readEmailConfig(opts.file);\n const { appId } = yield* CurrentApp;\n const http = yield* InstantHttpAuthed;\n const authEmail = emailConfig.authEmail;\n const defTemplate = yield* getDefaultEmailTemplate;\n const senderEmail =\n // If the value in the code is the default instant-owned email, remove it from the request\n authEmail.senderEmail === defTemplate.senderEmail\n ? undefined\n : emailConfig.authEmail.senderEmail;\n\n yield* http\n .pipe(\n withCommand('auth email push'),\n HttpClient.mapRequestInputEffect(\n HttpClientRequest.bodyJson({\n 'email-type': 'magic-code',\n subject: authEmail.subject,\n body: authEmail.body,\n 'sender-email': senderEmail,\n 'sender-name': authEmail.senderName,\n }),\n ),\n )\n .post(`/dash/apps/${appId}/email_templates`)\n .pipe(Effect.flatMap(HttpClientResponse.schemaBodyJson(Schema.Any)));\n\n const info = yield* getEmailTemplateStatus;\n\n yield* Effect.log(\n [\n chalk.green('Email template saved!'),\n '',\n chalk.bold('Pushed fields:'),\n ` Email type: ${chalk.cyan('magic-code')}`,\n ` Subject: ${chalk.cyan(authEmail.subject)}`,\n ` Sender name: ${chalk.cyan(authEmail.senderName)}`,\n ` Sender email: ${chalk.cyan(senderEmail || '(default)')}`,\n ` Body: ${chalk.cyan(`${authEmail.body.length} characters`)}`,\n ].join('\\n'),\n );\n\n // Check if verification email needs to be sent\n\n if (info?.verification_verified === false) {\n yield* sendSenderVerification;\n yield* Effect.log(\n boxen(\n \"We've sent a confirmation email containing a six digit code to verify the sender email address.\\nUse instant-cli auth email verify <code> to complete verification.\",\n {\n borderColor: 'yellow',\n padding: { right: 1, left: 1 },\n },\n ),\n );\n }\n\n if (\n emailConfig.authEmail.senderEmail &&\n emailConfig.authEmail.senderEmail !== defTemplate.senderEmail\n ) {\n const verification = yield* getVerification;\n if (verification.verification) {\n yield* Effect.log(\n formatSenderVerificationDnsRecords(verification.verification),\n );\n }\n }\n});\n"]}
@@ -10,7 +10,7 @@ export declare const formatSenderVerificationDnsRecords: (verification: {
10
10
  }) => string;
11
11
  export declare const EmailTemplateInfoSchema: Schema.Struct<{
12
12
  id: typeof Schema.String;
13
- email: Schema.optional<typeof Schema.String>;
13
+ email: Schema.NullishOr<typeof Schema.String>;
14
14
  name: typeof Schema.String;
15
15
  sender_id: Schema.NullishOr<typeof Schema.String>;
16
16
  app_id: typeof Schema.String;
@@ -25,7 +25,7 @@ export type EmailTemplateInfo = typeof EmailTemplateInfoSchema.Type;
25
25
  export declare const EmailTemplateSchema: Schema.Union<[Schema.Struct<{
26
26
  info: Schema.NullishOr<Schema.Struct<{
27
27
  id: typeof Schema.String;
28
- email: Schema.optional<typeof Schema.String>;
28
+ email: Schema.NullishOr<typeof Schema.String>;
29
29
  name: typeof Schema.String;
30
30
  sender_id: Schema.NullishOr<typeof Schema.String>;
31
31
  app_id: typeof Schema.String;
@@ -41,7 +41,7 @@ export declare const getEmailTemplateStatus: Effect.Effect<{
41
41
  readonly id: string;
42
42
  readonly body: string;
43
43
  readonly name: string;
44
- readonly email?: string | undefined;
44
+ readonly email: string | null | undefined;
45
45
  readonly subject: string;
46
46
  readonly sender_id: string | null | undefined;
47
47
  readonly app_id: string;
@@ -28,7 +28,7 @@ export const formatSenderVerificationDnsRecords = (verification) => boxen([
28
28
  });
29
29
  export const EmailTemplateInfoSchema = Schema.Struct({
30
30
  id: Schema.String,
31
- email: Schema.String.pipe(Schema.optional),
31
+ email: Schema.String.pipe(Schema.NullishOr),
32
32
  name: Schema.String,
33
33
  sender_id: Schema.String.pipe(Schema.NullishOr),
34
34
  app_id: Schema.String,
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/commands/auth/email/status.ts"],"names":[],"mappings":"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","sourcesContent":["import boxen from 'boxen';\nimport chalk from 'chalk';\nimport { Effect, Option, Schema } from 'effect';\nimport { CurrentApp } from '../../../context/currentApp.ts';\nimport type { authEmailStatusDef, OptsFromCommand } from '../../../index.ts';\nimport { InstantHttpAuthed } from '../../../lib/http.ts';\nimport { HttpClientResponse } from '@effect/platform';\nimport { getVerification } from '../../../lib/email.ts';\n\nconst formatValue = (value: string | number | null | undefined) =>\n value ?? 'n/a';\n\nconst formatVerified = (value: boolean | null | undefined) => {\n if (value === true) {\n return chalk.green('verified');\n }\n if (value === false) {\n return chalk.yellow('pending');\n }\n return 'n/a';\n};\n\nconst formatDnsRecord = (type: string, name: string, value: string) =>\n [chalk.bold(type), `Name: ${name}`, `Value: ${value}`].join('\\n');\n\nexport const formatSenderVerificationDnsRecords = (verification: {\n Confirmed: boolean;\n DKIMPendingHost: string;\n DKIMPendingTextValue: string;\n ReturnPathDomain: string;\n ReturnPathDomainCNAMEValue: string;\n}) =>\n boxen(\n [\n chalk.bold('Add these DNS records to verify your sender email:'),\n '',\n formatDnsRecord(\n 'TXT',\n verification.DKIMPendingHost,\n verification.DKIMPendingTextValue,\n ),\n '',\n formatDnsRecord(\n 'CNAME',\n verification.ReturnPathDomain,\n verification.ReturnPathDomainCNAMEValue,\n ),\n ].join('\\n'),\n {\n borderColor: verification.Confirmed ? 'green' : 'yellow',\n padding: { right: 1, left: 1 },\n },\n );\n\nexport const EmailTemplateInfoSchema = Schema.Struct({\n id: Schema.String,\n email: Schema.String.pipe(Schema.optional),\n name: Schema.String,\n sender_id: Schema.String.pipe(Schema.NullishOr),\n app_id: Schema.String,\n postmark_id: Schema.Number.pipe(Schema.NullishOr),\n verification_verified: Schema.Boolean.pipe(Schema.NullishOr),\n verification_id: Schema.String.pipe(Schema.NullishOr),\n email_type: Schema.String,\n body: Schema.String,\n subject: Schema.String,\n});\n\nexport type EmailTemplateInfo = typeof EmailTemplateInfoSchema.Type;\n\nexport const EmailTemplateSchema = Schema.Union(\n Schema.Struct({\n info: EmailTemplateInfoSchema.pipe(Schema.NullishOr),\n }),\n Schema.Null,\n);\n\nexport const getEmailTemplateStatus = Effect.gen(function* () {\n const { appId } = yield* CurrentApp;\n const http = yield* InstantHttpAuthed;\n\n const app = yield* http\n .get(`/dash/apps/${appId}/email_status`)\n .pipe(\n Effect.flatMap(HttpClientResponse.schemaBodyJson(EmailTemplateSchema)),\n );\n return app?.info;\n});\n\nexport const emailStatusCmd = Effect.fn(function* (\n opts: OptsFromCommand<typeof authEmailStatusDef>,\n) {\n const info = yield* getEmailTemplateStatus;\n\n if (!info) {\n yield* Effect.log(\n \"No custom magic code email associated with this app.\\nTo add one, run 'instant-cli auth email pull', edit the file, then run 'instant-cli auth email push'\",\n );\n return;\n }\n\n const verification = yield* Option.match(\n Option.fromNullable(info.sender_id),\n {\n onNone: () => Effect.succeed(null),\n onSome: () => getVerification,\n },\n );\n\n if (opts.json) {\n const fullInfo = verification\n ? {\n ...info,\n verification: verification,\n }\n : info;\n\n yield* Effect.log(JSON.stringify(fullInfo, null, 2));\n return;\n }\n\n yield* Effect.log(chalk.cyan('Custom Magic Code Email'));\n yield* Effect.log(` Sender name: ${info.name}`);\n yield* Effect.log(` Sender email: ${formatValue(info.email)}`);\n yield* Effect.log(` Subject: ${info.subject}`);\n yield* Effect.log(` Body: ${info.body}`);\n\n if (verification) {\n yield* Effect.log(\n '\\n' +\n boxen(\n [\n `Instant verified: ${formatVerified(verification.instant['verified?'])}`,\n `Postmark verified: ${formatVerified(verification.verification?.Confirmed)}`,\n ].join('\\n'),\n {\n title: 'Custom Sender Verification',\n borderColor:\n verification.instant['verified?'] &&\n verification.verification?.Confirmed\n ? 'green'\n : 'yellow',\n padding: { right: 1, left: 1 },\n },\n ),\n );\n\n if (verification.verification) {\n yield* Effect.log(\n '\\n' + formatSenderVerificationDnsRecords(verification.verification),\n );\n }\n }\n});\n"]}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/commands/auth/email/status.ts"],"names":[],"mappings":"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","sourcesContent":["import boxen from 'boxen';\nimport chalk from 'chalk';\nimport { Effect, Option, Schema } from 'effect';\nimport { CurrentApp } from '../../../context/currentApp.ts';\nimport type { authEmailStatusDef, OptsFromCommand } from '../../../index.ts';\nimport { InstantHttpAuthed } from '../../../lib/http.ts';\nimport { HttpClientResponse } from '@effect/platform';\nimport { getVerification } from '../../../lib/email.ts';\n\nconst formatValue = (value: string | number | null | undefined) =>\n value ?? 'n/a';\n\nconst formatVerified = (value: boolean | null | undefined) => {\n if (value === true) {\n return chalk.green('verified');\n }\n if (value === false) {\n return chalk.yellow('pending');\n }\n return 'n/a';\n};\n\nconst formatDnsRecord = (type: string, name: string, value: string) =>\n [chalk.bold(type), `Name: ${name}`, `Value: ${value}`].join('\\n');\n\nexport const formatSenderVerificationDnsRecords = (verification: {\n Confirmed: boolean;\n DKIMPendingHost: string;\n DKIMPendingTextValue: string;\n ReturnPathDomain: string;\n ReturnPathDomainCNAMEValue: string;\n}) =>\n boxen(\n [\n chalk.bold('Add these DNS records to verify your sender email:'),\n '',\n formatDnsRecord(\n 'TXT',\n verification.DKIMPendingHost,\n verification.DKIMPendingTextValue,\n ),\n '',\n formatDnsRecord(\n 'CNAME',\n verification.ReturnPathDomain,\n verification.ReturnPathDomainCNAMEValue,\n ),\n ].join('\\n'),\n {\n borderColor: verification.Confirmed ? 'green' : 'yellow',\n padding: { right: 1, left: 1 },\n },\n );\n\nexport const EmailTemplateInfoSchema = Schema.Struct({\n id: Schema.String,\n email: Schema.String.pipe(Schema.NullishOr),\n name: Schema.String,\n sender_id: Schema.String.pipe(Schema.NullishOr),\n app_id: Schema.String,\n postmark_id: Schema.Number.pipe(Schema.NullishOr),\n verification_verified: Schema.Boolean.pipe(Schema.NullishOr),\n verification_id: Schema.String.pipe(Schema.NullishOr),\n email_type: Schema.String,\n body: Schema.String,\n subject: Schema.String,\n});\n\nexport type EmailTemplateInfo = typeof EmailTemplateInfoSchema.Type;\n\nexport const EmailTemplateSchema = Schema.Union(\n Schema.Struct({\n info: EmailTemplateInfoSchema.pipe(Schema.NullishOr),\n }),\n Schema.Null,\n);\n\nexport const getEmailTemplateStatus = Effect.gen(function* () {\n const { appId } = yield* CurrentApp;\n const http = yield* InstantHttpAuthed;\n\n const app = yield* http\n .get(`/dash/apps/${appId}/email_status`)\n .pipe(\n Effect.flatMap(HttpClientResponse.schemaBodyJson(EmailTemplateSchema)),\n );\n return app?.info;\n});\n\nexport const emailStatusCmd = Effect.fn(function* (\n opts: OptsFromCommand<typeof authEmailStatusDef>,\n) {\n const info = yield* getEmailTemplateStatus;\n\n if (!info) {\n yield* Effect.log(\n \"No custom magic code email associated with this app.\\nTo add one, run 'instant-cli auth email pull', edit the file, then run 'instant-cli auth email push'\",\n );\n return;\n }\n\n const verification = yield* Option.match(\n Option.fromNullable(info.sender_id),\n {\n onNone: () => Effect.succeed(null),\n onSome: () => getVerification,\n },\n );\n\n if (opts.json) {\n const fullInfo = verification\n ? {\n ...info,\n verification: verification,\n }\n : info;\n\n yield* Effect.log(JSON.stringify(fullInfo, null, 2));\n return;\n }\n\n yield* Effect.log(chalk.cyan('Custom Magic Code Email'));\n yield* Effect.log(` Sender name: ${info.name}`);\n yield* Effect.log(` Sender email: ${formatValue(info.email)}`);\n yield* Effect.log(` Subject: ${info.subject}`);\n yield* Effect.log(` Body: ${info.body}`);\n\n if (verification) {\n yield* Effect.log(\n '\\n' +\n boxen(\n [\n `Instant verified: ${formatVerified(verification.instant['verified?'])}`,\n `Postmark verified: ${formatVerified(verification.verification?.Confirmed)}`,\n ].join('\\n'),\n {\n title: 'Custom Sender Verification',\n borderColor:\n verification.instant['verified?'] &&\n verification.verification?.Confirmed\n ? 'green'\n : 'yellow',\n padding: { right: 1, left: 1 },\n },\n ),\n );\n\n if (verification.verification) {\n yield* Effect.log(\n '\\n' + formatSenderVerificationDnsRecords(verification.verification),\n );\n }\n }\n});\n"]}
@@ -6,7 +6,7 @@ export declare const EmailConfig: Schema.Struct<{
6
6
  authEmail: Schema.Struct<{
7
7
  subject: typeof Schema.String;
8
8
  senderName: typeof Schema.String;
9
- senderEmail: Schema.optional<typeof Schema.String>;
9
+ senderEmail: Schema.NullishOr<typeof Schema.String>;
10
10
  body: typeof Schema.String;
11
11
  }>;
12
12
  }>;
@@ -22,14 +22,14 @@ export declare const readEmailConfig: (emailPath?: string) => Effect.Effect<{
22
22
  readonly body: string;
23
23
  readonly subject: string;
24
24
  readonly senderName: string;
25
- readonly senderEmail?: string | undefined;
25
+ readonly senderEmail: string | null | undefined;
26
26
  };
27
27
  }, BadArgsError | NoEmailFileFound, never>;
28
28
  export declare const sendSenderVerification: Effect.Effect<void, import("./http.ts").InstantHttpError | import("effect/Cause").TimeoutException | import("@effect/platform/HttpClientError").RequestError, InstantHttpAuthed | CurrentApp>;
29
29
  export declare const submitVerification: (code: string) => Effect.Effect<void, import("./http.ts").InstantHttpError | import("effect/Cause").TimeoutException | import("@effect/platform/HttpClientError").RequestError, InstantHttpAuthed | CurrentApp>;
30
30
  export declare const getVerification: Effect.Effect<{
31
31
  readonly instant: {
32
- readonly 'verified?': boolean;
32
+ readonly 'verified?': boolean | null | undefined;
33
33
  };
34
34
  readonly verification: {
35
35
  readonly Confirmed: boolean;
package/dist/lib/email.js CHANGED
@@ -8,7 +8,7 @@ export const EmailConfig = Schema.Struct({
8
8
  authEmail: Schema.Struct({
9
9
  subject: Schema.String,
10
10
  senderName: Schema.String,
11
- senderEmail: Schema.optional(Schema.String),
11
+ senderEmail: Schema.NullishOr(Schema.String),
12
12
  body: Schema.String,
13
13
  }),
14
14
  });
@@ -46,7 +46,7 @@ export const submitVerification = Effect.fn(function* (code) {
46
46
  });
47
47
  const VerificationSchema = Schema.Struct({
48
48
  instant: Schema.Struct({
49
- 'verified?': Schema.Boolean,
49
+ 'verified?': Schema.Boolean.pipe(Schema.NullishOr),
50
50
  }),
51
51
  verification: Schema.Struct({
52
52
  Confirmed: Schema.Boolean,
@@ -1 +1 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/lib/email.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpBody, HttpClientResponse } from '@effect/platform';\nimport { Effect, Schema } from 'effect';\nimport { CurrentApp } from '../context/currentApp.ts';\nimport { BadArgsError } from '../errors.ts';\nimport { readLocalEmailFile } from '../old.js';\nimport { InstantHttpAuthed } from './http.ts';\n\nexport const EmailConfig = Schema.Struct({\n authEmail: Schema.Struct({\n subject: Schema.String,\n senderName: Schema.String,\n senderEmail: Schema.optional(Schema.String),\n body: Schema.String,\n }),\n});\n\nexport class NoEmailFileFound extends Schema.TaggedError<NoEmailFileFound>(\n 'NoEmailFileFound',\n)('NoEmailFileFound', {\n message: Schema.String,\n}) {}\n\nexport const readEmailConfig = (emailPath?: string) =>\n Effect.gen(function* () {\n const emailFile = yield* Effect.tryPromise({\n try: () => readLocalEmailFile(emailPath),\n catch: (e) =>\n BadArgsError.make({\n message: `Error reading instant.email.ts file: ${e}`,\n }),\n });\n\n if (!emailFile) {\n return yield* NoEmailFileFound.make({\n message:\n \"We couldn't find your `instant.email.ts` file. Make sure it's in the root directory. (Hint: You can use an INSTANT_EMAIL_FILE_PATH environment variable to specify it.)\",\n });\n }\n\n return yield* Schema.decodeUnknown(EmailConfig)(emailFile.email).pipe(\n Effect.catchTag('ParseError', (e) =>\n BadArgsError.make({\n message: `Invalid instant.email.ts file: ${e.message}`,\n }),\n ),\n );\n });\n\nexport const sendSenderVerification = Effect.gen(function* () {\n const http = yield* InstantHttpAuthed;\n const { appId } = yield* CurrentApp;\n yield* http.post(`/dash/apps/${appId}/sender-verification/send-magic-code`);\n});\n\nexport const submitVerification = Effect.fn(function* (code: string) {\n const http = yield* InstantHttpAuthed;\n const { appId } = yield* CurrentApp;\n yield* http.post(\n `/dash/apps/${appId}/sender-verification/verify-magic-code`,\n {\n body: HttpBody.unsafeJson({ code }),\n },\n );\n});\n\nconst VerificationSchema = Schema.Struct({\n instant: Schema.Struct({\n 'verified?': Schema.Boolean,\n }),\n verification: Schema.Struct({\n Confirmed: Schema.Boolean,\n ID: Schema.Number,\n EmailAddress: Schema.String,\n DKIMHost: Schema.String,\n ReturnPathDomain: Schema.String,\n DKIMPendingTextValue: Schema.String,\n ReturnPathDomainCNAMEValue: Schema.String,\n DKIMTextValue: Schema.String,\n DKIMPendingHost: Schema.String,\n }).pipe(Schema.NullishOr),\n});\n\nexport const getVerification = Effect.gen(function* () {\n const http = yield* InstantHttpAuthed;\n const { appId } = yield* CurrentApp;\n\n const response = yield* http\n .get(`/dash/apps/${appId}/sender-verification`)\n .pipe(\n Effect.flatMap(HttpClientResponse.schemaBodyJson(VerificationSchema)),\n );\n return response;\n});\n"]}
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/lib/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5C,IAAI,EAAE,MAAM,CAAC,MAAM;KACpB,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,CACtD,kBAAkB,CACnB,CAAC,kBAAkB,EAAE;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAkB,EAAE,EAAE,CACpD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QACzC,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC;QACxC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CACX,YAAY,CAAC,IAAI,CAAC;YAChB,OAAO,EAAE,wCAAwC,CAAC,EAAE;SACrD,CAAC;KACL,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAClC,OAAO,EACL,yKAAyK;SAC5K,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CACnE,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAClC,YAAY,CAAC,IAAI,CAAC;QAChB,OAAO,EAAE,kCAAkC,CAAC,CAAC,OAAO,EAAE;KACvD,CAAC,CACH,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACxD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;IACtC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IACpC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,sCAAsC,CAAC,CAAC;AAC9E,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAY;IACjE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;IACtC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IACpC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CACd,cAAc,KAAK,wCAAwC,EAC3D;QACE,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;KACpC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;KACnD,CAAC;IACF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC,OAAO;QACzB,EAAE,EAAE,MAAM,CAAC,MAAM;QACjB,YAAY,EAAE,MAAM,CAAC,MAAM;QAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM;QACvB,gBAAgB,EAAE,MAAM,CAAC,MAAM;QAC/B,oBAAoB,EAAE,MAAM,CAAC,MAAM;QACnC,0BAA0B,EAAE,MAAM,CAAC,MAAM;QACzC,aAAa,EAAE,MAAM,CAAC,MAAM;QAC5B,eAAe,EAAE,MAAM,CAAC,MAAM;KAC/B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;IACtC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IAEpC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,IAAI;SACzB,GAAG,CAAC,cAAc,KAAK,sBAAsB,CAAC;SAC9C,IAAI,CACH,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CACtE,CAAC;IACJ,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC,CAAC","sourcesContent":["import { HttpBody, HttpClientResponse } from '@effect/platform';\nimport { Effect, Schema } from 'effect';\nimport { CurrentApp } from '../context/currentApp.ts';\nimport { BadArgsError } from '../errors.ts';\nimport { readLocalEmailFile } from '../old.js';\nimport { InstantHttpAuthed } from './http.ts';\n\nexport const EmailConfig = Schema.Struct({\n authEmail: Schema.Struct({\n subject: Schema.String,\n senderName: Schema.String,\n senderEmail: Schema.NullishOr(Schema.String),\n body: Schema.String,\n }),\n});\n\nexport class NoEmailFileFound extends Schema.TaggedError<NoEmailFileFound>(\n 'NoEmailFileFound',\n)('NoEmailFileFound', {\n message: Schema.String,\n}) {}\n\nexport const readEmailConfig = (emailPath?: string) =>\n Effect.gen(function* () {\n const emailFile = yield* Effect.tryPromise({\n try: () => readLocalEmailFile(emailPath),\n catch: (e) =>\n BadArgsError.make({\n message: `Error reading instant.email.ts file: ${e}`,\n }),\n });\n\n if (!emailFile) {\n return yield* NoEmailFileFound.make({\n message:\n \"We couldn't find your `instant.email.ts` file. Make sure it's in the root directory. (Hint: You can use an INSTANT_EMAIL_FILE_PATH environment variable to specify it.)\",\n });\n }\n\n return yield* Schema.decodeUnknown(EmailConfig)(emailFile.email).pipe(\n Effect.catchTag('ParseError', (e) =>\n BadArgsError.make({\n message: `Invalid instant.email.ts file: ${e.message}`,\n }),\n ),\n );\n });\n\nexport const sendSenderVerification = Effect.gen(function* () {\n const http = yield* InstantHttpAuthed;\n const { appId } = yield* CurrentApp;\n yield* http.post(`/dash/apps/${appId}/sender-verification/send-magic-code`);\n});\n\nexport const submitVerification = Effect.fn(function* (code: string) {\n const http = yield* InstantHttpAuthed;\n const { appId } = yield* CurrentApp;\n yield* http.post(\n `/dash/apps/${appId}/sender-verification/verify-magic-code`,\n {\n body: HttpBody.unsafeJson({ code }),\n },\n );\n});\n\nconst VerificationSchema = Schema.Struct({\n instant: Schema.Struct({\n 'verified?': Schema.Boolean.pipe(Schema.NullishOr),\n }),\n verification: Schema.Struct({\n Confirmed: Schema.Boolean,\n ID: Schema.Number,\n EmailAddress: Schema.String,\n DKIMHost: Schema.String,\n ReturnPathDomain: Schema.String,\n DKIMPendingTextValue: Schema.String,\n ReturnPathDomainCNAMEValue: Schema.String,\n DKIMTextValue: Schema.String,\n DKIMPendingHost: Schema.String,\n }).pipe(Schema.NullishOr),\n});\n\nexport const getVerification = Effect.gen(function* () {\n const http = yield* InstantHttpAuthed;\n const { appId } = yield* CurrentApp;\n\n const response = yield* http\n .get(`/dash/apps/${appId}/sender-verification`)\n .pipe(\n Effect.flatMap(HttpClientResponse.schemaBodyJson(VerificationSchema)),\n );\n return response;\n});\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "instant-cli",
3
3
  "type": "module",
4
- "version": "1.0.48",
4
+ "version": "1.0.49",
5
5
  "description": "Instant's CLI",
6
6
  "license": "Apache-2.0",
7
7
  "homepage": "https://github.com/instantdb/instant/tree/main/client/packages/cli",
@@ -50,9 +50,9 @@
50
50
  "strip-ansi": "^7.1.2",
51
51
  "supports-hyperlinks": "^4.4.0",
52
52
  "unconfig": "^7.5.0",
53
- "@instantdb/core": "1.0.48",
54
- "@instantdb/platform": "1.0.48",
55
- "@instantdb/version": "1.0.48"
53
+ "@instantdb/core": "1.0.49",
54
+ "@instantdb/platform": "1.0.49",
55
+ "@instantdb/version": "1.0.49"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@babel/core": "^7.17.9",
@@ -18,6 +18,7 @@ import {
18
18
  getEmailTemplateStatus,
19
19
  } from './status.ts';
20
20
  import chalk from 'chalk';
21
+ import { getDefaultEmailTemplate } from './pull.ts';
21
22
 
22
23
  export const authEmailPushCmd = Effect.fn(function* (
23
24
  opts: OptsFromCommand<typeof authEmailPushDef>,
@@ -26,7 +27,12 @@ export const authEmailPushCmd = Effect.fn(function* (
26
27
  const { appId } = yield* CurrentApp;
27
28
  const http = yield* InstantHttpAuthed;
28
29
  const authEmail = emailConfig.authEmail;
29
- const senderEmail = authEmail.senderEmail;
30
+ const defTemplate = yield* getDefaultEmailTemplate;
31
+ const senderEmail =
32
+ // If the value in the code is the default instant-owned email, remove it from the request
33
+ authEmail.senderEmail === defTemplate.senderEmail
34
+ ? undefined
35
+ : emailConfig.authEmail.senderEmail;
30
36
 
31
37
  yield* http
32
38
  .pipe(
@@ -74,7 +80,10 @@ export const authEmailPushCmd = Effect.fn(function* (
74
80
  );
75
81
  }
76
82
 
77
- if (emailConfig.authEmail.senderEmail) {
83
+ if (
84
+ emailConfig.authEmail.senderEmail &&
85
+ emailConfig.authEmail.senderEmail !== defTemplate.senderEmail
86
+ ) {
78
87
  const verification = yield* getVerification;
79
88
  if (verification.verification) {
80
89
  yield* Effect.log(
@@ -54,7 +54,7 @@ export const formatSenderVerificationDnsRecords = (verification: {
54
54
 
55
55
  export const EmailTemplateInfoSchema = Schema.Struct({
56
56
  id: Schema.String,
57
- email: Schema.String.pipe(Schema.optional),
57
+ email: Schema.String.pipe(Schema.NullishOr),
58
58
  name: Schema.String,
59
59
  sender_id: Schema.String.pipe(Schema.NullishOr),
60
60
  app_id: Schema.String,
package/src/lib/email.ts CHANGED
@@ -9,7 +9,7 @@ export const EmailConfig = Schema.Struct({
9
9
  authEmail: Schema.Struct({
10
10
  subject: Schema.String,
11
11
  senderName: Schema.String,
12
- senderEmail: Schema.optional(Schema.String),
12
+ senderEmail: Schema.NullishOr(Schema.String),
13
13
  body: Schema.String,
14
14
  }),
15
15
  });
@@ -65,7 +65,7 @@ export const submitVerification = Effect.fn(function* (code: string) {
65
65
 
66
66
  const VerificationSchema = Schema.Struct({
67
67
  instant: Schema.Struct({
68
- 'verified?': Schema.Boolean,
68
+ 'verified?': Schema.Boolean.pipe(Schema.NullishOr),
69
69
  }),
70
70
  verification: Schema.Struct({
71
71
  Confirmed: Schema.Boolean,