@luvabase/sdk 0.0.17 → 0.0.18

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/index.d.ts CHANGED
@@ -126,6 +126,10 @@ type Member = {
126
126
  name: string;
127
127
  imageUrl: string | null;
128
128
  };
129
+ type Pod = {
130
+ id: string;
131
+ name: string;
132
+ };
129
133
  type Session = {
130
134
  user: Member | null;
131
135
  };
@@ -133,9 +137,10 @@ type FullEnvironment = {
133
137
  luvaEnv: LuvaEnv;
134
138
  session: Session;
135
139
  members: Member[];
140
+ pods: Pod[];
136
141
  };
137
142
  declare function overrideEnvironment(env: FullEnvironment): void;
138
- declare function getLunaEnv(): {
143
+ declare function getLuvaEnv(): {
139
144
  podId: string;
140
145
  installedAt: string;
141
146
  updatedAt: string;
@@ -162,6 +167,7 @@ declare function getLunaEnv(): {
162
167
  declare function getAdminUrl(): string;
163
168
  declare function getSessionInfo(request: Request): Promise<Session>;
164
169
  declare function getMembers(request: Request): Promise<Member[]>;
170
+ declare function getOtherPods(request: Request): Promise<Pod[]>;
165
171
  //#endregion
166
- export { AppManifest, LuvaEnv, Member, OpenRouterRuntimeService, R2RuntimeService, RelatedApp, RuntimeService, Session, TursoRuntimeService, getAdminUrl, getLunaEnv, getMembers, getSessionInfo, overrideEnvironment };
172
+ export { AppManifest, LuvaEnv, Member, OpenRouterRuntimeService, Pod, R2RuntimeService, RelatedApp, RuntimeService, Session, TursoRuntimeService, getAdminUrl, getLuvaEnv, getMembers, getOtherPods, getSessionInfo, overrideEnvironment };
167
173
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/envSchema.ts","../src/manifestSchema.ts","../src/index.ts"],"mappings":";;;KAEY,OAAA,GAAU,CAAA,CAAE,KAAA,QAAa,OAAA;AAAA,cACxB,OAAA,EAAO,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;KASR,mBAAA,GAAsB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,cACpC,mBAAA,EAAmB,CAAA,CAAA,SAAA;;;;;;;;KASpB,wBAAA,GAA2B,CAAA,CAAE,KAAA,QAAa,wBAAA;AAAA,cACzC,wBAAA,EAAwB,CAAA,CAAA,SAAA;;;;;;;KAQzB,gBAAA,GAAmB,CAAA,CAAE,KAAA,QAAa,gBAAA;AAAA,cACjC,gBAAA,EAAgB,CAAA,CAAA,SAAA;;;;;;KAOjB,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,cAC/B,cAAA,EAAc,CAAA,CAAA,QAAA,WAAA,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;KCtCf,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,WAAA;AAAA,cAC5B,WAAA,EAAW,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA2EX,UAAA,EAAU,CAAA,CAAA,SAAA;;;;;;;;;;;KCzEX,MAAA;EACV,EAAA;EACA,IAAA;EACA,QAAA;AAAA;AAAA,KAGU,OAAA;EACV,IAAA,EAAM,MAAA;AAAA;AAAA,KAGH,eAAA;EACH,OAAA,EAAS,OAAA;EACT,OAAA,EAAS,OAAA;EACT,OAAA,EAAS,MAAA;AAAA;AAAA,iBASK,mBAAA,CAAoB,GAAA,EAAK,eAAA;AAAA,iBAIzB,UAAA,CAAA;;;;YAAU,MAAA;;;;;;;;;;;;;;;;;;;;iBAeV,WAAA,CAAA;AAAA,iBAKM,cAAA,CAAe,OAAA,EAAS,OAAA,GAAU,OAAA,CAAQ,OAAA;AAAA,iBAQ1C,UAAA,CAAW,OAAA,EAAS,OAAA,GAAU,OAAA,CAAQ,MAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/envSchema.ts","../src/manifestSchema.ts","../src/index.ts"],"mappings":";;;KAEY,OAAA,GAAU,CAAA,CAAE,KAAA,QAAa,OAAA;AAAA,cACxB,OAAA,EAAO,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;KASR,mBAAA,GAAsB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,cACpC,mBAAA,EAAmB,CAAA,CAAA,SAAA;;;;;;;;KASpB,wBAAA,GAA2B,CAAA,CAAE,KAAA,QAAa,wBAAA;AAAA,cACzC,wBAAA,EAAwB,CAAA,CAAA,SAAA;;;;;;;KAQzB,gBAAA,GAAmB,CAAA,CAAE,KAAA,QAAa,gBAAA;AAAA,cACjC,gBAAA,EAAgB,CAAA,CAAA,SAAA;;;;;;KAOjB,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,cAC/B,cAAA,EAAc,CAAA,CAAA,QAAA,WAAA,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;KCtCf,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,WAAA;AAAA,cAC5B,WAAA,EAAW,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA2EX,UAAA,EAAU,CAAA,CAAA,SAAA;;;;;;;;;;;KCzEX,MAAA;EACV,EAAA;EACA,IAAA;EACA,QAAA;AAAA;AAAA,KAGU,GAAA;EACV,EAAA;EACA,IAAA;AAAA;AAAA,KAGU,OAAA;EACV,IAAA,EAAM,MAAA;AAAA;AAAA,KAGH,eAAA;EACH,OAAA,EAAS,OAAA;EACT,OAAA,EAAS,OAAA;EACT,OAAA,EAAS,MAAA;EACT,IAAA,EAAM,GAAA;AAAA;AAAA,iBAKQ,mBAAA,CAAoB,GAAA,EAAK,eAAA;AAAA,iBAIzB,UAAA,CAAA;;;;YAAU,MAAA;;;;;;;;;;;;;;;;;;;;iBAeV,WAAA,CAAA;AAAA,iBAKM,cAAA,CAAe,OAAA,EAAS,OAAA,GAAU,OAAA,CAAQ,OAAA;AAAA,iBAQ1C,UAAA,CAAW,OAAA,EAAS,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,iBAQtC,YAAA,CAAa,OAAA,EAAS,OAAA,GAAU,OAAA,CAAQ,GAAA"}
package/dist/index.js CHANGED
@@ -72,15 +72,15 @@ let overriddenEnv;
72
72
  function overrideEnvironment(env) {
73
73
  overriddenEnv = env;
74
74
  }
75
- function getLunaEnv() {
75
+ function getLuvaEnv() {
76
76
  if (overriddenEnv) return overriddenEnv.luvaEnv;
77
- let env = process.env.lunaEnv;
78
- if (!env) throw new Error("Luna env is not available");
77
+ let env = process.env.luvaEnv;
78
+ if (!env) throw new Error("Luva env is not available");
79
79
  if (typeof process.env === "string") env = JSON.parse(env);
80
80
  return LuvaEnv.parse(env);
81
81
  }
82
82
  function getAdminUrl() {
83
- return `https://luvabase.com/dash/pods/${getLunaEnv().podId}`;
83
+ return `https://luvabase.com/dash/pods/${getLuvaEnv().podId}`;
84
84
  }
85
85
  async function getSessionInfo(request) {
86
86
  if (overriddenEnv) return overriddenEnv.session;
@@ -92,7 +92,12 @@ async function getMembers(request) {
92
92
  const headers = new Headers(request.headers);
93
93
  return fetch("/luvabase/members", { headers }).then((res) => res.json());
94
94
  }
95
+ async function getOtherPods(request) {
96
+ if (overriddenEnv) return overriddenEnv.pods;
97
+ const headers = new Headers(request.headers);
98
+ return fetch("/luvabase/pods", { headers }).then((res) => res.json());
99
+ }
95
100
  //#endregion
96
- export { AppManifest, LuvaEnv, OpenRouterRuntimeService, R2RuntimeService, RelatedApp, RuntimeService, TursoRuntimeService, getAdminUrl, getLunaEnv, getMembers, getSessionInfo, overrideEnvironment };
101
+ export { AppManifest, LuvaEnv, OpenRouterRuntimeService, R2RuntimeService, RelatedApp, RuntimeService, TursoRuntimeService, getAdminUrl, getLuvaEnv, getMembers, getOtherPods, getSessionInfo, overrideEnvironment };
97
102
 
98
103
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/envSchema.ts","../src/manifestSchema.ts","../src/index.ts"],"sourcesContent":["import { z } from \"zod\"\n\nexport type LuvaEnv = z.infer<typeof LuvaEnv>\nexport const LuvaEnv = z.lazy(() =>\n z.object({\n podId: z.string().describe(\"The id of the pod\"),\n installedAt: z.string(),\n updatedAt: z.string(),\n services: z.record(z.string(), RuntimeService),\n }),\n)\n\nexport type TursoRuntimeService = z.infer<typeof TursoRuntimeService>\nexport const TursoRuntimeService = z.object({\n type: z.literal(\"turso\"),\n name: z.string(),\n createdAt: z.string(),\n databaseName: z.string(),\n databaseApiToken: z.string(),\n databaseHostname: z.string(),\n})\n\nexport type OpenRouterRuntimeService = z.infer<typeof OpenRouterRuntimeService>\nexport const OpenRouterRuntimeService = z.object({\n type: z.literal(\"openrouter\"),\n name: z.string(),\n createdAt: z.string(),\n apiKey: z.string(),\n apiKeyLabel: z.string(),\n})\n\nexport type R2RuntimeService = z.infer<typeof R2RuntimeService>\nexport const R2RuntimeService = z.object({\n type: z.literal(\"r2\"),\n name: z.string(),\n createdAt: z.string(),\n bucketName: z.string(),\n})\n\nexport type RuntimeService = z.infer<typeof RuntimeService>\nexport const RuntimeService = z.union([\n TursoRuntimeService,\n OpenRouterRuntimeService,\n R2RuntimeService,\n])\n","import { z } from \"zod\"\n\nexport type AppManifest = z.infer<typeof AppManifest>\nexport const AppManifest = z.lazy(() =>\n z.object({\n $schema: z.string().optional().describe(\"JSON Schema for the manifest\"),\n identifier: z\n .string()\n .regex(/^[a-z0-9-]+$/)\n .min(3)\n .max(50)\n .optional()\n .describe(\n \"Globally unique url safe and lowercased identifier for the app e.g. 'luvabase-snake' (required for Luvabase submissions)\",\n ),\n name: z\n .string()\n .min(3)\n .max(30)\n .describe(\"Name of the app e.g. 'Snake' (max 30 characters)\"),\n subtitle: z\n .string()\n .min(3)\n .max(50)\n .optional()\n .describe(\n \"Subtitle of the app e.g. 'Play the classic of classics' (max 50 characters)\",\n ),\n description: z\n .string()\n .max(10000)\n .optional()\n .describe(\"Full description of the app\"),\n screenshots: z\n .array(z.string())\n .optional()\n .describe(\n \"Relative paths of app screenshots e.g. ['images/screenshot1.png', 'images/screenshot2.png']\",\n ),\n category: z\n .string()\n .optional()\n .describe(\n \"Could be 'productivity', 'health', etc (must be one of the standard categories listed here https://github.com/w3c/manifest/wiki/Categories)\",\n ),\n icon: z\n .string()\n .optional()\n .describe(\n \"Relative path of the app icon inside the .luva app file e.g. 'images/icon.png'\",\n ),\n repository: z\n .string()\n .optional()\n .describe(\n \"URL of the source code repository e.g. 'https://github.com/luvabase/snake'\",\n ),\n services: z\n .array(\n z.object({\n type: z.enum([\"turso\", \"openrouter\", \"durable-object\", \"r2\"]),\n name: z.string(),\n metadata: z.record(z.string(), z.any()).optional(),\n }),\n )\n .optional(),\n hooks: z\n .array(\n z.object({\n type: z.enum([\"app.update\", \"member.update\"]),\n relativeUrl: z.string().describe(\"Relative URL to the hook handler\"),\n }),\n )\n .optional(),\n relatedApps: z.array(RelatedApp).optional(),\n }),\n)\n\nexport const RelatedApp = z.object({\n type: z.enum([\"android\", \"ios\"]),\n identifier: z.string(), // android package name or ios bundle id\n downloadLink: z.string().optional(),\n redirectUrls: z.array(z.string()),\n})\n","import { LuvaEnv } from \"./envSchema\"\n\nexport * from \"./envSchema\"\nexport * from \"./manifestSchema\"\n\nexport type Member = {\n id: string\n name: string\n imageUrl: string | null\n}\n\nexport type Session = {\n user: Member | null\n}\n\ntype FullEnvironment = {\n luvaEnv: LuvaEnv\n session: Session\n members: Member[]\n}\n\nlet overriddenEnv: {\n luvaEnv: LuvaEnv\n session: { user: Member | null }\n members: Member[]\n}\n\nexport function overrideEnvironment(env: FullEnvironment) {\n overriddenEnv = env\n}\n\nexport function getLunaEnv() {\n if (overriddenEnv) {\n return overriddenEnv.luvaEnv\n }\n let env = process.env.lunaEnv\n if (!env) {\n throw new Error(\"Luna env is not available\")\n }\n if (typeof process.env === \"string\") {\n env = JSON.parse(env)\n }\n const luvabaseEnv = LuvaEnv.parse(env)\n return luvabaseEnv\n}\n\nexport function getAdminUrl(): string {\n const lunaEnv = getLunaEnv()\n return `https://luvabase.com/dash/pods/${lunaEnv.podId}`\n}\n\nexport async function getSessionInfo(request: Request): Promise<Session> {\n if (overriddenEnv) {\n return overriddenEnv.session\n }\n const headers = new Headers(request.headers)\n return fetch(\"/luvabase/session\", { headers }).then((res) => res.json())\n}\n\nexport async function getMembers(request: Request): Promise<Member[]> {\n if (overriddenEnv) {\n return overriddenEnv.members\n }\n const headers = new Headers(request.headers)\n return fetch(\"/luvabase/members\", { headers }).then((res) => res.json())\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/envSchema.ts","../src/manifestSchema.ts","../src/index.ts"],"sourcesContent":["import { z } from \"zod\"\n\nexport type LuvaEnv = z.infer<typeof LuvaEnv>\nexport const LuvaEnv = z.lazy(() =>\n z.object({\n podId: z.string().describe(\"The id of the pod\"),\n installedAt: z.string(),\n updatedAt: z.string(),\n services: z.record(z.string(), RuntimeService),\n }),\n)\n\nexport type TursoRuntimeService = z.infer<typeof TursoRuntimeService>\nexport const TursoRuntimeService = z.object({\n type: z.literal(\"turso\"),\n name: z.string(),\n createdAt: z.string(),\n databaseName: z.string(),\n databaseApiToken: z.string(),\n databaseHostname: z.string(),\n})\n\nexport type OpenRouterRuntimeService = z.infer<typeof OpenRouterRuntimeService>\nexport const OpenRouterRuntimeService = z.object({\n type: z.literal(\"openrouter\"),\n name: z.string(),\n createdAt: z.string(),\n apiKey: z.string(),\n apiKeyLabel: z.string(),\n})\n\nexport type R2RuntimeService = z.infer<typeof R2RuntimeService>\nexport const R2RuntimeService = z.object({\n type: z.literal(\"r2\"),\n name: z.string(),\n createdAt: z.string(),\n bucketName: z.string(),\n})\n\nexport type RuntimeService = z.infer<typeof RuntimeService>\nexport const RuntimeService = z.union([\n TursoRuntimeService,\n OpenRouterRuntimeService,\n R2RuntimeService,\n])\n","import { z } from \"zod\"\n\nexport type AppManifest = z.infer<typeof AppManifest>\nexport const AppManifest = z.lazy(() =>\n z.object({\n $schema: z.string().optional().describe(\"JSON Schema for the manifest\"),\n identifier: z\n .string()\n .regex(/^[a-z0-9-]+$/)\n .min(3)\n .max(50)\n .optional()\n .describe(\n \"Globally unique url safe and lowercased identifier for the app e.g. 'luvabase-snake' (required for Luvabase submissions)\",\n ),\n name: z\n .string()\n .min(3)\n .max(30)\n .describe(\"Name of the app e.g. 'Snake' (max 30 characters)\"),\n subtitle: z\n .string()\n .min(3)\n .max(50)\n .optional()\n .describe(\n \"Subtitle of the app e.g. 'Play the classic of classics' (max 50 characters)\",\n ),\n description: z\n .string()\n .max(10000)\n .optional()\n .describe(\"Full description of the app\"),\n screenshots: z\n .array(z.string())\n .optional()\n .describe(\n \"Relative paths of app screenshots e.g. ['images/screenshot1.png', 'images/screenshot2.png']\",\n ),\n category: z\n .string()\n .optional()\n .describe(\n \"Could be 'productivity', 'health', etc (must be one of the standard categories listed here https://github.com/w3c/manifest/wiki/Categories)\",\n ),\n icon: z\n .string()\n .optional()\n .describe(\n \"Relative path of the app icon inside the .luva app file e.g. 'images/icon.png'\",\n ),\n repository: z\n .string()\n .optional()\n .describe(\n \"URL of the source code repository e.g. 'https://github.com/luvabase/snake'\",\n ),\n services: z\n .array(\n z.object({\n type: z.enum([\"turso\", \"openrouter\", \"durable-object\", \"r2\"]),\n name: z.string(),\n metadata: z.record(z.string(), z.any()).optional(),\n }),\n )\n .optional(),\n hooks: z\n .array(\n z.object({\n type: z.enum([\"app.update\", \"member.update\"]),\n relativeUrl: z.string().describe(\"Relative URL to the hook handler\"),\n }),\n )\n .optional(),\n relatedApps: z.array(RelatedApp).optional(),\n }),\n)\n\nexport const RelatedApp = z.object({\n type: z.enum([\"android\", \"ios\"]),\n identifier: z.string(), // android package name or ios bundle id\n downloadLink: z.string().optional(),\n redirectUrls: z.array(z.string()),\n})\n","import { LuvaEnv } from \"./envSchema\"\n\nexport * from \"./envSchema\"\nexport * from \"./manifestSchema\"\n\nexport type Member = {\n id: string\n name: string\n imageUrl: string | null\n}\n\nexport type Pod = {\n id: string\n name: string\n}\n\nexport type Session = {\n user: Member | null\n}\n\ntype FullEnvironment = {\n luvaEnv: LuvaEnv\n session: Session\n members: Member[]\n pods: Pod[]\n}\n\nlet overriddenEnv: FullEnvironment | undefined\n\nexport function overrideEnvironment(env: FullEnvironment) {\n overriddenEnv = env\n}\n\nexport function getLuvaEnv() {\n if (overriddenEnv) {\n return overriddenEnv.luvaEnv\n }\n let env = process.env.luvaEnv\n if (!env) {\n throw new Error(\"Luva env is not available\")\n }\n if (typeof process.env === \"string\") {\n env = JSON.parse(env)\n }\n const luvabaseEnv = LuvaEnv.parse(env)\n return luvabaseEnv\n}\n\nexport function getAdminUrl(): string {\n const luvaEnv = getLuvaEnv()\n return `https://luvabase.com/dash/pods/${luvaEnv.podId}`\n}\n\nexport async function getSessionInfo(request: Request): Promise<Session> {\n if (overriddenEnv) {\n return overriddenEnv.session\n }\n const headers = new Headers(request.headers)\n return fetch(\"/luvabase/session\", { headers }).then((res) => res.json())\n}\n\nexport async function getMembers(request: Request): Promise<Member[]> {\n if (overriddenEnv) {\n return overriddenEnv.members\n }\n const headers = new Headers(request.headers)\n return fetch(\"/luvabase/members\", { headers }).then((res) => res.json())\n}\n\nexport async function getOtherPods(request: Request): Promise<Pod[]> {\n if (overriddenEnv) {\n return overriddenEnv.pods\n }\n const headers = new Headers(request.headers)\n return fetch(\"/luvabase/pods\", { headers }).then((res) => res.json())\n}\n"],"mappings":";;AAGA,MAAa,UAAU,EAAE,WACvB,EAAE,OAAO;CACP,OAAO,EAAE,QAAQ,CAAC,SAAS,oBAAoB;CAC/C,aAAa,EAAE,QAAQ;CACvB,WAAW,EAAE,QAAQ;CACrB,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe;CAC/C,CAAC,CACH;AAGD,MAAa,sBAAsB,EAAE,OAAO;CAC1C,MAAM,EAAE,QAAQ,QAAQ;CACxB,MAAM,EAAE,QAAQ;CAChB,WAAW,EAAE,QAAQ;CACrB,cAAc,EAAE,QAAQ;CACxB,kBAAkB,EAAE,QAAQ;CAC5B,kBAAkB,EAAE,QAAQ;CAC7B,CAAC;AAGF,MAAa,2BAA2B,EAAE,OAAO;CAC/C,MAAM,EAAE,QAAQ,aAAa;CAC7B,MAAM,EAAE,QAAQ;CAChB,WAAW,EAAE,QAAQ;CACrB,QAAQ,EAAE,QAAQ;CAClB,aAAa,EAAE,QAAQ;CACxB,CAAC;AAGF,MAAa,mBAAmB,EAAE,OAAO;CACvC,MAAM,EAAE,QAAQ,KAAK;CACrB,MAAM,EAAE,QAAQ;CAChB,WAAW,EAAE,QAAQ;CACrB,YAAY,EAAE,QAAQ;CACvB,CAAC;AAGF,MAAa,iBAAiB,EAAE,MAAM;CACpC;CACA;CACA;CACD,CAAC;;;ACzCF,MAAa,cAAc,EAAE,WAC3B,EAAE,OAAO;CACP,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,+BAA+B;CACvE,YAAY,EACT,QAAQ,CACR,MAAM,eAAe,CACrB,IAAI,EAAE,CACN,IAAI,GAAG,CACP,UAAU,CACV,SACC,2HACD;CACH,MAAM,EACH,QAAQ,CACR,IAAI,EAAE,CACN,IAAI,GAAG,CACP,SAAS,mDAAmD;CAC/D,UAAU,EACP,QAAQ,CACR,IAAI,EAAE,CACN,IAAI,GAAG,CACP,UAAU,CACV,SACC,8EACD;CACH,aAAa,EACV,QAAQ,CACR,IAAI,IAAM,CACV,UAAU,CACV,SAAS,8BAA8B;CAC1C,aAAa,EACV,MAAM,EAAE,QAAQ,CAAC,CACjB,UAAU,CACV,SACC,8FACD;CACH,UAAU,EACP,QAAQ,CACR,UAAU,CACV,SACC,8IACD;CACH,MAAM,EACH,QAAQ,CACR,UAAU,CACV,SACC,iFACD;CACH,YAAY,EACT,QAAQ,CACR,UAAU,CACV,SACC,6EACD;CACH,UAAU,EACP,MACC,EAAE,OAAO;EACP,MAAM,EAAE,KAAK;GAAC;GAAS;GAAc;GAAkB;GAAK,CAAC;EAC7D,MAAM,EAAE,QAAQ;EAChB,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,UAAU;EACnD,CAAC,CACH,CACA,UAAU;CACb,OAAO,EACJ,MACC,EAAE,OAAO;EACP,MAAM,EAAE,KAAK,CAAC,cAAc,gBAAgB,CAAC;EAC7C,aAAa,EAAE,QAAQ,CAAC,SAAS,mCAAmC;EACrE,CAAC,CACH,CACA,UAAU;CACb,aAAa,EAAE,MAAM,WAAW,CAAC,UAAU;CAC5C,CAAC,CACH;AAED,MAAa,aAAa,EAAE,OAAO;CACjC,MAAM,EAAE,KAAK,CAAC,WAAW,MAAM,CAAC;CAChC,YAAY,EAAE,QAAQ;CACtB,cAAc,EAAE,QAAQ,CAAC,UAAU;CACnC,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC;CAClC,CAAC;;;ACxDF,IAAI;AAEJ,SAAgB,oBAAoB,KAAsB;AACxD,iBAAgB;;AAGlB,SAAgB,aAAa;AAC3B,KAAI,cACF,QAAO,cAAc;CAEvB,IAAI,MAAM,QAAQ,IAAI;AACtB,KAAI,CAAC,IACH,OAAM,IAAI,MAAM,4BAA4B;AAE9C,KAAI,OAAO,QAAQ,QAAQ,SACzB,OAAM,KAAK,MAAM,IAAI;AAGvB,QADoB,QAAQ,MAAM,IAAI;;AAIxC,SAAgB,cAAsB;AAEpC,QAAO,kCADS,YAAY,CACqB;;AAGnD,eAAsB,eAAe,SAAoC;AACvE,KAAI,cACF,QAAO,cAAc;CAEvB,MAAM,UAAU,IAAI,QAAQ,QAAQ,QAAQ;AAC5C,QAAO,MAAM,qBAAqB,EAAE,SAAS,CAAC,CAAC,MAAM,QAAQ,IAAI,MAAM,CAAC;;AAG1E,eAAsB,WAAW,SAAqC;AACpE,KAAI,cACF,QAAO,cAAc;CAEvB,MAAM,UAAU,IAAI,QAAQ,QAAQ,QAAQ;AAC5C,QAAO,MAAM,qBAAqB,EAAE,SAAS,CAAC,CAAC,MAAM,QAAQ,IAAI,MAAM,CAAC;;AAG1E,eAAsB,aAAa,SAAkC;AACnE,KAAI,cACF,QAAO,cAAc;CAEvB,MAAM,UAAU,IAAI,QAAQ,QAAQ,QAAQ;AAC5C,QAAO,MAAM,kBAAkB,EAAE,SAAS,CAAC,CAAC,MAAM,QAAQ,IAAI,MAAM,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luvabase/sdk",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
package/src/index.ts CHANGED
@@ -9,6 +9,11 @@ export type Member = {
9
9
  imageUrl: string | null
10
10
  }
11
11
 
12
+ export type Pod = {
13
+ id: string
14
+ name: string
15
+ }
16
+
12
17
  export type Session = {
13
18
  user: Member | null
14
19
  }
@@ -17,25 +22,22 @@ type FullEnvironment = {
17
22
  luvaEnv: LuvaEnv
18
23
  session: Session
19
24
  members: Member[]
25
+ pods: Pod[]
20
26
  }
21
27
 
22
- let overriddenEnv: {
23
- luvaEnv: LuvaEnv
24
- session: { user: Member | null }
25
- members: Member[]
26
- }
28
+ let overriddenEnv: FullEnvironment | undefined
27
29
 
28
30
  export function overrideEnvironment(env: FullEnvironment) {
29
31
  overriddenEnv = env
30
32
  }
31
33
 
32
- export function getLunaEnv() {
34
+ export function getLuvaEnv() {
33
35
  if (overriddenEnv) {
34
36
  return overriddenEnv.luvaEnv
35
37
  }
36
- let env = process.env.lunaEnv
38
+ let env = process.env.luvaEnv
37
39
  if (!env) {
38
- throw new Error("Luna env is not available")
40
+ throw new Error("Luva env is not available")
39
41
  }
40
42
  if (typeof process.env === "string") {
41
43
  env = JSON.parse(env)
@@ -45,8 +47,8 @@ export function getLunaEnv() {
45
47
  }
46
48
 
47
49
  export function getAdminUrl(): string {
48
- const lunaEnv = getLunaEnv()
49
- return `https://luvabase.com/dash/pods/${lunaEnv.podId}`
50
+ const luvaEnv = getLuvaEnv()
51
+ return `https://luvabase.com/dash/pods/${luvaEnv.podId}`
50
52
  }
51
53
 
52
54
  export async function getSessionInfo(request: Request): Promise<Session> {
@@ -64,3 +66,11 @@ export async function getMembers(request: Request): Promise<Member[]> {
64
66
  const headers = new Headers(request.headers)
65
67
  return fetch("/luvabase/members", { headers }).then((res) => res.json())
66
68
  }
69
+
70
+ export async function getOtherPods(request: Request): Promise<Pod[]> {
71
+ if (overriddenEnv) {
72
+ return overriddenEnv.pods
73
+ }
74
+ const headers = new Headers(request.headers)
75
+ return fetch("/luvabase/pods", { headers }).then((res) => res.json())
76
+ }