apptvty 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +5 -4
- package/dist/setup.d.mts +3 -0
- package/dist/setup.d.ts +3 -0
- package/dist/setup.js +4 -3
- package/dist/setup.js.map +1 -1
- package/dist/setup.mjs +4 -3
- package/dist/setup.mjs.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -46,12 +46,13 @@ async function register(options) {
|
|
|
46
46
|
trialEndsAt: data.trial_ends_at,
|
|
47
47
|
email: data.email ?? null,
|
|
48
48
|
setup: {
|
|
49
|
-
|
|
49
|
+
envFile: data.env_file || (data.framework === "nextjs" ? ".env.local" : ".env"),
|
|
50
|
+
envVars: data.env_vars || {
|
|
50
51
|
APPTVTY_SITE_ID: data.site_id,
|
|
51
52
|
APPTVTY_API_KEY: data.api_key
|
|
52
53
|
},
|
|
53
|
-
files: data.
|
|
54
|
-
x402: data.
|
|
54
|
+
files: data.files,
|
|
55
|
+
x402: data.x402
|
|
55
56
|
}
|
|
56
57
|
};
|
|
57
58
|
}
|
|
@@ -250,7 +251,7 @@ async function runInit() {
|
|
|
250
251
|
if (!isNonInteractive) {
|
|
251
252
|
console.log(" done\n");
|
|
252
253
|
}
|
|
253
|
-
const envFile = framework === "nextjs" ? ".env.local" : ".env";
|
|
254
|
+
const envFile = result.setup.envFile || (framework === "nextjs" ? ".env.local" : ".env");
|
|
254
255
|
appendEnvFile(envFile, result.setup.envVars);
|
|
255
256
|
const scaffolded = [];
|
|
256
257
|
if (result.setup.files && !isNonInteractive) {
|
package/dist/setup.d.mts
CHANGED
|
@@ -31,9 +31,12 @@ interface RegisterResult {
|
|
|
31
31
|
trialEndsAt: string;
|
|
32
32
|
email: string | null;
|
|
33
33
|
setup: {
|
|
34
|
+
envFile: string;
|
|
34
35
|
envVars: {
|
|
35
36
|
APPTVTY_SITE_ID: string;
|
|
36
37
|
APPTVTY_API_KEY: string;
|
|
38
|
+
APPTVTY_DASHBOARD_SECRET: string;
|
|
39
|
+
APPTVTY_CLAIM_TOKEN: string;
|
|
37
40
|
};
|
|
38
41
|
files?: Record<string, string>;
|
|
39
42
|
x402?: {
|
package/dist/setup.d.ts
CHANGED
|
@@ -31,9 +31,12 @@ interface RegisterResult {
|
|
|
31
31
|
trialEndsAt: string;
|
|
32
32
|
email: string | null;
|
|
33
33
|
setup: {
|
|
34
|
+
envFile: string;
|
|
34
35
|
envVars: {
|
|
35
36
|
APPTVTY_SITE_ID: string;
|
|
36
37
|
APPTVTY_API_KEY: string;
|
|
38
|
+
APPTVTY_DASHBOARD_SECRET: string;
|
|
39
|
+
APPTVTY_CLAIM_TOKEN: string;
|
|
37
40
|
};
|
|
38
41
|
files?: Record<string, string>;
|
|
39
42
|
x402?: {
|
package/dist/setup.js
CHANGED
|
@@ -66,12 +66,13 @@ async function register(options) {
|
|
|
66
66
|
trialEndsAt: data.trial_ends_at,
|
|
67
67
|
email: data.email ?? null,
|
|
68
68
|
setup: {
|
|
69
|
-
|
|
69
|
+
envFile: data.env_file || (data.framework === "nextjs" ? ".env.local" : ".env"),
|
|
70
|
+
envVars: data.env_vars || {
|
|
70
71
|
APPTVTY_SITE_ID: data.site_id,
|
|
71
72
|
APPTVTY_API_KEY: data.api_key
|
|
72
73
|
},
|
|
73
|
-
files: data.
|
|
74
|
-
x402: data.
|
|
74
|
+
files: data.files,
|
|
75
|
+
x402: data.x402
|
|
75
76
|
}
|
|
76
77
|
};
|
|
77
78
|
}
|
package/dist/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/setup.ts"],"sourcesContent":["/**\n * Programmatic registration for coding agents.\n *\n * Usage (in a setup script or agent tool call):\n *\n * import { register } from 'apptvty/setup';\n * const result = await register({ domain: 'mysite.com', framework: 'nextjs' });\n * console.log(result.api_key, result.dashboard_url);\n *\n * No email required — a Crossmint wallet is created automatically using\n * the generated company_id as the owner identifier.\n */\n\nconst DEFAULT_API_URL: string =\n (typeof process !== 'undefined' ? process.env?.APPTVTY_API_URL : undefined) ??\n 'https://api.apptvty.com';\n\nexport interface RegisterOptions {\n domain: string;\n framework?: 'nextjs' | 'express' | 'other';\n /** Optional — passed to the API for analytics on agent type */\n agentId?: string;\n /** Optional — email to associate with this account so the human can claim it via magic link */\n email?: string;\n /** Override the API base URL (useful for self-hosted / staging) */\n apiUrl?: string;\n}\n\nexport interface RegisterResult {\n siteId: string;\n apiKey: string;\n companyId: string;\n walletAddress: string | null;\n platformDepositAddress: string | null;\n dashboardUrl: string;\n claimTokenExpiresAt: string;\n trialEndsAt: string;\n email: string | null;\n setup: {\n envVars: { APPTVTY_SITE_ID: string; APPTVTY_API_KEY: string };\n files?: Record<string, string>;\n x402?: {\n protocol: string;\n chain: string;\n currency: string;\n };\n };\n}\n\nexport class RegistrationError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n ) {\n super(message);\n this.name = 'RegistrationError';\n }\n}\n\n/**\n * Register a new site with Apptvty.\n *\n * Idempotent per domain — if the domain is already registered, throws\n * RegistrationError with code DOMAIN_TAKEN.\n */\nexport async function register(options: RegisterOptions): Promise<RegisterResult> {\n const apiUrl = (options.apiUrl ?? DEFAULT_API_URL).replace(/\\/$/, '');\n\n const response = await fetch(`${apiUrl}/v1/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n domain: options.domain,\n framework: options.framework ?? 'other',\n agent_id: options.agentId,\n ...(options.email && { email: options.email }),\n }),\n signal: AbortSignal.timeout(20_000),\n });\n\n const json = await response.json() as any;\n\n if (!response.ok) {\n throw new RegistrationError(\n json.error?.code ?? 'REGISTRATION_FAILED',\n json.error?.message ?? `Registration failed with status ${response.status}`,\n );\n }\n\n const data = json.data ?? json;\n\n return {\n siteId: data.site_id,\n apiKey: data.api_key,\n companyId: data.company_id,\n walletAddress: data.wallet_address ?? null,\n platformDepositAddress: data.platform_deposit_address ?? null,\n dashboardUrl: data.dashboard_url,\n claimTokenExpiresAt: data.claim_token_expires_at,\n trialEndsAt: data.trial_ends_at,\n email: data.email ?? null,\n setup: {\n envVars: data.
|
|
1
|
+
{"version":3,"sources":["../src/setup.ts"],"sourcesContent":["/**\n * Programmatic registration for coding agents.\n *\n * Usage (in a setup script or agent tool call):\n *\n * import { register } from 'apptvty/setup';\n * const result = await register({ domain: 'mysite.com', framework: 'nextjs' });\n * console.log(result.api_key, result.dashboard_url);\n *\n * No email required — a Crossmint wallet is created automatically using\n * the generated company_id as the owner identifier.\n */\n\nconst DEFAULT_API_URL: string =\n (typeof process !== 'undefined' ? process.env?.APPTVTY_API_URL : undefined) ??\n 'https://api.apptvty.com';\n\nexport interface RegisterOptions {\n domain: string;\n framework?: 'nextjs' | 'express' | 'other';\n /** Optional — passed to the API for analytics on agent type */\n agentId?: string;\n /** Optional — email to associate with this account so the human can claim it via magic link */\n email?: string;\n /** Override the API base URL (useful for self-hosted / staging) */\n apiUrl?: string;\n}\n\nexport interface RegisterResult {\n siteId: string;\n apiKey: string;\n companyId: string;\n walletAddress: string | null;\n platformDepositAddress: string | null;\n dashboardUrl: string;\n claimTokenExpiresAt: string;\n trialEndsAt: string;\n email: string | null;\n setup: {\n envFile: string;\n envVars: { \n APPTVTY_SITE_ID: string; \n APPTVTY_API_KEY: string;\n APPTVTY_DASHBOARD_SECRET: string;\n APPTVTY_CLAIM_TOKEN: string;\n };\n files?: Record<string, string>;\n x402?: {\n protocol: string;\n chain: string;\n currency: string;\n };\n };\n}\n\nexport class RegistrationError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n ) {\n super(message);\n this.name = 'RegistrationError';\n }\n}\n\n/**\n * Register a new site with Apptvty.\n *\n * Idempotent per domain — if the domain is already registered, throws\n * RegistrationError with code DOMAIN_TAKEN.\n */\nexport async function register(options: RegisterOptions): Promise<RegisterResult> {\n const apiUrl = (options.apiUrl ?? DEFAULT_API_URL).replace(/\\/$/, '');\n\n const response = await fetch(`${apiUrl}/v1/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n domain: options.domain,\n framework: options.framework ?? 'other',\n agent_id: options.agentId,\n ...(options.email && { email: options.email }),\n }),\n signal: AbortSignal.timeout(20_000),\n });\n\n const json = await response.json() as any;\n\n if (!response.ok) {\n throw new RegistrationError(\n json.error?.code ?? 'REGISTRATION_FAILED',\n json.error?.message ?? `Registration failed with status ${response.status}`,\n );\n }\n\n const data = json.data ?? json;\n\n return {\n siteId: data.site_id,\n apiKey: data.api_key,\n companyId: data.company_id,\n walletAddress: data.wallet_address ?? null,\n platformDepositAddress: data.platform_deposit_address ?? null,\n dashboardUrl: data.dashboard_url,\n claimTokenExpiresAt: data.claim_token_expires_at,\n trialEndsAt: data.trial_ends_at,\n email: data.email ?? null,\n setup: {\n envFile: data.env_file || (data.framework === 'nextjs' ? '.env.local' : '.env'),\n envVars: data.env_vars || {\n APPTVTY_SITE_ID: data.site_id,\n APPTVTY_API_KEY: data.api_key,\n },\n files: data.files,\n x402: data.x402,\n },\n };\n}\n\n// ─── Migrate (reindex / re-crawl) ─────────────────────────────────────────────\n\nexport interface MigrateOptions {\n siteId: string;\n apiKey: string;\n /** Override API base URL (useful for self-hosted / staging) */\n apiUrl?: string;\n}\n\nexport interface MigrateResult {\n message: string;\n siteId: string;\n domain: string;\n}\n\nexport class MigrateError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n ) {\n super(message);\n this.name = 'MigrateError';\n }\n}\n\n/**\n * Trigger an immediate re-crawl/reindex of a site.\n *\n * Use after publishing new content or updating your sitemap.\n * The crawl runs asynchronously — the endpoint returns 202 immediately.\n */\nexport async function migrate(options: MigrateOptions): Promise<MigrateResult> {\n const apiUrl = (options.apiUrl ?? DEFAULT_API_URL).replace(/\\/$/, '');\n\n const response = await fetch(`${apiUrl}/v1/sites/${options.siteId}/reindex`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${options.apiKey}`,\n 'Content-Type': 'application/json',\n },\n signal: AbortSignal.timeout(20_000),\n });\n\n const json = (await response.json()) as {\n error?: { code?: string; message?: string };\n data?: { message?: string; siteId?: string; domain?: string };\n message?: string;\n siteId?: string;\n domain?: string;\n };\n const data = json.data ?? json;\n const err = json.error;\n\n if (!response.ok) {\n throw new MigrateError(err?.code ?? 'MIGRATE_FAILED', err?.message ?? `Migrate failed with status ${response.status}`);\n }\n\n return {\n message: (data as { message?: string }).message ?? 'Reindex started.',\n siteId: (data as { siteId?: string }).siteId ?? options.siteId,\n domain: (data as { domain?: string }).domain ?? '',\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,IAAM,mBACH,OAAO,YAAY,cAAc,QAAQ,KAAK,kBAAkB,WACjE;AAwCK,IAAM,oBAAN,cAAgC,MAAM;AAAA,EAC3C,YACkB,MAChB,SACA;AACA,UAAM,OAAO;AAHG;AAIhB,SAAK,OAAO;AAAA,EACd;AACF;AAQA,eAAsB,SAAS,SAAmD;AAChF,QAAM,UAAU,QAAQ,UAAU,iBAAiB,QAAQ,OAAO,EAAE;AAEpE,QAAM,WAAW,MAAM,MAAM,GAAG,MAAM,gBAAgB;AAAA,IACpD,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,IAC9C,MAAM,KAAK,UAAU;AAAA,MACnB,QAAQ,QAAQ;AAAA,MAChB,WAAW,QAAQ,aAAa;AAAA,MAChC,UAAU,QAAQ;AAAA,MAClB,GAAI,QAAQ,SAAS,EAAE,OAAO,QAAQ,MAAM;AAAA,IAC9C,CAAC;AAAA,IACD,QAAQ,YAAY,QAAQ,GAAM;AAAA,EACpC,CAAC;AAED,QAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR,KAAK,OAAO,QAAQ;AAAA,MACpB,KAAK,OAAO,WAAW,mCAAmC,SAAS,MAAM;AAAA,IAC3E;AAAA,EACF;AAEA,QAAM,OAAO,KAAK,QAAQ;AAE1B,SAAO;AAAA,IACL,QAAQ,KAAK;AAAA,IACb,QAAQ,KAAK;AAAA,IACb,WAAW,KAAK;AAAA,IAChB,eAAe,KAAK,kBAAkB;AAAA,IACtC,wBAAwB,KAAK,4BAA4B;AAAA,IACzD,cAAc,KAAK;AAAA,IACnB,qBAAqB,KAAK;AAAA,IAC1B,aAAa,KAAK;AAAA,IAClB,OAAO,KAAK,SAAS;AAAA,IACrB,OAAO;AAAA,MACL,SAAS,KAAK,aAAa,KAAK,cAAc,WAAW,eAAe;AAAA,MACxE,SAAS,KAAK,YAAY;AAAA,QACxB,iBAAiB,KAAK;AAAA,QACtB,iBAAiB,KAAK;AAAA,MACxB;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,IACb;AAAA,EACF;AACF;AAiBO,IAAM,eAAN,cAA2B,MAAM;AAAA,EACtC,YACkB,MAChB,SACA;AACA,UAAM,OAAO;AAHG;AAIhB,SAAK,OAAO;AAAA,EACd;AACF;AAQA,eAAsB,QAAQ,SAAiD;AAC7E,QAAM,UAAU,QAAQ,UAAU,iBAAiB,QAAQ,OAAO,EAAE;AAEpE,QAAM,WAAW,MAAM,MAAM,GAAG,MAAM,aAAa,QAAQ,MAAM,YAAY;AAAA,IAC3E,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,eAAe,UAAU,QAAQ,MAAM;AAAA,MACvC,gBAAgB;AAAA,IAClB;AAAA,IACA,QAAQ,YAAY,QAAQ,GAAM;AAAA,EACpC,CAAC;AAED,QAAM,OAAQ,MAAM,SAAS,KAAK;AAOlC,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,MAAM,KAAK;AAEjB,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,aAAa,KAAK,QAAQ,kBAAkB,KAAK,WAAW,8BAA8B,SAAS,MAAM,EAAE;AAAA,EACvH;AAEA,SAAO;AAAA,IACL,SAAU,KAA8B,WAAW;AAAA,IACnD,QAAS,KAA6B,UAAU,QAAQ;AAAA,IACxD,QAAS,KAA6B,UAAU;AAAA,EAClD;AACF;","names":[]}
|
package/dist/setup.mjs
CHANGED
|
@@ -39,12 +39,13 @@ async function register(options) {
|
|
|
39
39
|
trialEndsAt: data.trial_ends_at,
|
|
40
40
|
email: data.email ?? null,
|
|
41
41
|
setup: {
|
|
42
|
-
|
|
42
|
+
envFile: data.env_file || (data.framework === "nextjs" ? ".env.local" : ".env"),
|
|
43
|
+
envVars: data.env_vars || {
|
|
43
44
|
APPTVTY_SITE_ID: data.site_id,
|
|
44
45
|
APPTVTY_API_KEY: data.api_key
|
|
45
46
|
},
|
|
46
|
-
files: data.
|
|
47
|
-
x402: data.
|
|
47
|
+
files: data.files,
|
|
48
|
+
x402: data.x402
|
|
48
49
|
}
|
|
49
50
|
};
|
|
50
51
|
}
|
package/dist/setup.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/setup.ts"],"sourcesContent":["/**\n * Programmatic registration for coding agents.\n *\n * Usage (in a setup script or agent tool call):\n *\n * import { register } from 'apptvty/setup';\n * const result = await register({ domain: 'mysite.com', framework: 'nextjs' });\n * console.log(result.api_key, result.dashboard_url);\n *\n * No email required — a Crossmint wallet is created automatically using\n * the generated company_id as the owner identifier.\n */\n\nconst DEFAULT_API_URL: string =\n (typeof process !== 'undefined' ? process.env?.APPTVTY_API_URL : undefined) ??\n 'https://api.apptvty.com';\n\nexport interface RegisterOptions {\n domain: string;\n framework?: 'nextjs' | 'express' | 'other';\n /** Optional — passed to the API for analytics on agent type */\n agentId?: string;\n /** Optional — email to associate with this account so the human can claim it via magic link */\n email?: string;\n /** Override the API base URL (useful for self-hosted / staging) */\n apiUrl?: string;\n}\n\nexport interface RegisterResult {\n siteId: string;\n apiKey: string;\n companyId: string;\n walletAddress: string | null;\n platformDepositAddress: string | null;\n dashboardUrl: string;\n claimTokenExpiresAt: string;\n trialEndsAt: string;\n email: string | null;\n setup: {\n envVars: { APPTVTY_SITE_ID: string; APPTVTY_API_KEY: string };\n files?: Record<string, string>;\n x402?: {\n protocol: string;\n chain: string;\n currency: string;\n };\n };\n}\n\nexport class RegistrationError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n ) {\n super(message);\n this.name = 'RegistrationError';\n }\n}\n\n/**\n * Register a new site with Apptvty.\n *\n * Idempotent per domain — if the domain is already registered, throws\n * RegistrationError with code DOMAIN_TAKEN.\n */\nexport async function register(options: RegisterOptions): Promise<RegisterResult> {\n const apiUrl = (options.apiUrl ?? DEFAULT_API_URL).replace(/\\/$/, '');\n\n const response = await fetch(`${apiUrl}/v1/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n domain: options.domain,\n framework: options.framework ?? 'other',\n agent_id: options.agentId,\n ...(options.email && { email: options.email }),\n }),\n signal: AbortSignal.timeout(20_000),\n });\n\n const json = await response.json() as any;\n\n if (!response.ok) {\n throw new RegistrationError(\n json.error?.code ?? 'REGISTRATION_FAILED',\n json.error?.message ?? `Registration failed with status ${response.status}`,\n );\n }\n\n const data = json.data ?? json;\n\n return {\n siteId: data.site_id,\n apiKey: data.api_key,\n companyId: data.company_id,\n walletAddress: data.wallet_address ?? null,\n platformDepositAddress: data.platform_deposit_address ?? null,\n dashboardUrl: data.dashboard_url,\n claimTokenExpiresAt: data.claim_token_expires_at,\n trialEndsAt: data.trial_ends_at,\n email: data.email ?? null,\n setup: {\n envVars: data.
|
|
1
|
+
{"version":3,"sources":["../src/setup.ts"],"sourcesContent":["/**\n * Programmatic registration for coding agents.\n *\n * Usage (in a setup script or agent tool call):\n *\n * import { register } from 'apptvty/setup';\n * const result = await register({ domain: 'mysite.com', framework: 'nextjs' });\n * console.log(result.api_key, result.dashboard_url);\n *\n * No email required — a Crossmint wallet is created automatically using\n * the generated company_id as the owner identifier.\n */\n\nconst DEFAULT_API_URL: string =\n (typeof process !== 'undefined' ? process.env?.APPTVTY_API_URL : undefined) ??\n 'https://api.apptvty.com';\n\nexport interface RegisterOptions {\n domain: string;\n framework?: 'nextjs' | 'express' | 'other';\n /** Optional — passed to the API for analytics on agent type */\n agentId?: string;\n /** Optional — email to associate with this account so the human can claim it via magic link */\n email?: string;\n /** Override the API base URL (useful for self-hosted / staging) */\n apiUrl?: string;\n}\n\nexport interface RegisterResult {\n siteId: string;\n apiKey: string;\n companyId: string;\n walletAddress: string | null;\n platformDepositAddress: string | null;\n dashboardUrl: string;\n claimTokenExpiresAt: string;\n trialEndsAt: string;\n email: string | null;\n setup: {\n envFile: string;\n envVars: { \n APPTVTY_SITE_ID: string; \n APPTVTY_API_KEY: string;\n APPTVTY_DASHBOARD_SECRET: string;\n APPTVTY_CLAIM_TOKEN: string;\n };\n files?: Record<string, string>;\n x402?: {\n protocol: string;\n chain: string;\n currency: string;\n };\n };\n}\n\nexport class RegistrationError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n ) {\n super(message);\n this.name = 'RegistrationError';\n }\n}\n\n/**\n * Register a new site with Apptvty.\n *\n * Idempotent per domain — if the domain is already registered, throws\n * RegistrationError with code DOMAIN_TAKEN.\n */\nexport async function register(options: RegisterOptions): Promise<RegisterResult> {\n const apiUrl = (options.apiUrl ?? DEFAULT_API_URL).replace(/\\/$/, '');\n\n const response = await fetch(`${apiUrl}/v1/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n domain: options.domain,\n framework: options.framework ?? 'other',\n agent_id: options.agentId,\n ...(options.email && { email: options.email }),\n }),\n signal: AbortSignal.timeout(20_000),\n });\n\n const json = await response.json() as any;\n\n if (!response.ok) {\n throw new RegistrationError(\n json.error?.code ?? 'REGISTRATION_FAILED',\n json.error?.message ?? `Registration failed with status ${response.status}`,\n );\n }\n\n const data = json.data ?? json;\n\n return {\n siteId: data.site_id,\n apiKey: data.api_key,\n companyId: data.company_id,\n walletAddress: data.wallet_address ?? null,\n platformDepositAddress: data.platform_deposit_address ?? null,\n dashboardUrl: data.dashboard_url,\n claimTokenExpiresAt: data.claim_token_expires_at,\n trialEndsAt: data.trial_ends_at,\n email: data.email ?? null,\n setup: {\n envFile: data.env_file || (data.framework === 'nextjs' ? '.env.local' : '.env'),\n envVars: data.env_vars || {\n APPTVTY_SITE_ID: data.site_id,\n APPTVTY_API_KEY: data.api_key,\n },\n files: data.files,\n x402: data.x402,\n },\n };\n}\n\n// ─── Migrate (reindex / re-crawl) ─────────────────────────────────────────────\n\nexport interface MigrateOptions {\n siteId: string;\n apiKey: string;\n /** Override API base URL (useful for self-hosted / staging) */\n apiUrl?: string;\n}\n\nexport interface MigrateResult {\n message: string;\n siteId: string;\n domain: string;\n}\n\nexport class MigrateError extends Error {\n constructor(\n public readonly code: string,\n message: string,\n ) {\n super(message);\n this.name = 'MigrateError';\n }\n}\n\n/**\n * Trigger an immediate re-crawl/reindex of a site.\n *\n * Use after publishing new content or updating your sitemap.\n * The crawl runs asynchronously — the endpoint returns 202 immediately.\n */\nexport async function migrate(options: MigrateOptions): Promise<MigrateResult> {\n const apiUrl = (options.apiUrl ?? DEFAULT_API_URL).replace(/\\/$/, '');\n\n const response = await fetch(`${apiUrl}/v1/sites/${options.siteId}/reindex`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${options.apiKey}`,\n 'Content-Type': 'application/json',\n },\n signal: AbortSignal.timeout(20_000),\n });\n\n const json = (await response.json()) as {\n error?: { code?: string; message?: string };\n data?: { message?: string; siteId?: string; domain?: string };\n message?: string;\n siteId?: string;\n domain?: string;\n };\n const data = json.data ?? json;\n const err = json.error;\n\n if (!response.ok) {\n throw new MigrateError(err?.code ?? 'MIGRATE_FAILED', err?.message ?? `Migrate failed with status ${response.status}`);\n }\n\n return {\n message: (data as { message?: string }).message ?? 'Reindex started.',\n siteId: (data as { siteId?: string }).siteId ?? options.siteId,\n domain: (data as { domain?: string }).domain ?? '',\n };\n}\n"],"mappings":";AAaA,IAAM,mBACH,OAAO,YAAY,cAAc,QAAQ,KAAK,kBAAkB,WACjE;AAwCK,IAAM,oBAAN,cAAgC,MAAM;AAAA,EAC3C,YACkB,MAChB,SACA;AACA,UAAM,OAAO;AAHG;AAIhB,SAAK,OAAO;AAAA,EACd;AACF;AAQA,eAAsB,SAAS,SAAmD;AAChF,QAAM,UAAU,QAAQ,UAAU,iBAAiB,QAAQ,OAAO,EAAE;AAEpE,QAAM,WAAW,MAAM,MAAM,GAAG,MAAM,gBAAgB;AAAA,IACpD,QAAQ;AAAA,IACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,IAC9C,MAAM,KAAK,UAAU;AAAA,MACnB,QAAQ,QAAQ;AAAA,MAChB,WAAW,QAAQ,aAAa;AAAA,MAChC,UAAU,QAAQ;AAAA,MAClB,GAAI,QAAQ,SAAS,EAAE,OAAO,QAAQ,MAAM;AAAA,IAC9C,CAAC;AAAA,IACD,QAAQ,YAAY,QAAQ,GAAM;AAAA,EACpC,CAAC;AAED,QAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR,KAAK,OAAO,QAAQ;AAAA,MACpB,KAAK,OAAO,WAAW,mCAAmC,SAAS,MAAM;AAAA,IAC3E;AAAA,EACF;AAEA,QAAM,OAAO,KAAK,QAAQ;AAE1B,SAAO;AAAA,IACL,QAAQ,KAAK;AAAA,IACb,QAAQ,KAAK;AAAA,IACb,WAAW,KAAK;AAAA,IAChB,eAAe,KAAK,kBAAkB;AAAA,IACtC,wBAAwB,KAAK,4BAA4B;AAAA,IACzD,cAAc,KAAK;AAAA,IACnB,qBAAqB,KAAK;AAAA,IAC1B,aAAa,KAAK;AAAA,IAClB,OAAO,KAAK,SAAS;AAAA,IACrB,OAAO;AAAA,MACL,SAAS,KAAK,aAAa,KAAK,cAAc,WAAW,eAAe;AAAA,MACxE,SAAS,KAAK,YAAY;AAAA,QACxB,iBAAiB,KAAK;AAAA,QACtB,iBAAiB,KAAK;AAAA,MACxB;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,IACb;AAAA,EACF;AACF;AAiBO,IAAM,eAAN,cAA2B,MAAM;AAAA,EACtC,YACkB,MAChB,SACA;AACA,UAAM,OAAO;AAHG;AAIhB,SAAK,OAAO;AAAA,EACd;AACF;AAQA,eAAsB,QAAQ,SAAiD;AAC7E,QAAM,UAAU,QAAQ,UAAU,iBAAiB,QAAQ,OAAO,EAAE;AAEpE,QAAM,WAAW,MAAM,MAAM,GAAG,MAAM,aAAa,QAAQ,MAAM,YAAY;AAAA,IAC3E,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,eAAe,UAAU,QAAQ,MAAM;AAAA,MACvC,gBAAgB;AAAA,IAClB;AAAA,IACA,QAAQ,YAAY,QAAQ,GAAM;AAAA,EACpC,CAAC;AAED,QAAM,OAAQ,MAAM,SAAS,KAAK;AAOlC,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,MAAM,KAAK;AAEjB,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,aAAa,KAAK,QAAQ,kBAAkB,KAAK,WAAW,8BAA8B,SAAS,MAAM,EAAE;AAAA,EACvH;AAEA,SAAO;AAAA,IACL,SAAU,KAA8B,WAAW;AAAA,IACnD,QAAS,KAA6B,UAAU,QAAQ;AAAA,IACxD,QAAS,KAA6B,UAAU;AAAA,EAClD;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "apptvty",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Server-side analytics and AEO (Agent Experience Optimization) SDK for websites. Logs agentic traffic, exposes a structured query endpoint for AI agents, and serves relevant ads on agent queries.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|